struts2注解开发,运行原理
1. 注解开发
1.1使用注解开发必须要导入jar包。struts2-convention-plugin-2.3.24.jar,企业开发少用!
1.2 添加注解
/** * @ClassName:DownLoadAction * @Description: * @Namespace : 相当于struts.xml中namespace * @ParentPackage : 相当于struts.xml中extends="struts-default" * @author mengqx * @date 2017年8月30日 */ @Namespace("/") @ParentPackage("struts-default") public class DownLoadAction extends ActionSupport { // 定义一个变量来获取文件名称 private String fileName; // 定义一个FileInputStream对象 private InputStream inputStream; // 定义一个下载路径 private String address;
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public InputStream getInputStream() { return inputStream; }
public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; }
public String getFileName() { return fileName; }
public void setFileName(String fileName) { this.fileName = fileName; } /** * * @Description: * Action :控制器 vlaue=控制器的名称,params=参数数组,数组中存放的数据都是以key,value * 形式存在的。results=表示返回的结果集@Result=表示返回的一个结果集 type=指的是转换类型, * params=result中参数设置,同样存值也是以key,value形式存在的! * @return * @throws FileNotFoundException * @author mengqx * @date 2017年8月30日 */ @Action(value="download",params={"address","E:/temp/"}, results={ @Result(type="stream",params={"contentDisposition","attachment;fileName=${fileName}"}) }) public String download() throws FileNotFoundException { System.out.println("文件名称" + fileName); // 利用io流方式进行下载 inputStream = new FileInputStream(new File(address + fileName)); return SUCCESS; } } |
1.3 struts.xml 不能删除!
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> </struts> |
2. 运行原理
2.1 客户端发起请求到Filter.
2.2 Filter 过滤完成 之后,交个ActionMapper。
2.3 ActionMapper类会相应的产生一个代理类。
2.4 产生代理类之后,会走拦截器,有可能是一个,或者多个。
2.5 走完拦截器之后,走真正的Action。
2.6 返回Result,会产生一个Template模板。
2.7 就行走拦截器。
2.8 最终返回客户端显示。
同时也说明了struts2 多个拦截器的执行顺序:先进后出!