首先struts2是什么?为什么要用struts2?struts2是怎么来的?带着这几个问题去初步了解它!
struts2是一套java ee web框架。对于struts1而言,struts2有很多革命性的改进。struts2是webwork的升级版。它吸收struts1和webwork的优势,因此稳定性和性能相对较高了。
struts2的原理
1.客户端初始化一个指向servlet容器的请求。
2.这个请求经过一系列的过滤器(Filter),这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于struts2和其他框架的集成很有帮助。
3.接着FilterDispatcher被调用,FilterDispatch询问ActionMapper来决定这个请求是否需要调用某个Action。
4.如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5.ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。
6.ActionProxy创建一个ActionIncation的实例.
7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8.一旦Action执行完毕,ActionInvocation负责根据Struts.xml中的配置找到对应的返回结果。返回结果通常是一个需要被表示的jsp或者FreeMarker的模板。在表示的过程中可以使用struts2框架中继承的标签。在这个过程中需要涉及ActionMapper
struts2与struts1的区别
1.Action类不同:
①Struts1要求Action类继承一个抽象父类。struts1的一个普通问题是使用抽象编程。
②Struts2的Action类可以实现一个Action接口,可以实现其他接口,使可选和定制的服务成为可能。struts2提供一个ActionSuppprt基类去实现常用的接口,Action接口是必须的,任何有excute标识的pojo对象都可以作为struts2的Action对象。
2.线程模式不同:
①Struts1的Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求,单例策略限制了struts1Action能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或同步的。
②Struts2的Action对象为每一个请求产生一个实例。因此没有线程安全问题(实际上,servlet容器给每个请求许多可丢弃的对象,并且不会导致性能个垃圾回收问题。)
3.servlet依赖不同:
①struts1的Action依赖servlet API,因为一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给excute方法。
②Struts2的Action不依赖于容器,允许Action脱离容器单独被测试。如果需要。struts2Action仍然可以访问初始的request和response。但是其它的元素减少或者消除直接访问HttpServeltRequest和HttpServeltResponse的必要性。
4.可测性不同:
①测试struts1 Action的一个主要问题是excute方法暴露了servlet API(这使得测试要依赖与容器)。一个第三方扩展--Struts TestCase--提出了一套Struts1的模拟对象来进行测试。
②Struts2 Action可以通过初始化设置属性,调用方法来测试,“依赖注入”支持也使测试更容易。
struts的核心:拦截器
拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。
当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。
拦截器timer的用途——用于显示执行某个action方法的耗时,在我们做一个粗略的性能调试时,这相当有用。
拦截器是Struts 2比较重要的一个功能。通过正确地使用拦截器,我们可以编写高可复用的代码。
struts2的验证
struts2的OGNL表达式
struts2的国际化
struts2的类型转换
struts2的绑定
struts2的源码
struts2的值栈
struts2的优化
分享到:
相关推荐
输入校验的流程在Struts2中是结构化的,涉及多个步骤: 1. **类型转换**:首先,Struts2框架使用类型转换器将HTTP请求中的字符串参数转换为相应的Java类型,如Integer、Date等,并将这些值设置为Action类的属性。 ...
- **原理**:Struts2 的拦截器会在 Action 执行完成后,调用 getter 方法并将结果存储到适当的范围对象中。 **3.4 请求转发与重定向** - **转发**:Action 的 execute 方法返回一个字符串,根据这个字符串找到对应...
OGNL是Struts2中用于对象属性访问和表达式语言,它允许在Action、ValueStack和视图层之间传递数据。ValueStack是一个对象栈,它持有ActionContext上下文中的所有对象,包括Action实例、ActionForm、Session、Request...
struts2+hibernate一周小项目总结
在Struts2中,所有的Action调用都是通过`ActionProxy`来完成的。 通过以上内容,我们可以看到Struts2是一个功能强大且易于使用的Java Web开发框架,它简化了Web应用程序的开发过程,使开发者能够更专注于业务逻辑的...
总结起来,这个压缩包提供了一个完整的Struts2实例,对于初学者来说,可以通过分析源代码和配置文件来深入理解Struts2框架的运作机制,以及如何在实际项目中有效地应用。通过阅读和实践,开发者可以提升自己的Java ...
在Struts2中配置HTTPS主要涉及以下几个步骤: 1. **配置服务器**:首先,你需要在服务器端(如Tomcat、Jetty等)启用HTTPS。这通常涉及到修改服务器的配置文件(如Tomcat的`server.xml`),添加一个监听443端口的...
完成以上步骤后,右键点击项目属性中的“Libraries”,选择“Add Library”,将刚刚创建的“Struts2”Library添加到项目依赖中。 #### 步骤三:配置Web.xml 为了让Struts2框架在项目中正常工作,我们需要对项目的...
在`Dispatcher`的初始化过程中,它会读取`web.xml`或其他配置文件,解析Struts2的配置信息,如Action、结果类型、拦截器等。这些配置信息被加载到内存中的容器中,供后续请求处理时使用。`Dispatcher`还负责初始化...
### Struts 2中实现CRUD操作详解 #### 一、引言 CRUD操作是软件开发中最常见的数据处理方式之一,它代表了对数据进行的四种基本操作:创建(Create)、读取(Read)、更新(Update)与删除(Delete)。在企业级应用开发中,...
一旦Action执行完成,ActionInvocation将根据struts.xml配置文件中定义的结果类型(Result),决定下一步的动作,如跳转至特定的视图页面(通常是JSP或FreeMarker模板)。这个过程实现了模型与视图的分离,提高了...
- **拦截器机制**:Struts2中的拦截器类似于Servlet中的过滤器,但更加轻量级,可以在不修改业务代码的情况下增加功能,如文件上传、输入验证等。 - **类型转换**:Struts2提供了一套强大的类型转换机制,能够将用户...
在`cas_test`这个压缩包中,可能包含了完成上述步骤的源代码示例,包括Struts2的Action、配置文件以及必要的视图资源。通过研究这些代码,你可以更直观地了解如何在实际项目中实现这个功能。 总结一下,Struts2+CAS...
总结起来,"struts2 发布包"的1.3.9版本是Struts2框架的一个早期版本,虽然它包含了一些基本的MVC架构和拦截器机制,但随着技术的发展,新版本提供了更多的特性、优化和安全性改进。对于当前的开发环境来说,理解和...
2. **路由决策**:核心控制器`FilterDispatcher`根据URL中的Action名和配置文件(struts.xml)中的定义来确定应调用哪个Action。 3. **执行拦截器链**:在调用具体的Action之前,会首先经过一系列的拦截器。这些拦截...
以上是对 Struts2 学习的一些基本总结,包括环境搭建、工具集成、工作原理以及 Namespace 和 Action 的使用等关键知识点。通过这些知识点的学习,可以帮助开发者更好地理解和使用 Struts2 框架。
在Struts2中,我们需要创建一个对应的Action类,定义一个方法来处理前端的请求。这个方法需要使用`@Action`注解来指定URL映射,如: ```java public class MyAction extends ActionSupport { private String key; ...