Struts2 学习笔记 (一)

作者: HikariCP | 来源:发表于2017-11-06 01:51 被阅读11次

    GitHub 地址

    访问GitHub下载最新源码:https://github.com/JYG0723/Struts2_Action

    简介


    由于学校框架学习学的是 Struts2,而我之前学习的是Spring MVC。虽然曾经在大一暑假的时候接触过 Struts2,可是当时学的并不仔细,而且早已经忘记。所以决定重新学习一遍,记录下来自己在学习时觉得重要的知识点。

    Struts2 的执行流程


    1. 客户端HttpServletRequest发送请求
    2. 请求经过过滤器ActionContextCleanUp-->StrutsPrepareAndExecuteFilter(核心过滤器 )
    3. 请求到达ActionMapper,通过它来决定调用哪个A ction
    4. 当决定调用某个 Action 后,请求又会通过核心过滤器,核心过滤器把请求的处理交给ActionProxy
    5. ActionProxy通过ConfigurationManage询问配置文件Struts.xml,找到要调用的 Action 类。

    StrutsPrepareAndExecuteFilter


    • 等同于 Spring MVC 中的 DispatcherServlet。前段请求接收器,负责根据各 action 分发用户请求。
    • 这其实两个 Filter,Prepare(准备)Execute(执行)。他的前身是 FilterDispatcher,后来因为该 Filter 不允许在视图和该过滤器之间添加自己的过滤器所以被改进。转变成了现在的StrutsPrepareAndExecuteFilter
    • 这个过滤器只会过滤和自己相关的请求,即以.action为路径后缀的请求。.html,.jsp会放行结尾的则会放行。
    • web.xml中配置了该过滤器之后,web 应用上下文被加载成功之后便会加载该过滤器,只要改过滤器被加载那么他将会加载 Struts2 框架。

    struts.xml解析


    struts2 的核心配置文件。主要负责管理各 Action 的映射,以及该 Action 对应的 Result 的定义。

    struts.xml 文件中包含:

    • 全局属性
    • 各用户请求和响应 Action 之间的对应关系。
    • Action 可能用到的参数和返回结果
    • 各种拦截器配置

    标签

    • include:可以将每个功能模块独立到一个 xml 配置文件中,然后用 include 标签进行引入。
    • package:配置文件中可以有多个包,但是包的名称是唯一的。
      • name:包名
      • extend:继承的父类的包,默认是 struts-default
      • abstract:设置该 package 的属性为抽象的。抽象的 package 不能定义 action。但可以在其中定义一些全局的属性或者拦截器。然后供其他包进行引用或者继承。
      • namespace:定义 package 的命名空间。该命名空间影响到该 package 下定义的 action 的访问的 url 路径。
        • 如果 namespace 定义成 "/",那么访问该 package 下的 action 只需要直接根据该 action 的名字访问就可以了。http://localhost:8080/struts2/XX.action
      • interceptors:拦截器的定义在该标签中,可以在 interceptors 标签下定义我们自己的拦截器。
        • interceptor :拦截器。其中该 interceptor 标签有两个属性,一个 name(拦截器名称),一个 class(类名)。
        • interceptor-stack:拦截器栈。
      • default-interceptor -ref:可以通过该标签来引用一个拦截器成为默认的拦截器。即任意一个 Action 都会引用该拦截器。
      • global-results:全局的结果集。可以自己在其中进行定义,定义好之后该包之中的所有的 action 都可以对其进行引用。<result name = "error">/error.jsp</result>
      • action:每个包中可以定义多个 action。
        • 属性
          • <action name = "hello" class = "nuc.jyg.struts2.Action.LoginAction"></action>
          • name:该 action 的名称。对应访问该 action 的 url 映射。http://localhost:8080/ProjectName/NameSpace/hello.action
          • class:对应类的路径。
          • method:调用 Action 的方法名。可以指定该 Action 调用它的哪个方法。
        • 内部标签
          • interceptor-ref:可以定义该 Action 的拦截器。
          • result:可以定义该 Action 的结果集,通过 method 属性的结果来对应。选择哪个结果集对应的视图进行展示。<result name = "success" type = "dispatcher">/success.jsp</result>。这里 type 属性有很多种。
          • param:Action 的参数。在对应的 Action 中通过 set/get 方法可以访问到。<param name = "url">http://www.jiyongguang.xin</param>
    • constant:常量标签。在struts.xml文件中定义该标签。可以省去配置struts.properties文件。
      • <constant name = "struts.i18n.reload" value = "true"></constant>

    具体的struts.xmlstruts.properties可以参考:Struts2 的 xml及properties 配置文件

    相关文章

      网友评论

        本文标题:Struts2 学习笔记 (一)

        本文链接:https://www.haomeiwen.com/subject/gjjkmxtx.html