拦截器
首先需要创建一个拦截器OneInterceptor可以实现implements Interceptor接口
也可以继承extends AbstractInterceptor类注意这里用的是xwork2包下面的
package zking.web;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class OneInterceptor implements Interceptor {
@Override
public void destroy() {
/**
-
拦截器销毁
*/
}@Override
public void init() {
System.out.println(“拦截器初始化”);
}@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println(actionInvocation.getClass().getName());
/**- 执行方法
*/
String invoke = actionInvocation.invoke();
System.out.println(“方法执行完毕”);
return null;
}
然后在struts的配置文件中配置Interceptor
- 执行方法
然后在需要引用Interceptor的action引用就可也了
<action name="loginaction" class="zking.web.LoginAction">
<interceptor-ref name="oneInterceptor"></interceptor-ref>
<result name="success">/success.jsp</result>
</action>
拦截器和过滤器的区别用一张图来表示画的有点丑大家理解一下
上传下载文件
首先继承Baseaction
package zking.web;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
/**
- 每一个开发的子控制器要用的属性都定义在通用的action中。
- @author Administrator
/
public class BaseAction implements ServletRequestAware, ServletResponseAware{
/*
* 为了传值使用
*/
protected HttpServletResponse response;
protected HttpServletRequest request;
protected HttpSession session;
protected ServletContext application;
/**
* 为了配置跳转页面所用
*/
protected final static String SUCCESS = "success";
protected final static String FAIL = "fail";
protected final static String LIST = "list";
protected final static String ADD = "add";
protected final static String EDIT = "edit";
protected final static String DETAIL = "detail";
/**
* 具体传值字段 后端向jsp页面传值所用字段
*/
protected Object result;
protected Object msg;
protected int code;
public Object getResult() {
return result;
}
public Object getMsg() {
return msg;
}
public int getCode() {
return code;
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
this.response = arg0;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
this.session = arg0.getSession();
this.application = arg0.getServletContext();
}
}
多个文件上传
package zking.web;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
/**
- 文件上传的三种形式
- 1.上传的文件以2进制的形式保存到数据库中 工作流框架
- 2.上传的文件保存到服务器的指定硬盘 (cpu块 硬盘大)
- 3.将上传的文件保存到tomcat服务器中(对应的静态资源服务器 上线不重启)
*/
public class Fileaction extends BaseAction{
private File file;
/**
* 文件名
*/
private String fileFileName;
/**
* 文件类型
*/
private String fileContentType;
/**
* 虚拟路径
*/
private String serverDir="/upload";
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
/**
* 上传图片到服务器
* @return
*/
public String upload() throws IOException {
System.out.println("名字" + fileFileName);
System.out.println("类型" + fileContentType);
//真实路径
String realPath = getRealPath(serverDir + "/" + fileFileName);
System.out.println("真实路径"+realPath);
//复制
FileUtils.copyFile(file, new File(realPath));
return "success";
}
/**
* 获取文件的真实路径
* @return
*/
private String getRealPath(String path){
return this.request.getServletContext().getRealPath(path);
}
/**
*
* @return
*/
public String SaveAs() throws IOException {
//数据库获得这里用的死数据实际上是从数据库获得
String filename = "stationmaster_img.png";
String filetype="image/png";
response.setContentType(filetype);
response.setHeader("Content-Disposition","attachment;filename=" + filename);
String realPath=getRealPath(serverDir + "/" + filename);
FileUtils.copyFile(new File(realPath),response.getOutputStream());
return null;
}
/**
* 打开图片
* @return
*/
public String OPenAs() throws IOException {
//数据库获得
String filename = "stationmaster_img.png";
String filetype="image/png";
response.setContentType(filetype);
response.setHeader("Content-Disposition","filename=" + filename);
String realPath=getRealPath(serverDir + "/" + filename);
FileUtils.copyFile(new File(realPath),response.getOutputStream());
return null;
}
}
private File[] file;
private String[] fileFileName;
private String[] fileContentType;
private String serverDir = “/upload”;
public File[] getFile() {
return file;
}
public void setFile(File[] file) {
this.file = file;
}
public String[] getFileFileName() {
return fileFileName;
}
public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
}
public String[] getFileContentType() {
return fileContentType;
}
public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
/**
* 获取文件夹的真实路径
*
* @param Path
* @return
*/
private String getRealPath(String Path) {
return this.request.getServletContext().getRealPath(Path);
}
/**
* 上传
*
* @return
*/
public String upload() throws IOException {
for (int i = 0; i < file.length; i++) {
System.out.println("名字" + fileFileName[i]);
System.out.println("类型" + fileContentType[i]);
//真实路径 ,文件名前面加上uuid是因为可能会因为文件名相同而覆盖
String realPath = getRealPath(serverDir + "/" + UUID.randomUUID().toString() +fileFileName[i]);
System.out.println(realPath);
//复制
FileUtils.copyFile(file[i], new File(realPath));
}
return "success";
}