- 浏览: 632741 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
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 4470掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在 ... -
TOMCAT指定JDK
2010-01-14 17:13 2361在windows环境下以批处理文件方式启动tomcat,只要运 ... -
Struts2的国际化
2010-01-01 11:30 1124Struts2国际化分为三类: ... -
总结Struts2的经典输入校验
2009-12-30 16:59 20741,输入校验介绍 Struts2提供了功能强大的输入校验机制 ... -
浅谈Struts2的内建校验器
2009-12-30 16:16 1268Struts2已经为我们准备了一些内建校验器,我们可以直接使用 ... -
Struts2输入校验
2009-12-30 16:12 1579struts2的输入校验针对输入进行业务规则的校验,譬如是否必 ... -
Struts2拦截器原理
2009-12-27 21:02 33001. 什么是拦截器 拦截器,在AOP(Aspect-O ... -
Struts2多文件上传
2009-12-27 17:36 1355Struts2也可以很方便地实现多文件上传。 在输入表 ... -
Struts2文件上传
2009-12-27 16:52 14881.文件上传原理 表单元素的enctype属性指定 ... -
Struts2 访问request、session和application对象
2009-12-27 15:28 3786在传统的Web开发中,经常会用到Servlet API中的Ht ... -
Struts2类型转换
2009-12-26 23:01 1645一、 struts2类型转换一 1、struts2的类型转 ... -
Struts2请求参数的接收
2009-12-26 22:24 15841)--采用基本类型接收请求参数(get/post) ... -
Struts2动态方法调用
2009-12-26 16:48 4462Struts2支持动态方法调用,它指的是一 ... -
Struts2指定多个配置文件
2009-12-26 15:50 2829如果配置文件struts.xml的内容太多,或者是 ... -
Struts2命名空间
2009-12-26 15:24 1581Struts.xml命名空间规则 包的na ... -
Struts2框架的处理流程
2009-12-26 15:07 42221. Struts2架构图 请求首先通过F ... -
Struts2的常量详解
2009-12-26 11:43 3405通常struts2加载struts2常 ... -
HTML form包含的元素
2009-12-25 17:01 1735HTML form elements Object ... -
Struts2.1.x快速入门(一)
2009-12-23 17:21 1185------------------------------- ... -
Hibernate常见集合映射(Set,List Array,Map,Bag)
2009-12-06 14:42 3688Hibernate常见的集合映射主要有Set,List,Arr ...
相关推荐
struts2.1.8.1+hibernate3.5.2+spring3.0.0包整合之struts2.1.8.1
struts-2.1.8.1的全部jar包struts-2.1.8.1的全部jar包struts-2.1.8.1的全部jar包
Struts2.1.zip Struts2.1.zip Struts2.1.zip Struts2.1.chm.zip
struts-2.1.8.1+xwork-2.1.6源码
内有 struts-2.0.dtd struts-2.1.dtd struts-2.1.7dtd struts-2.3dtd
struts2.1.8.1-API.chm 方便实用,支持索引,提高工作效率 与大伙分享 struts2.2.1 api http://download.csdn.net/source/2823511
struts2.1.8.1-API.rar
最新版本的struts2-core-2.1.8.1和xwork-core-2.1.6的jar包
Struts 2.1.8.1 API DOC 开发的必备工具之一
struts-2.1.8.1最新最全jar包
Struts2.1.8.1和Struts2.2.1.1帮助文档 要中文帮助文档 就闪吧 学最新的技术 哪来的中文资料 只有英语够牛B 才能站在技术的前端
jquery和struts2结合使用的jar包
关于Struts2.1.8.1时间控件乱码的解决,有文档,有源码
struts-2.1.8.1-lib-src.zip
Struts2.1.8.1+Hibernate3+Spring
struts2.1.8.1_doc_api.chm 这是我自己做的自己用的 好不好,下了用一下就知道了 好的话,请顶. 不好请踩!
struts.非常完整的包,所需要的都在地面。本人整理好了,希望对大家有帮助。
Apache Struts Copyright 2000-2007 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Dojo (http://dojotoolkit.org/). ...
struts2.1.8.1+jquery1.4.2返回json数据.pdf