重温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
posted @ 2019-12-20 15:47  VVII  阅读(255)  评论(0)    收藏  举报