struts的功能就是根据用户访问不同的url,把请求分发给相应的action类处理。实现了MVC架构中的V,C分离 ===== struct依赖的配置文件 ===== * web.xml:里面配置了struts相关信息,tomcat启动时读取该配置文件,启动struts * struts.xml:定义了如下内容 * url -> action 的映射 * action -> 拦截器 的映射 * html模板页面 * 属性 * ...... ===== struts运行步骤 ===== - 客户端发送请求 - 请求先通过过滤器ActionContextCleanUp-->FilterDispatcher - FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action(struts.xml中有配置) - 如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy - 如果url是静态资源,则直接返回资源 - ActionProxy找到需要调用的Action类(struts.xml中有配置) - ActionProxy创建一个Action类的实例 - 执行action之前,先调用相关拦截器(struts.xml中有配置) - 执行actionaction类中实现了对用户请求的处理逻辑,以及决定返回给用户哪些内容 - 根据action的结果找到对应的html模板页面(struts中有配置),生成一个response页面 - 然后再次执行action之前的拦截器 - 返回给用户response页面 {{:pasted:20160524-212603.png}} ===== action类代码 ===== public class FileUploadAction extends ActionSupport implements ServletContextAware { public String execute() throws Exception { System.out.println("execute"); return this.SUCCESS; } } ===== 拦截器代码 ===== 拦截器统计action执行时间 public class MyInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { long startTime = System.currentTimeMillis(); String result = invocation.invoke();// 调用下一个拦截器,如果没有其他拦截器则调用action long endTime = System.currentTimeMillis(); System.out.println("Action执行共需要" + (endTime - startTime) + "毫秒"); return result; } }