zoukankan      html  css  js  c++  java
  • Struts2执行过程解析

    说到Struts2执行过程就少不了一张图:

    1 客户端初始化一个指向Servlet容器的请求;

    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)。

    3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。(注:在Struts2的被StrutsPrepareAndExecuteFilter替换)

    4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。

    5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。

    6 ActionProxy创建一个ActionInvocation的实例。

    7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

    8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

    推荐博客:http://blog.sina.com.cn/s/blog_6ef516d0010188hm.html

     Then:

    在之前说过的使用Struts2框架实现用户登录的功能,使用Struts2标签和OGNL表达式简化了视图的开发,并且利用Struts2提供的特性对输入的数据进行验证,以及访问Servlet API时实现用户会话跟踪,其简单的程序运行流程图

    login.jsp>>StrutsPrepareAndExecuteFilter>>Action>>Result>>success.jsp

    下面通过分析登录程序,带领大家深入了解Struts2.

    分析登录程序

    为了实现用户登录的功能,需要经过以下几个步骤:

    (1)获取Struts2资源

    (2)在应用程序中导入Struts2的类库

    (3)在web.xml文件中配置其核心控制器StrutsPerpareAndExecuteFilter,用于对框架进行初始化,以及处理所有的请求

    (4)编写Action类并进行配置。

    (5)配置返回结果与物理视图资源的关系。

    (6)编写返回视图

    众所周知,Struts2框架是基于MVC模式的。基于MVC模式框架的核心就是控制器对所有请求进行统一处理。Struts2的控制器StrutsPrepareAndExecuteFilter由Servlet API中的Filter充当,当Web容器接收到登录的请求后,将请求交给在web.xml中的配置的过滤器StrutsPrepareAndExecuteFilter。

    我们首先来看看StrutsPrepareAndExecuteFilter的配置。

    1.web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
        <display-name></display-name>
        <!--  -->
        <filter>
            <filter-name>struts2</filter-name>
            <!-- 使用Struts2的核心类库 -->
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <!-- 拦截所有的action -->
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <welcome-file-list>
            <welcome-file>login.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    StrutsPrepareAndExecuteFilter可以包含一些初始化参数,经常使用的如config--要加载的xml形式的配置文件列表(多个配置文件以逗号分隔),如果没有设置这个参数,Struts2框架将默认加载struts.default.xml,struts-plugin.xml和struts.xml,这些文件将在后面进行讲解。

    StrutsPrepareAndExecuteFilter作为一个Filter在web应用中运行,它负责拦截所有的用户请求,当用户请求达到时,该Filter会过滤用户请求。如果用户请求以action结尾,该请求将被输入Struts

    2框架进行处理。

    2.Action

    实际上,在MVC框架中,控制器是由两个部分组成,分别如下

        --核心控制器(Filter):用于拦截用户请求,对请求进行处理。

        --业务控制器(Action):调用相应的Model类实现业务处理,返回结果。

    对于开发人员来说,使用Struts2框架,主要的编码工作就是编写Action类。在之前学习的过程中,我们介绍了com.opensymphony.xwork2.Action接口和com.opensymphony.xwork2.ActionSupport类,Struts2并不要求编写的Action类一定要实现Action接口,可以编写一个普通的java类作为Action类,只要该类含有一个返回字符串的无参的public方法即可。

    问:Action是如何获取用户请求并进行业务处理的?

    答:回想一下,我们在学习Servlet时,Servlet是如何实现业务控制的。用户提交请求后,各种业务并没有在Servlet中直接完成,而是通过调用不同的javaBean组件来实现的。在Struts2中也是如此,Filter用来接收用户的请求,在对数据进行简单处理后通过反射创建Action实例,然后调用Action的方法。而Action实例的创建就由struts.xml中的配置来决定。

     3.Result

    result元素的作用是实现结果视图的调用,并决定视图以哪种形式展示给客户端。简单地说,就是用来设定在Action处理结束后,系统下一步将要做什么。

    Action类在处理完用户请求后,会返回一个处理结果。这个结果是一个简单的字符串,框架根据这个字符串选择对应的Result,所以我们又将称为逻辑视图名称。这个逻辑视图名称由result元素的name属性来表示。result元素的值用来指定这个逻辑视图对应的物理视图资源的位置。需要特别指出的是,逻辑视图名称只有与物理视图资源联系在一起,才能发挥作用,所以必须要在配置文件中设置二者之间的对应关系。

  • 相关阅读:
    Python---HTML常用标签
    Python---进阶---Tkinter---game
    工程师的URL大全
    docker安装小笔记
    SQL server查询语句
    非常好用的sersync同步工具
    运维自动化的标准
    使用ansible实现轻量级的批量主机管理
    emos邮件系统的web密码修改方法
    Linux 之 rsyslog+mysql+LogAnalyzer 日志收集系统
  • 原文地址:https://www.cnblogs.com/zhangzongle/p/5834047.html
Copyright © 2011-2022 走看看