一、简介
Struts2是基于MVC的轻量级的web应用框架。![](https://i-blog.csdnimg.cn/blog_migrate/9243399dc25280bd779e706f3169dfd2.png)
运行流程:Action相当于service层,用来处理业务逻辑。
(1)客户端提交请求
(2)请求被提交到一系列过滤器(先ActionContentCleanUp,然后其他过滤器,最后FilterDispatcher)
(3)FilterDispatcher咨询ActionMapper是否需要调用某个Action来处理这个请求,如果ActionMapper决定调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
(4)ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。
(5)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)
(6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result
请求-> web.xml->FilterDispatcher->struts.xml->Interceptor->Action->model二、控制器配置
1、web.xml
<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>
2、struts.xml
<span style="font-size:14px;"><?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的请求都由struts2处理 -->
<constant name="struts.action.extension" value="action" />
<!-- 是否启用开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 设置浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
<constant name="struts.i18n.reload" value="true" />
<!-- 文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="104857600" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- Action名称中是否还是用斜线 -->
<constant name="struts.enable.SlashesInActionNames" value="false" />
<!-- 允许标签中使用表达式语法 -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
<constant name="struts.dispatcher.parametersWorkaround" value="false" />
<!-- package用来处理以namespace映射的请求 -->
<package name="basePackage" extends="struts-default" namespace="/">
<!-- action method默认为execute方法,一般不适用这种方式,采用通配符-->
<action name="user" class="com.sd.action.User" >
<result name="success">/success.jsp</result>
</action>
</package>
<package name="user" extends="struts-default" namespace="/user">
<!-- action {1}匹配name中的第一个* -->
<action name="User*" class="com.struts2.study.yy.UserAction" method="{1}">
<result>/user/user_{1}_success.jsp</result>
</action>
</package>
</struts>
三、Action
Action类:
public class OneAction extends ActionSupport{
public String add(){
System.out.println("add..");
return "hello";
}
public String update(){
System.out.println("update..");
return NONE;
}
}
struts.xml:
<package name="default" namespace="/" extends="struts-default">
<action name="action_*" class="struts2.OneAction" method="{1}">
<result name="hello">Hello.jsp</result>
</action>
</package>
四、总结
Struts2还有拦截器等其他构件,但一般不适用,主要使用其MVC模式,但今年来慢慢被SpringMVC框架替代。