• Struts2>运行机制 小强斋


    Struts的作用:把请求跟视图分开(请求跟展现分开,请求跟最后的结果分开)。

    一、HelloWorld的执行过程

    1、输入url地址:http://localhost:8080/Struts2_HelloWorld/hello 这个url地址的请求,会通过http协议发送到服务器,

    2、服务器收到请求之后,会先看请求的是哪个web application,是Struts2_HelloWorld这个web application,所以就把这个web application交给对应的程序处理,既然是这个web application,当然要读这个web application里面的web.xml文件来看它是怎么配的,这时候发现了filter,

    <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>


    这个filter会过滤所有的url地址,因为写成/*了,所以url里面的hello,这个地址就会被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到。

    3、过滤器会调用doFilter(),在doFilter()内部会参考struts.xml文件。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
    
     <constant name="struts.devMode" value="true" />
    	<package name="default" namespace="/" extends="struts-default">
    	
    		<action name="hello">
    			<result>
    				/index.jsp
                </result>
    		</action>
    	</package>
    </struts>
    

    a、首先看NameSpace,其中NameSpace是和访问路径一一对应的,它会到struts.xml中去查,查到有一个NameSpace叫"/",然后就会在此NameSpace下去查

    b、查到相应的Action的名字, 在url地址里,/后面的是hello,在struts.xml里,namespace="/"里面有个action叫hello,

    c、根据该action的class(可以没有,如果action没有配置class属性,这默认ActionSupport中的execute方法返回了”success“。)和method(如果没指定,就默认为execute方法),找到要执行的方法,根据该方法返回的字符串,找到对应的result,本例找到Hello.jsp了,就把Hello.jsp的结果返回。如果result没有配置name属性,则就默认返回"success"时匹配。

    二、Struts2框架处理请求的步骤

     

    Struts2官方站点的Struts 2 的整体结构
    一个请求在Struts2框架中的处理大概分为以下几个步骤:
    1)  客户端初始化一个指向Servlet容器(例如Tomcat)的请求。
    2)  这个请求经过一系列的过滤器(Filter)。
    3)  接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。
    4)  如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
    5)  ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
    6)  ActionProxy创建一个ActionInvocation的实例。
    7)  ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器Intercepter的调用。
    8)  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
    Struts2的核心就是拦截器。Struts.xml中所有的package都要extends="struts-default"。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。

  • 相关阅读:
    [原创]Office Word 2010如何使用printer drivers输出PostScript文件
    MATLAB启动时报错: pathdef.m not found 问题解决方法
    Ubuntu 下 Matlab R2010a 错误:`GLIBCXX_3.4.11' not found 的解决办法
    [转] 一阶导和二阶导的含义
    win7 搭建ftp 设置用户权限 远程访问设置
    Ubuntu 中软件的安装、卸载以及查看的方法总结
    64位ubuntu12.04 LTS安装oracle10g笔记
    如何在Ubuntu 12.04 LTS中使用低版本gcc/g++
    HTTP与HttpServlet
    EXP00091错误
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637625.html
Copyright © 2020-2023  润新知