- 浏览: 886149 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
Struts2串讲
(一)Struts2概述
Struts2是一个全新的基于MVC的Web编程框架它的整体设计完全不同于Struts1。新的Struts2框架在很多方面采纳了Webwork的设计思想。事实上,Struts2是Struts和Webwork整合优化后的新一代的Web编程框架,具有如下的特点:
1.基于AOP的设计思路,将相关的内容集中到单独的软件层面中,这主要体现在Struts2的Interceptor的设计上。
2.Struts2的Action类不再依赖于Struts框架,任何的类都可作为Struts2的Action.
3.提供了大量的自带的Interceptor来实现许多系统级的服务,使开发者可以忽略很多Web编程处理中的细节,从而可以集中精力处理核心的业务问题.
4.提供了更为方便、独立的Spring的集成服务支持。
5.提供了更为方便、独立的Tiles的集成服务支持。
6.提供了大量的缺省配置,这样可以大大简化基于Struts2开发的配置工作量。
7.内置Web2.0 AJAX 特性。
8.内置validation服务。
(二)Struts2的前端控制器
Struts2的控制器(Controller)是一个过滤器,所有的请求都需要经过该过滤器,其类型为:org.apache.struts2.dispatcher.FilterDispatcher,
当FilterDispatcher接收到一个请求后,会根据相关的配置信息查找服务于该请求的interceptors、action类并自动创建它们的实例及调用它的方法服务于请求,它还会根据interceptors或action的执行结果来调用视图层组件Result来生成响FilterDispatcher过滤器必在应用的web.xml 中部署,并配置为过滤所有的请求,配置方法如下:
<filter>
<filter-name>filterDispatcher</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDispatcher</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(三)自定义Interceptor
Interceptor拦截器是遵守struts2规范的一个对象,类似filter,在action调用之前及之后被调.有内置或自定义.内置常用为请求参数到action属性的绑定(param),参数校验,消息解析,文件上传处理等.
需要继承AbstractInterceptor接口并且实现方法:
public String intercept(ActionInvocation invocation){
String result = invocation.invoke();
return result;}
<package name="overview" extends="struts-default" namespace="/core">
<interceptors>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" /> 内置的
<interceptor name="sessionInterceptor" class="com.tarena.ums.interceptor.SessionInterceptor"/>
//自定义
<interceptor-stack name="sessionStack">
<interceptor-ref name="sessionInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="sessionStack"/>
<action name="greeting"
class="com.tarena.struts2.action.GreetingAction" method="sayGreeting">
<interceptor-ref name="params" />
<result name="success">/core/greeting.jsp</result>
</action>
</package>
(四)一些常用的API和数据模型
1.ActionContext是一个只在当前线程中可用的对象,即它存储在ThreadLocal中,它用来存放一些同当前的action密切相关的信息。使用它可以在所有服务于当前请求的对象之间共享信息。在interceptor,action,及result中均可访问该对象。
2.ValueStack是一个精心设计的栈结构,在栈中可以存放程序运行过程中产生的数据以便实现共享。更为重要的是可以使用EL对ValueStack中的对象进行赋值以及读取对象的信息。所有的EL操作都是针对最先找到的栈中的对象进行的,搜索顺序为从栈顶到栈底。
3. OGNL(Object Graphic Navigation Language)是一种表达式语言,使用它可以动态地根据某个字符串的表达式对某个对象进行方法调用操作,而不需要知道该对象的具体类型。Struts2的ValueStack支持使用OGNL来动态操作栈中的对象。
(五)编程中的应用
Struts2框架不强制Action类继承于任何父类或实现任何的接口,只要一个类中满足如下的要求,都可以作为Struts2的Action。
1.有公共的缺省构造器
2.业务方法遵守签名规则:public String methodName()
在默认情况下,控制器会调用Action类的execute方法。如果要调用其它的方法,可以在<action>标签中通过属性method来指定其它的方法名。在开发时,为了保证编译期方法签名的检验,Struts2提供了一个轻量级的接口com.opensymphony.xwork.Action,该接口中规定了execute方法,实现在接口并不会影响程序的便携性。为了更为方便地使用Struts2的其它特性比如:读取资源文件、实现校验等,Struts2提供了该接口的一个实现类供开发者继承使用:com.opensymphony.xwork.ActionSupport。
Struts2中的Action对象即作为业务处理对象也作为数据传输对象。
Struts2的Action类需要在struts.xml文件中进行配置,这样每个Action类都对应一个可以被访问的URL。
在配置文件中,action是通过package来组织的。一个package中可以包含多个action的定义,并且一个package可以通过继承于其它的package来复用父package中的配置信息。Struts2提供了一个叫做的struts-default的缺省的package,应用自定义的package通常继承于struts-default。
<package name="albumDefault"
extends="struts-default“
namespace=“/core”>
<action
namespace="welcome" class="com.allanlxf.struts2.action.WelcomeAction">
<result>/welcome.jsp</result>
</action>
</package>
每个package都同某个namespace关联,这样在控制器接收到请求时,可以将请求的URL映射为某个namespace,并从该namespace所对应的package中查找action。
多个package可以对应同一个namespace,没有指定namespace的package被认为在“缺省的namespace中。控制器在查找action时,先看指定的namespace中是否存在该action,如果不存在则在缺省的
namesapce中查找。
1. welcome被认为是要查找的action的名字。
2. 在namespace:/core所对应的package中进行查找。
3. 如果找不到,则在缺省的namespace所对应的package中查找。
4. 如果找不到,报告异常。
注意:在处理任意一个请求的过程中,系统最多查两个名字空间,即最长的名字空间和缺省的名字空间。还有“/”并不代表缺省的名字空间。
(六)标签库的应用
使用struts的标签来读取当前ActionContext所关联的ValueStack中的对象的信息,其中message为一个OGNL表达式。
<s:property value=“message” />
<s:property value="#request" /> //#ValueStack之外的属性
<s:url action="login" namespace="/" id="loginActionURL"/>
<s:param name="user.id" value="id" /> //可以传参数
</s:url>
<form method="post"
action="<s:property value="#loginActionURL"/>">
<s:iterator value="users" status="status"> //value:要遍历的对象
<s:property value="#status.count"/>
<s:url action="load" namespace="/user" id="loadURL">
<s:param name="user.id" value="id" />
</s:url>
<a href="${loadURL}"><s:property value="userName"/></a>
<s:date name="birthday" format="yyyy-MM-dd"/>
</s:iterator>
(七)当一个请求到来,Struts2的流程
客户端发送请 :http://localhost:8080/album-app/core/welcome.action
② 根据web.xml的配置所有的请求都被FilterDispatcher过滤,根据default.properties的配置,以.action结尾的请求为到action的请求。控制器会根据struts.xml中的配置构建action的调用栈,interceptors在前,然后为action,最后为result。系统创建一个ActionContext对象,并将它和当前的线程关联。系统会在ActionContext对象中构建一个ValueStack用来存放操作过程中的数据,并将action对象放入栈顶。
③ 调用staticParams interceptor,该interceptor会 struts.xml中配置的当前action的<param>信息赋给ValueStack中的action实例,此时使用OGNL实现。
④ 执行action的execute方法。
⑤ 根据execute的返回值调用相应的Result对象。
⑥ result对象执行目标资源,生成到客户端的响应。
⑦ FilterDispatcher执行ActionCon text的资源回收工作。
(八)知识点回顾
1.报表jasperreport
2.log4j
3.配置文件
4.json
5.interceptor
6.exception
7.from表单的提交,验证
8.文件上传
9.标记库
10.单元测试
发表评论
-
ognl表达式
2011-07-07 00:36 1293OGNL是Object Graphic Navigation ... -
在Struts 2_0中实现表单数据校验
2011-07-07 00:02 1137转换与校验(Conversion & Validati ... -
简单的struts2输入校验框架
2011-05-13 23:43 10831.输入页面login.jsp: <%@ page ... -
struts2在学习(十二)--表单验证的两种方式
2011-05-13 23:13 957第四个示例:注解方式校验器---用户注册页面user2_reg ... -
struts2在学习(十一)--表单验证的两种方式
2011-05-13 23:09 902第二个示例:XML配置式校验器---登录和注册页面user_l ... -
struts2在学习(十)--表单验证的两种方式
2011-05-13 22:56 11561. Struts2中的输入校验2. 编码方式校验 1) A ... -
struts2采用convention-plugin实现零配置
2011-05-13 21:58 1111最近开始关注struts2的新特性,从这个版本开始,Strut ... -
基于SSH2框架Struts2拦截器的登录验证实现
2011-04-01 22:00 2288通过之前的Struts2.1.6+Spring2.5.6+H ... -
通过ActionContext类访问Servlet对象
2011-04-01 21:40 1914ActionContext类位于com.opensympho ... -
webwork 之销毁session
2011-04-01 17:35 1761销毁的意思?不是清空 ... -
Struts2 Convention Plugin(三)
2011-03-18 01:26 1196Annotation 参考Convention使用某些注解语句 ... -
Struts2 Convention Plugin(二)
2011-03-18 01:25 1147Results and result codesStruts ... -
Struts2 Convention Plugin(一)
2011-03-18 01:25 1094Introduction从struts2.1版本开始,Conv ... -
struts2页面中的标签调用类的方法
2011-03-15 16:33 1612<s:set name="str" ... -
Apache Struts 2.2.1 GA版发布
2011-03-14 17:14 1334昨日,Apache软件基金会发布了Struts 2.2.1 G ... -
spring2 +hibernate 3 + struts 配置
2011-03-14 15:15 12081. web.xml 1. <?xml versi ... -
Struts2 中action之间的跳转
2011-03-14 12:32 1250转载于http://zhou568xiao.iteye.com ... -
Struts2 的Result Type
2011-03-13 16:35 1041http://www.blogjava.net/duanzhi ... -
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
2011-03-13 16:32 1619dispatcher 为默认跳转类型,用于返回一个视图资源(如 ... -
struts2防止重复提交
2011-03-10 23:07 1289struts2的防止重复提交 也使用到了 token (令牌机 ...
相关推荐
Struts2是一款非常流行的Java Web框架,用于构建企业级应用。然而,随着时间的推移,Struts2在安全方面暴露出了一些重要的漏洞,这给使用该框架的系统带来了潜在的安全风险。"Struts2漏洞检查工具Struts2.2019.V2.3...
Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...
struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
这个"留言板留言板struts2"项目,显然是一个基于Struts2实现的简单留言板系统,旨在展示Struts2的核心功能和开发流程。下面将详细介绍Struts2框架以及在该项目中可能涉及的关键知识点。 1. **Struts2框架概述**:...
struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...
Struts2 最新漏洞 S2-016、S2-017 修补方案 Struts2 是一个基于 Java 的 Web 应用程序框架,由 Apache 软件基金会维护。最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者...
Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户交互式、数据驱动的web应用的过程。这个“Struts2接口文档”是开发者的重要参考资料,提供了关于...
Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...
### Struts2核心知识点解析 #### 一、Struts2框架概述 - **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,...
### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web应用的开源框架。它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在...
Struts2是一个强大的Java web应用程序框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性、可扩展性良好的企业级应用的工具。这个"struts2jar.zip"压缩包包含了Struts2学习和研究的基础...
该工具的打开路径为:\Struts2VulsTools-2.3.20190927\Test\bin\Release\Text.exe 2019-09-25: 优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建...
Struts2是一个强大的Java web开发框架,用于构建可维护、可扩展且结构良好的应用程序。它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,使得开发者能够更方便地处理用户请求,控制业务逻辑,...
Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了构建基于Java EE的Web应用程序的过程。本资源包含"struts2所有jar包程序文件",是...
Struts2-showcase是一个用于演示和学习Apache Struts2框架功能的开源项目。这个压缩包“struts2-showcase.rar”包含了完整的源代码,旨在帮助开发者深入理解Struts2框架的工作原理及其各种特性。以下是对Struts2和...
Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。它在Java社区中广泛使用,因其灵活性、可扩展性和丰富的插件库而受到赞誉。Struts2的核心是Action类,它处理HTTP...
struts2环境搭建+struts2 新闻发布系统+struts2 留言板 struts2环境搭建:基础框架搭建,简单易上手,适合新手,比你看书强多了,实践源于理论而高于理论,贵在实践 朋友。 struts2 新闻发布系统:struts2+jsp 功能不...
-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...