1.Struts 2执行过程解析
简单程序运行流程图如下:
logon.jsp——>StrutsPrepareAndExecuteFilter——>Action——>Result——>manager.jsp
1.1web.xml
Struts 2框架需要在web.xml中配置其核心控制器——StrutsPrepareAndExecuteFilter
用于对框架进行初始化,以及处理所有的请求。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
StrutsPrepareAndExecuteFilter作为一个Filter在web应用中运行,他负责拦截所有的用户请求,当用户请求达到时,该Filter会过滤用户请求
2.Action
在Struts 2框架上,控制器由两部分组成,分别如下:
核心控制器(Filter),用于拦截用户请求,对请求进行处理.
业务控制器(Action):调用相应的Model类实现业务处理,返回结果
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<action name="login" class="action.UserAction">
<result name="success">main.jsp</result>
<result name="error">login.jsp</result>
</action>
</struts>
2.Struts 2的配置文件
2.1Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="" value=""/>
<action name="" class="">
<result name=""></result>
</action>
</struts>
constant元素:用于配置常量,通过常量的配置,改变struts 2框架的一些行为,从而满足不同应用的需求.name表示敞亮的名称,value属性表示常量的值
比如:解决乱码:
constant name="struts.il8n.encoding" value="UTF-8"/>
name:为必须的并且是唯一的,用来指定包的名称(被其他包引用)
extends:类似java中extends关键字,指定要拓展的包
namespace:可选属性,指该包中action的命名空间
2.2 拆分配置文件
<struts>
<include file="action/Userstruts.xml"></include>
<include file="action/Housestruts.xml"></include>
</struts>
3.Action的配置
action的作用:
- 最重要的作用是给指定的请求封装需要做的实际工作(调用特定的业务处理类)
- 为数据的转移提供场所
- 帮助框架决定由那个结果呈现请求响应
method属性:
指定具体方法执行处理逻辑
3.1通配符的使用
<action name="*User" class="action.UserAction" method="{1}">
<result name="success">{1}_success.jsp</result>
<result name="input">{1}.jsp</result>
<result name="error">error.jsp</result>
</action>
*:只要是User结尾的URL,都可以进入这个action
{1}:使用相对用的,也就是星号所代表的一个字符串
3.2配置默认的action
解决:不存在的action
元素:<default-action-ref/》
注意:每个package下只能有一个元素
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="defaultAction">
<action name="defaultAction">
<result>error.jsp</result>
</action>
</package>
4.Result配置
两部分组成:
所代表的实际资源的位置及result名称
另一部分是result类型,由result元素的type属性进行设定
4.1常用结果类型
1.dispatcher类型(默认)
转发
2.redirect类型
重定向
3.redirectAction类型
重定向到一个action。也就是说,当请求完成后,需要在另一个action中继续处理请求
4.2动态结果
4.3全局结果
在一些情况下,多个action可能需要访问一个结果,这时需要配置全局结果来满足多个action共享一个结果的要求
<package name="demo1" extends="struts-default">
<global-results>
<result name="success">showHouse.jsp</result>
<result name="error">login.jsp</result>
</global-results>