struts2 一个简洁的struts.xml
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.ui.theme" value="simple"></constant> <package name="rx" extends="struts-default" namespace="/*"> <action name="*_*" class="{1}Action" method="{2}"> <result name="success">${successResultValue}</result> <result name="redirect" type="redirectAction" >${redirectResultValue}</result> </action> </package> </struts>
BaseAction.java
package com.yl.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class BaseAction extends ActionSupport { /** * 序列化ID */ private static final long serialVersionUID = 1L; protected String successResultValue; public String getSuccessResultValue() { return successResultValue; } public void setSuccessResultValue(String successResultValue) { this.successResultValue = successResultValue; } protected String redirectResultValue; public String getRedirectResultValue() { return redirectResultValue; } public void setRedirectResultValue(String redirectResultValue) { this.redirectResultValue = redirectResultValue; } protected String chainResultValue; public String getChainResultValue() { return chainResultValue; } public void setChainResultValue(String chainResultValue) { this.chainResultValue = chainResultValue; } /** * 返回request对象 * * @return */ protected HttpServletRequest getRequest() { return ServletActionContext.getRequest(); } /** * 返回response对象 * * @return */ protected HttpServletResponse getResponse() { return ServletActionContext.getResponse(); } /** * 返回session对象 * * @return */ protected HttpSession getSession() { return getRequest().getSession(); } }
一个样例action:
package com.yl.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.annotation.Resource; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.yl.biz.ImgBiz; import com.yl.config.SysConfig; import com.yl.cons.UploadResult; import com.yl.entity.Img; import com.yl.util.CipherUtil; @Component("imgAction") @Scope("prototype") /** * 图片Action */ public class ImgAction extends BaseAction { /** * 序列化ID */ private static final long serialVersionUID = 1L; /** * 路径 */ private File upload; public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } /** * 图片实体 */ private Img img; public Img getImg() { return img; } public void setImg(Img img) { this.img = img; } /** * 注入 */ @SuppressWarnings("unused") @Resource(name = "imgBiz") private ImgBiz imgBiz; /** * 图片上传 * * @return */ @SuppressWarnings("deprecation") public String uploadFile() { @SuppressWarnings("unused") String paths = getRequest().getRealPath("/"); // 推断路径是否为空 if (this.upload == null || !this.upload.isFile() || !this.upload.canRead()) { this.addActionError(UploadResult.NULLFILE.getTitle()); return SUCCESS; } try { FileInputStream fis = new FileInputStream(this.upload); // 获得图片大小 int fileSize = fis.available(); // 推断图片大小 if (fileSize > SysConfig.MAX_FILE_SIZE) { this.addActionError(UploadResult.TooLargeFile.getTitle()); } else { // 保存路径 String path = SysConfig.PUBLIC_PATH; // 获取图片名字 String fileName = this.upload.getName(); // 推断是否有点 if (!fileName.contains(".")) { this.addActionError(UploadResult.NOTIMG.getTitle()); } // 截取文件类型 fileName = fileName.substring(fileName.lastIndexOf(".")); SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss aa"); // 从新给图片命名 fileName = CipherUtil.md5Encoding(sdf.format(new Date())) + fileName; // 保存图片路径+图片名字 fileName = path + "\\" + fileName; // New一个新的地址. File file = new File(fileName); // 输出图片到新的地址 FileOutputStream fos = new FileOutputStream(file); int c; byte b[] = new byte[4 * 1024]; while ((c = fis.read(b)) != -1) { fos.write(b, 0, c); } // 关闭相关操作 fos.flush(); fis.close(); // 保存成功信息 this.addActionError(UploadResult.SUCCESS.getTitle()); } } catch (FileNotFoundException e) { // 保存失败信息 this.addActionError(UploadResult.NULLFILE.getTitle()); e.printStackTrace(); } catch (IOException e) { // 保存失败信息 this.addActionError(UploadResult.UPLOADFAIL.getTitle()); e.printStackTrace(); } // 设置返回页面 setSuccessResultValue("/index.jsp"); return SUCCESS; } }
常量:
package com.yl.config; import org.apache.struts2.ServletActionContext; import org.springframework.beans.factory.InitializingBean; /** * 图片系统类 * */ public class SysConfig implements InitializingBean { public static Boolean IS_DEBUG = true; /** * 上传图片大小控制 */ public static int MAX_FILE_SIZE = 1024 * 1024 * 100; /** * 上传图片路径控制 */ @SuppressWarnings("deprecation") public static String PUBLIC_PATH = ServletActionContext.getRequest().getRealPath("/") + "upload"; private SysConfig() { } public static boolean isDebug() { return IS_DEBUG != null && IS_DEBUG; } public void setIS_DEBUG(Boolean iS_DEBUG) { IS_DEBUG = iS_DEBUG; } public void afterPropertiesSet() throws Exception { } }
一个错误的结果enum封装,使用见action:
package com.yl.cons; /** * 上传返回标志 * */ public enum UploadResult { SUCCESS((short) 0, "成功"), NULLFILE((short) 1, "找不到文件"), NOTIMG((short) 2, "非图片文件"), UPLOADFAIL((short) 3, "上传失败"), TooLargeFile((short) 4, "文件过大"); /** * 错误类型 */ private short type; /** * 错误名称 */ private String title; private UploadResult(short type, String title) { this.type = type; this.title = title; } public short getType() { return type; } public String getTitle() { return title; } }