GitHub 地址
访问GitHub下载最新源码:https://github.com/JYG0723/Struts2_Action
简介
由于学校框架学习学的是 Struts2,而我之前学习的是Spring MVC。虽然曾经在大一暑假的时候接触过 Struts2,可是当时学的并不仔细,而且早已经忘记。所以决定重新学习一遍,记录下来自己在学习时觉得重要的知识点。
Struts2 的执行流程
- 客户端
HttpServletRequest
发送请求 - 请求经过过滤器
ActionContextCleanUp-->StrutsPrepareAndExecuteFilter(核心过滤器 )
- 请求到达
ActionMapper
,通过它来决定调用哪个A ction - 当决定调用某个 Action 后,请求又会通过核心过滤器,核心过滤器把请求的处理交给
ActionProxy
-
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
- 如果 namespace 定义成
- 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.xml
和struts.properties
可以参考:Struts2 的 xml及properties 配置文件
网友评论