19_Struts 2.x 拦截器与文件上传
2013-01-17 15:51
176 查看
19.1 使用拦截器
19.1.1 timer计时拦截器
TimerAction.java
19.1.2 token防重复提交拦截器
TokenAction.java
tokenInput.jsp
tokenSuccess.jsp
tokenInvalid.jsp
19.1.3 execAndWait执行等待拦截器
WaitAction.java
wait.jsp
19.1.4 自定义的权限验证拦截器
实现Interceptor接口或者它的抽象类
LoginInterceptor.java
19.2 上传文件
19.2.1 上传文件的Action
UploadAction.java
19.2.2 上传文件的JSP表单
upload.jsp
uploadList.jsp
19.2.3 上传文件相关的设置
可以通过在struts.xml中配置fileUpload拦截器实现文件大小的限制,临时文件夹的路径,以及上传文件的格式。
19.2.4 错误信息配置
在国际资源文件中配置
19.2.5 上传多个文件
使用List<File>或者File[]即可,配合多个<s:file>
19.3 本章小结
19.1.1 timer计时拦截器
TimerAction.java
package com.uikoo9.action; import org.apache.struts2.convention.annotation.*; @Results(value={ @Result(name="success",location="/index.jsp") }) //配置timer拦截器 @InterceptorRef(value="timer") public class TimerAction { public String execute() throws Exception{ Thread.sleep(1000); return "success"; } }
19.1.2 token防重复提交拦截器
TokenAction.java
package com.uikoo9.action; import java.util.ArrayList; import java.util.List; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.InterceptorRefs; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; @InterceptorRefs(value={ @InterceptorRef(value="defaultStack"), @InterceptorRef(value="token") }) @Results(value={ @Result(name="success", location="/tokenSuccess.jsp"), @Result(name="input", location="/tokenInput.jsp"), @Result(name="invalid.token", location="/tokenInvalid.jsp") }) public class TokenAction { public static final List<String> names = new ArrayList<String>(); private String name; public String execute(){ names.add(name); return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getNames() { return names; } }
tokenInput.jsp
<%@ page language="java" import="java.util.*"%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>tokenInput</title> </head> <body> <s:form action="token"> <s:token></s:token> <s:label value="避免重复输入"></s:label> <s:textfield name="name" label="请输入姓名"></s:textfield> <s:submit name="提交"></s:submit> </s:form> </body> </html>
tokenSuccess.jsp
<%@ page language="java" import="java.util.*"%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>tokenSuccess</title> </head> <body> 已输入的姓名:<s:property value="%{names}"/><br> <a href="tokenInput.jsp">重新输入</a> </body> </html>
tokenInvalid.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>jsp template</title> </head> <body> 输入无效。<br> 已经输入的姓名:<s:property value="NAMES"/><br/> <a href="tokenInput.action">重新输入</a> </body> </html>
19.1.3 execAndWait执行等待拦截器
WaitAction.java
package com.uikoo9.action; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.InterceptorRefs; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; @InterceptorRefs(value={ @InterceptorRef(value="completeStack"), @InterceptorRef(value="execAndWait") }) @Results(value={ @Result(location="/waitSuccess.jsp"), @Result(name="wait", location="/wait.jsp") }) public class WaitAction { public String execute() throws Exception{ Thread.sleep(10*1000); return "success"; } }
wait.jsp
<%@ page language="java" import="java.util.*"%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>wait.jsp</title> </head> <body> 页面提交中。。。请稍等。。。 <script type="text/javascript"> setTimeout("location = location;", 1000); </script> </body> </html>
19.1.4 自定义的权限验证拦截器
实现Interceptor接口或者它的抽象类
LoginInterceptor.java
package com.uikoo9.action; import java.util.Map; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; @SuppressWarnings("serial") public class LoginInterceptor extends AbstractInterceptor{ @Override public String intercept(ActionInvocation invocation) throws Exception { Map<String, Object> session = invocation.getInvocationContext().getSession(); String account = (String) session.get("account"); if(account == null){ return "login"; } return invocation.invoke(); } }
19.2 上传文件
19.2.1 上传文件的Action
UploadAction.java
package com.uikoo9.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; @Results(value={ @Result(name="input", location="/upload.jsp"), @Result(name="list", location="/uploadList.jsp") }) public class UploadAction { //要上传的文件 private File demo; //上传文件的类型 private String demoContentType; //上传文件的文件名 private String demoFileName; public String execute(){ return "input"; } public String upload() throws Exception { File saved = new File(ServletActionContext.getServletContext().getRealPath("upload"),demoFileName); InputStream ins = null; OutputStream ous = null; try { saved.getParentFile().mkdirs(); ins = new FileInputStream(demo); ous = new FileOutputStream(saved); byte[] b = new byte[1024]; int len=0; while((len = ins.read(b)) != -1){ ous.write(b, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { if(ins != null) ins.close(); if(ous != null) ous.close(); } return "list"; } //getters and setters public File getDemo() { return demo; } public void setDemo(File demo) { this.demo = demo; } public String getDemoContentType() { return demoContentType; } public void setDemoContentType(String demoContentType) { this.demoContentType = demoContentType; } public String getDemoFileName() { return demoFileName; } public void setDemoFileName(String demoFileName) { this.demoFileName = demoFileName; } }
19.2.2 上传文件的JSP表单
upload.jsp
<%@ page language="java" import="java.util.*"%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <s:actionerror/> <s:form action="upload" enctype="multipart/form-data" method="post"> <s:label value="上传文件"></s:label> <s:file name="demo" label="文件一"></s:file> <s:submit vaule="开始上传" method="upload"></s:submit> </s:form>
uploadList.jsp
<%@ page language="java" import="java.util.*"%> <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <body> 文件已保存到: <a href='upload/<s:property value="demoFileName"/>' target="_blank"> <s:property value="demoFileName"/> </a><br/> <a href="upload.action">继续上传</a> </body> </html>
19.2.3 上传文件相关的设置
可以通过在struts.xml中配置fileUpload拦截器实现文件大小的限制,临时文件夹的路径,以及上传文件的格式。
19.2.4 错误信息配置
在国际资源文件中配置
19.2.5 上传多个文件
使用List<File>或者File[]即可,配合多个<s:file>
19.3 本章小结
相关文章推荐
- Java Web整合开发(19) -- Struts 2.x 拦截器与文件上传
- struts简单入门3——拦截器和文件上传
- struts文件上传拦截器中参数的配置(maximumSize,allowedTypes ,allowedExtensions)问题
- 【ssh】struts文件上传拦截器(单,多文件上传,以及错误信息的返回)
- Struts 多个文件,拦截器,文件上传
- struts文件上传拦截器maximumSize设置文件大小不起作用
- Struts2国际化、拦截器配置以及使用struts上传文件
- struts2.X心得9--struts2自定义拦截器以及文件上传等几个拦截器使用案例
- struts2.X心得9--struts2自定义拦截器以及文件上传等几个拦截器使用案例
- 采用dwr+ajax和struts开发文件上传进度条(转)
- struts 文件上传 ——接上一篇
- struts 2 Commons FileUpload文件上传
- Struts文件上传下载
- springmvc文件上传和拦截器
- struts上传文件
- Struts2.0学习笔记---上传文件和多文件上传
- JSP/Java/Struts实现文件上传
- 用Struts上传多个文件的方法
- struts 2上传文件时出错的解决
- 3.8拦截器和文件上传下载