struts2文件上传
1.文件上传前端三要素:
(1)post请求
(2)enctype="multipart/form-data"
(3)<input type="file" name="uploadFile"/>
JSP代码:
<s:form action="upload.action" enctype="multipart/form-data">
<s:textfield name="username" label="用户名"/>
<s:file name="uploadFile" label="上传文件"/>
<s:submit value="上传"/>
</s:form>
2. 配置struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 开启静态方法调用 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<!-- 设置开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 限制文件上传的大小 (默认为2兆)-->
<constant name="struts.multipart.maxSize" value="5242880"></constant>
<!-- 配置全局消息资源包,解决英文问题 -->
<constant name="struts.custom.i18n.resources" value="fileupload_message"></constant>
<package name="fileupload" extends="struts-default" namespace="/">
<!-- 上传 -->
<action name="upload" class="com.baidu.action.UploadAction" method="upload">
<!-- 限制文件的扩展名,如果有多个限制条件用逗号隔开
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">jpg</param>
</interceptor-ref>
-->
<!-- 限制文件的MIME,如果有多个文件时使用逗号隔开 -->
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedTypes">image/jpeg</param>
</interceptor-ref>
</action>
</package>
</struts>
3.编写Action类
@Data
public class UploadAction extends ActionSupport {
private File uploadFile;
public String upload() throws Exception {
String realPath = ServletActionContext.getServletContext().getRealPath("/WEB-INF/file/");
File dirFile = new File(realPath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
if (uploadFile != null) {
uploadFile.renameTo(new File(dirFile, uploadFile.getName()));
}
return "none";
}
}
struts2异常处理
1.声明式异常捕捉:
struts2的异常处理机制是通过在struts.xml文件中配置<exception-mapping>标签完成的,配置该标签时,需要指定两个属性:
exception:指定该异常类型的完全限定名。
result:指定逻辑视图名。
* 全局异常处理:
<global-exception-mappings>
<exception-mapping exception="java.sql.SQLException" result="sql"/>
<exception-mapping exception="java.lang.Exception" result="root"/>
</global-exception-mappings>
<global-results>
<result name="sql">/exception.jsp</result>
<result name="root">/exception.jsp</result>
</global-results>
* 局部异常处理:
<result name="nullPointer">/nullPointer.jsp</result>
<exception-mapping exception="java.lang.NullPointerException" result="nullPointer"/>
2.struts2声明式异常捕捉流程:
当在struts2.xml中,配置了Action类关联exception-mapping后,一但Action抛出了exception-mapping中配置了的异常,就会匹配到exception-mapping标签的result属性值,从而匹配result标签