重温Struts2
回过头来重温Struts2
- Struts2是WebWork的升级!!!
工作原理图

FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。2.1.2之后被StrustPrepareAndExecuteFilter替代,重点!这是一个过滤器!!!
替换的原因:
想使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!
那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器
- 工作原理路径
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>
<!-- 注册拦截器 -->
<interceptor name="自定义拦截器nameA" class="拦截器全路径"></interceptor>
<interceptor name="自定义拦截器nameB" class="拦截器全路径"></interceptor>
</interceptors>
// TODO 拦截器栈
<action name="自定义类名称" class="Action类全路径">
<result>返回的前端页面路径</result>
<!-- 引用拦截器 -->
<interceptor-ref name="自定义拦截器nameA"></interceptor-ref>
</action>
<global-results>
<result name="login">/index.jsp</result>
</global-results>
</package>
</struts>
Servlet API
- 方式
-- ActionContext
-- 实现**Aware接口
-- ServletActionContext
❀❀ (ง •_•)ง little little 🦆🦆 ❀❀❀❀ ♕♕♕♕♕

浙公网安备 33010602011771号