什么是struts
Struts 2 是Apache软件基金会(Apache Software Foundation,简称为ASF)以WebWork优秀的设计思想为核心,建立的一个基于MVC(Mode/View/ Controller )框架。
两个版本:struts1 struts2
struts1 struts2区别是什么?
在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的 POJO 。 线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。 Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。 封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。 表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。 绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。 类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。 数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。 Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。
模型
一个请求在Struts2框架中的处理大概分为以下几个步骤:
• 1、客户端初始化Servlet容器(例如Tomcat)的请求;
• 2、这个请求经过一系列的过滤器(Filter)(其中ActionContextCleanUp可选过滤器,这个过滤
器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
• 3、FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用
某个Action;
• 4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给
ActionProxy;
• 5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
• 6、ActionProxy创建一个ActionInvocation的实例。
• 7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器
(Intercepter)的调用。
• 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者
FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及
到ActionMapper
struts有一个filterdispatcher过滤器配置在web.xml中用来监听
action请求一旦遇到这个请求之后会将请求拿到struts中ActionMapper
查找对象向对应的控制器如果有的话
转个ActionProxy这个代理去创建对象
Action对象
分为大步骤:
1、写一下filterdispatcher
2、写action这个类
3、写处理后的业务逻辑
4、写好的action配置的struts.xml中
5、拦截器学习
6、线程标签
7、国际化
1、jsp action 传值
基本属性,有get set 变量名匹配
2、method
method指定执行的方法默认是的execute方法
method也可以指定其他的任何方法 class 指定的是响应的action类 name是响应的url调用时的方法
3、type
type指定页面跳转方式 默认是forward方式url没有跳转 可以指定为指定类型例如redirect是页面url改变
4.隐藏方法
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="actionDemo" extends="struts-default">
<action name="action" class="com.insigma.action.ActionDemo" method="">
<result name="success">/Success.jsp</result>
<result type="redirect" name="error">/index.jsp</result>
<result name="input">/Regist.jsp</result>
</action>
</package>
</struts>
Struts 2 是Apache软件基金会(Apache Software Foundation,简称为ASF)以WebWork优秀的设计思想为核心,建立的一个基于MVC(Mode/View/ Controller )框架。
两个版本:struts1 struts2
struts1 struts2区别是什么?
在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的 POJO 。 线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。 Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。 封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。 表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。 绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。 类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。 数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。 Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。
模型
![](https://img-my.csdn.net/uploads/201204/15/1334484339_1862.jpg)
一个请求在Struts2框架中的处理大概分为以下几个步骤:
• 1、客户端初始化Servlet容器(例如Tomcat)的请求;
• 2、这个请求经过一系列的过滤器(Filter)(其中ActionContextCleanUp可选过滤器,这个过滤
器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
• 3、FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用
某个Action;
• 4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给
ActionProxy;
• 5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
• 6、ActionProxy创建一个ActionInvocation的实例。
• 7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器
(Intercepter)的调用。
• 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者
FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及
到ActionMapper
![](https://img-my.csdn.net/uploads/201204/15/1334484451_5590.jpg)
struts有一个filterdispatcher过滤器配置在web.xml中用来监听
action请求一旦遇到这个请求之后会将请求拿到struts中ActionMapper
查找对象向对应的控制器如果有的话
转个ActionProxy这个代理去创建对象
Action对象
分为大步骤:
1、写一下filterdispatcher
2、写action这个类
3、写处理后的业务逻辑
4、写好的action配置的struts.xml中
5、拦截器学习
6、线程标签
7、国际化
1、jsp action 传值
基本属性,有get set 变量名匹配
2、method
method指定执行的方法默认是的execute方法
method也可以指定其他的任何方法 class 指定的是响应的action类 name是响应的url调用时的方法
3、type
type指定页面跳转方式 默认是forward方式url没有跳转 可以指定为指定类型例如redirect是页面url改变
4.隐藏方法
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="actionDemo" extends="struts-default">
<action name="action" class="com.insigma.action.ActionDemo" method="">
<result name="success">/Success.jsp</result>
<result type="redirect" name="error">/index.jsp</result>
<result name="input">/Regist.jsp</result>
</action>
</package>
</struts>