Struts的攔截器和檔案上傳下載
阿新 • • 發佈:2018-11-19
攔截器
首先新建一個攔截器的類,類實現Interceptor介面,記得是xwork2包下的
重寫三個方法,在intercept的方法中執行攔截器前後需要執行的操作,
執行前後的區分為
String invoke=actionInvocation.invoke();//放行
在這行程式碼前就是執行前的操作,在這行程式碼後就是執行後的操作
然後就是配置xml檔案
配置攔截器
<!--攔截器--> <interceptors> <interceptor name="oneInterceptor" class="com.hw.one.five.OneInterceptor"></interceptor> </interceptors> 再就是配置需要使用攔截器的action <action name="Interceptor" class="com.hw.one.web.Interceptor"> <interceptor-ref name="oneInterceptor"> </interceptor-ref> </action> 攔截器就完成了
上傳
配置xml就不多說了
新建action類,然後繼承baseAction
設定四個屬性
private File file; private String fileFileName; private String fileContentType; /** * 虛擬路徑 * 虛擬路徑是存在伺服器中,真實路徑是本地 */ private String serverDir = "/Upload"; 獲取資料夾的真實路徑 private String getRealPath(String Path) { return this.request.getServletContext().getRealPath(Path); } 上傳 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 "Interceptor"; } 下載 public String save() throws IOException { //資料庫獲得 String filename = "img1.jpg"; String filetype="image/jpg"; response.setContentType(filetype); response.setHeader("Content-Disposition","attachment;filename=" + filename); String realPath=getRealPath(serverDir + "/" + filename); FileUtils.copyFile(new File(realPath),response.getOutputStream()); return null; } 直接顯示圖片 public String open() throws IOException { //資料庫獲得 String filename = "img1.jpg"; String filetype="image/jpg"; response.setContentType(filetype); response.setHeader("Content-Disposition","filename=" + filename); String realPath=getRealPath(serverDir + "/" + filename); FileUtils.copyFile(new File(realPath),response.getOutputStream()); return null; }
BaseAction
public class UploadsAction 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; } /** * 獲取資料夾的真實路徑 * * @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 "Interceptor"; } } BaseAction package com.hw.one.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(); } } 單個檔案上傳見上篇部落格