【struts】基础知识入门

作用

使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。

结合MVC模型理解struts作用

MVC模型是理解struts很好的角度,因为struts的目的主要是针对简化MVC模型中的C(控制器)。

MVC模型

  • 调用 与 事件通知

    此处只站在3个元素的空间来进行理解,包括视图,模型,控制器。
    定义: 调用】从视图出发,通过方法调用形式进行信息传递。
    定义:事件】从非视图元素出发,进行信息信息传递。
    分析web事务】现在的互联网信息传递的形式,大部分 以 请求-通知的模式进行。意味着在该类系统中信息的起点为视图,也说明了这种方式更实用于前面定义的“调用”。(事件机制可通过调用机制间接实现,比如隔一段时间View端发送一次请求)
    struts在MVC中的地位】控制器,作用如图中(控制器)所示。有很多可用框架实现了该模型,struts的较好之处,一方面在于其提供了较为完善的功能,另一个方面是因为它使用了一种简洁开发的体验模式,将业务的处理转化为书写简单函数处理的形式(简单规定了应有的形态),正如手机上的软件一样,每一步简化都会吸引大量的用户。(个人感觉,这是struts之所以如此成功之处)


这里写图片描述

基本配置使用

struts使用流程

  • 引入jar文件

    commons-fileupload-1.2.2.jar 【文件上传相关包】
    commons-io-2.0.1.jar
    struts2-core-2.3.4.1.jar 【struts2核心功能包】
    xwork-core-2.3.4.1.jar 【Xwork核心包】
    ognl-3.0.5.jar 【Ognl表达式功能支持表】
    commons-lang3-3.1.jar 【struts对java.lang包的扩展】
    freemarker-2.3.19.jar 【struts的标签模板库jar文件】
    javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】)

  • 配置web.xml。在web.xml中引入struts的相关组件,使其可定位到struts相关的组件,进而对于请求处理的控制权转交给struts。(此处的核心过滤器为:StrutsPrepareAndExecuteFilter

  • 开发Action。动作类(Action)一般继承自ActionSupport类,用来处理请求。(PS:struts的 Action 取代了之前的servlet, 充当MVC模型中控制器的作用

    Action一般需继承ActionSupport类
    Action中响应 请求的业务方法,需要符合如下的规定:

    (1)返回String类型。(映射:根据返回的字符串,去查找相应的页面)
    (2)方法无参数。(外界传入的信息可以通过ActionSupport内置的对象获得相应的请求

  • 配置struts.xml。通过配置该文件,根据url中的信息将 请求分配给某个Action,并且配置Action执行相应的方法后返回的字符串对应的页面。

    PS : 为什么这么做呢?为何要引入映射机制呢?
    为何中间需要经过一个字符串作为中转,而不是直接定位到相应的页面呢。
    【答】解耦,如果将页面的路径直接写在代码中,那么每次更改之后都需要重新编译(有些项目中编译的代价是很大的,尤其是大型的项目),而放在配置文件中,不需要更改原来java代码中的内容,从而使之更加灵活。

PS:

关于web.xml的加载过程】(1)Tomcat启动;(2) 加载自身web.xml;(3)加载所有项目的web.xml;(4)通过在项目的web.xml中引入过滤器;(5)Struts的核心功能的初始化,通过过滤器完成。(通过过滤器,将控制权转移到了Struts中)

小的示例

配置web.xml

在web.xml中加入如下内容:(引入struts核心过滤器)

<!-- 引入struts核心控制器 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
    </filter>
    <!-- 拦截符合url模式的请求 -->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

开发Action,处理请求

public class LoginAction extends ActionSupport {
    // 处理请求的方法
    public String execute() throws Exception {
        System.out.println(“logining...”);
        //登陆业务处理(省略)
        return "success";
    }
}

配置struts.xml,建立 Action与URL请求的关系

<?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>
    <package name="user" extends="struts-default">
    <!--
        【目的】:映射实体业务类中的方法 与 相应的URL间的关系。
        【URL】Action中 name属性是URL的重要组成部分。
        【实体类】Action中 class属性及method属性指明了对应的实体类中的方法,负责处理请求的业务。
        【result标签】根据处理请求方法返回的字符串,定位相应的结果页面。
    -->
        <action name="loginCheck" class="wang.actions.UserAction"
            method="execute">
            <result name="success">/WEB-INF/jsp/loginSuccess.jsp</result>
        </action>
    </package>
</struts>

struts 的工作原理

基本原理图

这里写图片描述
解释:(摘自:Struts2的工作原理)

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher(现已过时)被调用FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy 创建一个ActionInvocation 的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。

细节解释

  • HttpServletRequest】struts接受请求的数据主要存放在HttpServletRequest 中,而该类遵守的是serlet规范,为了适配需要利用web服务器中针对serlet的处理组件,使请求能较好的适配到struts上面。(这就是FilterDispatcher的作用,请求需要web服务器(如,tomcat)过滤器才能较好的委托给Action去处理)
  • FilterDispatcher等过滤器】struts的核心控制器组件,作为servlet的过滤器形式出现。在web服务器内部,转发请求数据的作用。

PS:

【核心控制器】在 struts1.x 系列中 , 所有的请求是通过一个 servlet(ActionServlet) 来管理控制的 , 在 Struts2.X 而是经过一个 Filter 来处理请求的。

学习struts需要的技术包括:

MVC】对于MVC模型的基本了解。

参考

【百度百科】struts
【CSDN】struts2的核心和工作原理
【CSDN】心控制器:FilterDispatcher (写的真心清晰)

猜你喜欢

转载自blog.csdn.net/TheSnowBoy_2/article/details/79041395