一、Struts2基本流程
大致上,Struts2框架由三部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这三部分里,Struts2框架提供了核心控制器,
而用户需要实现业务控制器和业务逻辑组件。
1、核心控制器(FilterDispatcher)
FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在web框架中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会自
动过滤用户请求。如果用户请求以action结尾,该请求被转入struts2框架处理。
当Struts2获得*.action的请求后,会根据*.action的*部分判断调用哪个业务逻辑组件,例如user.action请求,Struts2会调用Action为user的业务逻辑来
处理该请求,Struts2的Action定义在struts.xml文件中。
2、业务控制器
业务控制器实际上就是用户实现Action类的实例,在此类中继承ActionSupport这个类,一般要重写它的execute方法。此方法返回一个字符串,根据处理结果的
不同,返回的字符串也不同,每个字符串对应着一个相应的返回视图。
我们开发出Action类之后还要在struts.xml文件中配置这个Action,有如下三部分需要定义:
(1)配置Action的name值,与客户端请求的Url对应
(2)配置Action组件的实现类,即class属性
(3)配置Action所包含的逻辑视图与物理资源之间的关系。即result标签的属性。
3、Struts2模型组件
Struts2的业务控制器不会对用户的请求进行处理,用户的请求一般最终由模型组件来处理,业务控制器只是负责中间调度的。
就比如平时做的项目中一般是由action层调用service层的方法对用户请求进行处理,srrvice层下面还可能隐含着Dao层。
4、Struts2的基本流程
Struts2的大致执行流程有如下几步:
(1)用户发起请求(.action表示一个Action请求)
(2)Struts2的FilterDispatcher拦截到用户发起的请求,判断这个请求是否是Action请求,如果是Action请求,那么交给对应的Action进行处理,在这个
过程中需要一个辅助对象:Action映射器(ActionMapper)
(3)交给对应的Action处理之后,根据struts.xml中对此Action的配置信息,首先执行拦截此Action的所有拦截器,然后再执行请求的Action对象。
(4)Action执行完毕之后需要返回一个结果(此结果用字符串表示),核心控制器根据此返回结果从配置文件中找到真正的路径,然后将请求转发给相应的视
图,由视图向客户端做出相应的响应。
二、Struts2的基本配置
配置3个文件:web.xml struts.xml struts.properties
1、web.xml
任何MVC框架都需要与web应用整合,这就不得不借助web.xml这个文件,只有配置在web.xml中的Servlet才会被应用加载。
通常,所有的MVC框架都需要在web.xml中加载一个核心控制器,对于Struts2框架而言,需要加载FilterDispatcher,web应用只需要负责加载
FilterDispatcher,FilterDispatcher就会自动加载Struts2框架。
在web.xml中配置FilterDispatcher的代码片段如下:
<!-- 配置Struts2的核心Filter -->
<filter>
<!-- 配置Struts2核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- 配置Filter拦截的url,通过此配置让Filter拦截所有的用户请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当然,配置这个Filter的时候也可以指定一些初始化参数或者常量(比如struts2的编码),平时我没怎么用到在这块加参数,所以没写,但是要知道这块是可以
加初始化参数的。
2、配置struts.xml
Struts2框架的核心配置文件就是struts.xml,该文件主要负责管理struts2框架的业务控制器,也就是管理Action。
在默认情况下,Struts2框架将自动加载放到/WEB-INF/classes路径下的struts.xml文件(所以我们在eclipse中要将struts.xml放到项目的src目录下)。
在大部分应用中,随着应用规模的增加,系统中的Action数量也在增多,造成struts,xml文件臃肿,所以我们在开发的时候要将Action分类配置到不同的xml
文件中,然后在struts.xml文件中包含其他的配置文件,例如,<include file="struts_util.xml"/>。这样可以提高struts.xml文件的可读性。
看一个struts.xml文件的结构,就是一个示范文件:
<?xml version = "1.0" encoding = "UTF-8"?>
<!--下面是Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!--struts是struts2配置文件的跟元素 -->
<struts>
<!--下面的元素可以出现0次,也可以出现无限多次 -->
<constant name="" value="" />
<!--下面的元素可以出现0次,也可以出现无限多次 -->
<bean type&#