• Struts2 框架分析


    1.Struts 2执行过程解析;

    login.jsp----->StrutsPrePareAndExecuteFilter--------->Action-------------->Result-------------------->manage.jsp

    Action 

    怎样在struts.xml中配置Action

    <action name="LoginAction" class="cn.wwy.action.LoginAction">
    //结果为success时跳转到Login.jsp
    <result name="success">/Login.jsp</result> </action>-

    Result

    1.当Web容器收到请求后,将请求交由在web.xml中配置的Struts 2 框架的控制器StrutsPrepareAndExecuteFilter(核心控制器)

    2.由StrutsPrepareAndExecuteFilter的确请求对应的Action(业务控制器)

    3.框架根据Action返回的结果字符串,由StrtsPrepareAndExecuteFilter选择对应的result,将结果呈现给用户。

    动态结果:

    <default-action-ref name="ExctionAction"></default-action-ref>
            <action name="ExctionAction">
                <result>/errorAction.jsp</result>
            </action>-->
            <!--<action name="LoginAction" class="cn.wwy.action.LoginAction">
                <result name="success">/Login.jsp</result>
            </action>

    1.ActionMapper

    提供了在请求和Action调用请求之间的映射,ActionMapper根据请求的URl来查找是否存在对应的Action调用请求,如果有,则返回一个描述Action映射的ActionMapping对象,没有就为null

    2.ActionMapping 

    ActionMaping保存了调用Action的映射信息,其中必须保存Action的命名空间信息和name属性信息。

    3.ActionProxy

    ActionProxy在XWork和真正的Action之间充当代理,在执行Action的过程中,因为使用代理而非直接操纵对象,所以可以在Action执行前后额外操作。ActionProxy创建了ActionInvocation对象。

    4.Actionlnvocation

    ActionInvocation 表示Action的执行状态,它保存拦截器Action的实例,Actionlnvocation由ActionProxy创建,通过调用invoke()方法开始Action的执行,执行的顺序为按配置执行拦截器,拦截器执行完毕后,执行Action,Action执行结束返回结果字符串,匹配对应的Result后,在一次执行拦截器。

    5.Interceptor(拦截器)

    拦截器是一种可以在请求处理以前或者之后执行的Struts2.拦截器是Struts 2的重要特性,Struts 2框架的绝大多数功能是通过拦截器完成的。

    public class MyTimer extends AbstractInterceptor {
        public String intercept(ActionInvocation invocation) throws Exception {
    
            long timeMillis = System.currentTimeMillis();
            System.out.println("开始时间"+timeMillis);
            String invoke = invocation.invoke();
            long time=System.currentTimeMillis();
            System.out.println("结束时间"+timeMillis);
            long s = time - timeMillis;
            System.out.println("一共时间"+s);
            return invoke;
        }
    }
     <interceptors>
                <interceptor name="MyTime" class="cn.wwy.action.MyTimer"></interceptor>
            </interceptors>
    <action name="action" class="cn.wwy.action.LoginAction">
    <result name="success">/Login.jsp</result>
    <interceptor-ref name="MyTime"></interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
    </action>

     

     

  • 相关阅读:
    Dubbo之SPI实现原理详解
    Java SPI详解
    Java是如何实现自己的SPI机制的
    Dubbo的负载均衡原理解析
    Dubbo公开课
    【todo】什么是沟子函数
    一步一图,带你走进 Netty 的世界!
    https://github.com/xiaojiaqi/k8seasy_release_page
    mysql 8.0导致5.6数据后 :ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist
    Ansible 日常使用技巧
  • 原文地址:https://www.cnblogs.com/xiaoyu1997/p/6501923.html
Copyright © 2020-2023  润新知