Struts框架拥有两个主要的版本,分别是Struts 1.x 和Struts 2.x 版本,它们都是遵循MVC思想的开源框架。
注意:Struts 2 框架并不是核心控制器Struts 1 的升级版,而是一个全新的框架,在体系结构上与Struts 1 也存在着较大的差距。
它将Struts技术与WebWork技术完美地结合起来。
一、Struts2 工作流程
1、用户发出一个 HttpServletRequest 请求。
2、这个请求经过一系列的过滤器 Filter 来传送。【如果Struts2 与Site Mesh 插件以及其他框架进行了集成,则请求首先要经过可选的ActionContextCleanUp过滤器】
3、调用FilterDispatcher(核心控制器)【Struts 2框架的基础,包含了框架内部的控制流程和处理机制。】,它通过询问ActionMapper来确定该请求是否需要调用某个Action。如果需要调用某个Action,则FilterDispatcher就把请求转交给ActionProxy处理。
4、ActionProxy通过配置管理器 Configuration Manager 询问框架的配置文件struts.xml,从而找到需要调用的Action类。
5、ActionProxy 创建一个ActionInvocation的实例,该实例使用命名模式来调用。在Action执行的前后,ActionInvocation实例根据配置文件加载与Action相关的所有拦截器Interceptor。
6、一旦Action执行完毕,ActionInvocation实例根据struts.xml文件中的配置找到相对应的返回结果。【返回结果通常是一个Jsp或者FreeMarker的模版。】
7、最后,HttpServletResponse响应通过web.xml文件中配置的过滤器返回。
基本简要流程如下:
1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
最简单的七个步骤:
1:客户端在浏览器中输入一个url地址。
2:这个url请求通过http协议发送给tomcat。
3:tomcat根据url找到对应项目里面的web.xml文件。
4:在web.xml里面会发现有struts2的配置。
5:然后会找到struts2对应的struts.xml配置文件。
6:根据url解析struts.xml配置文件就会找到对应的class。
7:调用完class返回一个String字符串,根据struts.xml返回到对应的jsp。
struts2标签分类:
1.表单UI标签
2.非表单UI标签
3.控制标签
4.数据标签
为什么使用struts2?
1.开源
2.mvc框架
3.纯pojo的Action
4.更好的标签特性
5.易测试
6.易扩展
二、配置
web.xml【struts2-core-2.2.1.jar】
<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>
struts.xml【struts-2.0.dtd】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf-8" />
<package name="default" namespace="/" extends="struts-default">
<action name="userAction" class="action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
Action类继承ActionSupport。