回过头来重温Struts2
- Struts2是WebWork的升级!!!
工作原理图
FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。之后被StrustPrepareAndExecuteFilter替代,重点!这是一个过滤器!!!
- 工作原理路径
HttpServletRequest- -->过滤器(ActionContextCleanUp,OtherFilters,StrustPrepareAndExecuteFilter)顺序固定
---> ActionMaper,若以.action结尾的则再到StrustPrepareAndExecuteFilter --->ActionProxy(通过ConfigurationManager读取struts.xml找到具体的Action类,再通过ActionProxy代理来创建反向实例)--->ActionInvocation--->拦截器(Interceptor1,Interceptor2,Interceptor3···)--->Action--->Result--->Template(视图)---->拦截器(Interceptor3,Interceptor2,Interceptor1)---->HttpServletResponse--->用户实例
核心文件
- web.xml
//web.xml中配置过滤器
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- struts.xml
-- 主要负责管理应用中的Action的映射,以及该Action包含的Results定义
- 包含的内容
-- 全局属性
-- 用户请求和响应Action之间的对应关系
-- Action可能用到的参数和返回结果
-- 各种拦截器的配置
//可以用include标签去包含其他的文件
<include file="A.xml" > </include>
<!-- 定义常量,等同于再struts.properties中定义 -->
<constant name="struts.devMode" value="true" />
<! --
等同于写在struts.properties中的
struts.devMode = true
-->
<constant name="struts.action.extension" value="html,do,action" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.convention.default.parent.package"value="struts-default" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="struts-default-authority" extends="struts-default">
<interceptors>
//TODO
</interceptors>
<default-interceptor-ref name="mydefault" />
<global-results>
<result name="login">/index.jsp</result>
</global-results>
</package>
</struts>
Servlet API
- 方式
-- ActionContext
-- 实现**Aware接口
-- ServletActionContext