您的位置:首页 > 编程语言 > Java开发

19_Struts 2.x 拦截器与文件上传

2013-01-17 15:51 176 查看
19.1 使用拦截器

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 本章小结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: