- 浏览: 642379 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
lizhuang:
这个方法的内部实现主要是依赖于类加载器,一般的自己实现的类是用 ...
Java中getResourceAsStream的用法 -
prince4426:
回答评论都很精彩
Java中getResourceAsStream的用法 -
kexuetou:
美人如此多娇 写道可能这样总结更好,路径前不带'/',则是相对 ...
Java中getResourceAsStream的用法 -
guoxin91:
...
Java中getResourceAsStream的用法 -
美人如此多娇:
可能这样总结更好,路径前不带'/',则是相对路径;若带,则是绝 ...
Java中getResourceAsStream的用法
------------------------------------------------------------------
本文转载自--http://yulon.iteye.com/blog/551982
------------------------------------------------------------------
六、Struts2的处理流程与Action的管理方式
6.1struts2处理请求图
StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器(相当于strtuts1.x的ActionServlet类的作用),它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。也正因为如此,Struts2里可以定义成员变量,从而废弃了Struts1.x里的Form Bean.即Struts2的Action已具备了Struts1.x里的Form Bean的功能.
七、动态方法调用和使用通配符定义action
7.1 动态方法调用
如果Action中存在多个业务方法时,我们可以使用!+方法名调用指定方法。 我们在HelloWorldAction里添加两个业务方法,如下:
- public String del() {
- message = "调用del()删除方法";
- return "success";
- }
- public String add() {
- message = "调用add()添加方法";
- return "success";
- }
public String del() { message = "调用del()删除方法"; return "success"; } public String add() { message = "调用add()添加方法"; return "success"; }
如果要访问action的del() 方法,我们可以这样调用:/struts2.1/test/helloworld!del ,动态方法调用就是那么简单,它实现了跟struts1.x 的DispatchAction一样的作用.
注意: struts2的官方文档已经不建议我们这样使用,建议我们使用另外一种方式来实现:使用通配符定义action来替代
7.2 使用通配符定义action
即用*号来表示在动态改变的字符或字符串.在struts.xml的test包中添加一个action,如下:
- <action name="*User" class="cn.gkit.action.HelloWorldAction" method="{1}" >
- <param name="message">属性注入</param>
- <result name="success">/WEB-INF/jsp/helloworld.jsp</result>
- </action>
<action name="*User" class="cn.gkit.action.HelloWorldAction" method="{1}" > <param name="message">属性注入</param> <result name="success">/WEB-INF/jsp/helloworld.jsp</result> </action>
此时如果要访问action的del() 方法,我们可以这样调用:/struts2.1/test/delUser 即可调用到del()方法.
知识提示:{1}表示与第一个*号匹配,{1}不但可以在method属性上使用,还可以在其他地方使用,如在<result>使用:
<result name="success">/WEB-INF/jsp/{1}.jsp</result>
八、自定义类型转换器
问题引入:对于Date类型的属性,可以接收格式为2009-12-20的请求参数值,并将其自动转换成Date类型.但如果项目需求要接收形如:20091220格式的日期该怎么办,在struts1.x中我们可以通过定义类型转换器来实现,同样在Struts2.x里我们也可以定义类似的转换器,并且比struts1.x的转换器要强大,它实现了双向转换的功能.
8.1 定义局部类型转换器
首先在HelloWorldAction里增加一个java.util.Date 类型的birthday字段,并提供getter和setter方法.如下:
- private Date birthday;
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; }
然后:定义Date类型转换器,定义转器有两种方式:
第一种是继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter类,重写它的convertValue方法,实现如下:
- public class DateTypeConverter extends DefaultTypeConverter{
- @Override
- public Object convertValue(Map<String, Object> context, Object value,
- Class toType) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
- try {
- if(toType == Date.class){//当字符串向Date类型转换时
- String[] params = (String[]) value;// Request.getParameterValues()
- return dateFormat.parse(params[0]);
- }else if(toType == String.class){//当Date转换成字符串时
- Date date = (Date) value;
- return dateFormat.format(date);
- }
- } catch (ParseException e) {}
- return null;
- }
- }
public class DateTypeConverter extends DefaultTypeConverter{ @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); try { if(toType == Date.class){//当字符串向Date类型转换时 String[] params = (String[]) value;// Request.getParameterValues() return dateFormat.parse(params[0]); }else if(toType == String.class){//当Date转换成字符串时 Date date = (Date) value; return dateFormat.format(date); } } catch (ParseException e) {} return null; } }
第二种方式是继承org.apache.struts2.util.strutsTypeConverter类,并实现它的两个抽象方法,实现代码如下:
- public class DateTypeConverter extends StrutsTypeConverter {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
- @Override
- public Object convertFromString(Map context, String[] value, Class toType) {
- String[] params = (String[]) value;// Request.getParameterValues()
- try {
- return dateFormat.parse(params[0]);
- } catch (ParseException e) {}
- return null;
- }
- @Override
- public String convertToString(Map context, Object value) {
- Date date = (Date) value;
- return dateFormat.format(date);
- }
- }
public class DateTypeConverter extends StrutsTypeConverter { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); @Override public Object convertFromString(Map context, String[] value, Class toType) { String[] params = (String[]) value;// Request.getParameterValues() try { return dateFormat.parse(params[0]); } catch (ParseException e) {} return null; } @Override public String convertToString(Map context, Object value) { Date date = (Date) value; return dateFormat.format(date); } }
知识提示:查找StrutsTypeConverter的源码发现,它本身也继承了DefaultTypeConverter类.StrutsTypeConverter类使用的一种设计模式是模板方法设计模式。
最后,配置要使用该转换器的action类
在HelloWorldAction同一包内新建HelloWorldAction-conversion.properties文件.文件名的后半部分是固定不变的
*-conversion.properties,*表示的是对应的Action的简单类名(即不带包名),在该文件里如下定义:
birthday=cn.gkit.type.converter.DateTypeConverter
birthday表示要转换的属性,右边对应一个转换器.
此时访问路径:/struts2.1/test/helloworld.action?birthday=20091220,Struts框架就是使用刚才定义的转换器将String类型转换成java.util.Date类型.
8.2 定义全局类型转换器
全局类型转换器的配置文件名是固定的:xwork-conversion.properties,并将该文件放到src目录,编译后会自动WEB-INF\classes目录下.在该文件里如下定义:
java.util.Date=cn.gkit.type.converter.DateTypeConverter
左边定义的是要转换的类型,作用了全部Action类.
注意: 如果同时定义了局部和全局的类型转换器,对于同一个类型,局部会覆盖全局的转换器
发表评论
-
HTTP协议解析
2010-01-27 20:39 4543掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在 ... -
TOMCAT指定JDK
2010-01-14 17:13 2419在windows环境下以批处理文件方式启动tomcat,只要运 ... -
Struts2的国际化
2010-01-01 11:30 1163Struts2国际化分为三类: ... -
总结Struts2的经典输入校验
2009-12-30 16:59 21181,输入校验介绍 Struts2提供了功能强大的输入校验机制 ... -
浅谈Struts2的内建校验器
2009-12-30 16:16 1311Struts2已经为我们准备了一些内建校验器,我们可以直接使用 ... -
Struts2输入校验
2009-12-30 16:12 1648struts2的输入校验针对输入进行业务规则的校验,譬如是否必 ... -
Struts2拦截器原理
2009-12-27 21:02 33461. 什么是拦截器 拦截器,在AOP(Aspect-O ... -
Struts2多文件上传
2009-12-27 17:36 1395Struts2也可以很方便地实现多文件上传。 在输入表 ... -
Struts2文件上传
2009-12-27 16:52 15181.文件上传原理 表单元素的enctype属性指定 ... -
Struts2 访问request、session和application对象
2009-12-27 15:28 3870在传统的Web开发中,经常会用到Servlet API中的Ht ... -
Struts2类型转换
2009-12-26 23:01 1687一、 struts2类型转换一 1、struts2的类型转 ... -
Struts2请求参数的接收
2009-12-26 22:24 16341)--采用基本类型接收请求参数(get/post) ... -
Struts2动态方法调用
2009-12-26 16:48 4535Struts2支持动态方法调用,它指的是一 ... -
Struts2指定多个配置文件
2009-12-26 15:50 2901如果配置文件struts.xml的内容太多,或者是 ... -
Struts2命名空间
2009-12-26 15:24 1644Struts.xml命名空间规则 包的na ... -
Struts2框架的处理流程
2009-12-26 15:07 42701. Struts2架构图 请求首先通过F ... -
Struts2的常量详解
2009-12-26 11:43 3498通常struts2加载struts2常 ... -
HTML form包含的元素
2009-12-25 17:01 1797HTML form elements Object ... -
Struts2.1.x快速入门(一)
2009-12-23 17:21 1225------------------------------- ... -
Hibernate常见集合映射(Set,List Array,Map,Bag)
2009-12-06 14:42 3743Hibernate常见的集合映射主要有Set,List,Arr ...
相关推荐
#### 四、搭建Struts2.1项目 1. **准备项目所需文件** - 解压Struts2-blank-2.1.6.war - 复制lib目录下的jar文件至项目lib目录 - 需要除junit和spring-test之外的所有文件 - commons-io的jar包用于文件上传和...
- **docs**:包含了Struts2的相关文档,包括快速入门指南、详细文档以及API文档等。 - **lib**:包含了Struts2框架的核心库及第三方插件库。 - **src**:包含了Struts2框架的源代码。 ##### 2.2 必备JAR包 为了在...
- **框架应用**:掌握Struts1.x/Struts2.x、Spring、Hibernate等流行框架的使用方法。 - **高级主题**:深入学习搜索引擎Lucene、工作流JBPM、WebService、单点登录等高级主题。 - **新兴技术**:学习Hadoop等大数据...
### WebWork快速入门知识点 #### 一、WebWork框架简介 **WebWork**是一个由OpenSymphony组织开发的Java Web应用框架,它采用MVC(Model-View-Controller)架构模式,强调组件化和代码重用。WebWork的最新版本为2.1...
5. 《Struts 2.1 权威指南》:学习 Struts2 的一本国人写的不错的书。 6. 《Maven 实践》:从 Ant 到 Maven 现在是大势所趋,学习 Maven 是必备的。 7. 《expert one-on-one J2EE Development without EJB中文版》:...
13. **Struts 2.1**:讲解了Struts 2框架的使用,包括控制器、视图和模型的构建,适合Web应用开发的学习者。 14. **Maven实战**:介绍Maven构建工具的使用,对比Ant,阐述了Maven的项目管理和依赖管理优势。 以上...
- 在Spring 4.x中,官方提供了更多的教程和示例来帮助开发者快速上手。 **3.2 删除过时的包和方法** - 为了保持框架的简洁性和高效性,Spring 4.x移除了许多过时的包和方法。 **3.3 支持Java 8** - Spring 4.x...
2.1 3.x模板教程之上传资源:JEECMS提供了便捷的资源上传功能,允许用户上传图片、文档等媒体资源,用于网站内容的展示。 2.2 创建资源:通过后台管理界面,可以创建各种类型的内容资源,包括文章、产品、新闻等,...
5. **《Struts 2.1权威指南》** - **简介**: Struts 2是Java Web应用开发中常用的MVC框架之一,本书详细介绍了Struts 2的配置、组件和最佳实践等内容。 6. **《Maven实战》** - **简介**: Maven是Java项目构建...
- **目的**: 通过简单的HelloWorld示例快速入门WebWork。 - **步骤**: - 创建Web项目。 - 添加WebWork的依赖库至项目中。 - 配置`web.xml`文件, 注册Servlet控制器。 - 定义Action类, 实现业务逻辑。 - 配置`...
6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...
6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...
2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 Gradle存储库 23 使用Spring 4.0.x和Gradle 24 2.4.3项目模块 25 ...
- **《Struts2.1权威指南》** 星级:★★★★☆ 适合对象:初级,中级 Struts2是一个用于构建Web应用程序的强大框架,本书详细介绍了其最新版本的功能和用法。 - **《Maven实践》** 星级:★★★★☆ ...
**3.2 从Dozer 1.x迁移到2.x** 由于版本更新可能会引入不兼容的变更,因此文档中提供了一套详细的迁移指南,帮助开发者顺利过渡到新版本。 总结起来,Dozer是一款非常实用的Java Bean映射工具,通过丰富的配置选项...
**2.1 流式输入输出概述** - **概念**:流是一种数据传输方式,用于读写文件或网络数据。 - **分类**: - 字节流:处理二进制数据; - 字符流:处理文本数据。 **2.2 字节流** **2.2.1 基本字节流** - **常用类*...