zoukankan      html  css  js  c++  java
  • 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里面就是要做以上事情。

  • 相关阅读:
    小透明学弟的华为上岸之路
    手把手体验远程开发,确实爽
    老弟做了个网盘,炸了!
    聊聊我在腾讯和字节工作感受
    2021,编程语言如何选择?
    优化了破网站的搜索功能
    15 道超经典大厂 Java 面试题!重中之重
    我两年的坚持,值了!
    聊聊百度搜索背后的故事
    struts2的配置步骤
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429552.html
Copyright © 2011-2022 走看看