`
yulon
  • 浏览: 116555 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

struts2.1两天快速入门(第一天下午)

阅读更多

第一天下午学习目录列表:

        六、Struts2的处理流程与Action的管理方式

        七、动态方法调用和使用通配符定义action

        八、自定义类型转换器

        九、自定义拦截器

        十、文件上传(改成一个专题来讲)

 

六、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";
	}

    如果要访问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的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;
	}

      然后:定义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;
		}
}

 

    第二种方式是继承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);
	}
}

    知识提示:查找StrutsTypeConverter的源码发现,它本身也继承了DefaultTypeConverter类.StrutsTypeConverter类使用的一种设计模式是模板方法设计模式,在http://yulon.iteye.com/admin/blogs/550501这里有讲到模板方法模式在项目中的应用.

 

        最后,配置要使用该转换器的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://yulon.iteye.com/admin/blogs/551982(struts2.1两天快速入门(第一天上午))

  • 大小: 40.6 KB
分享到:
评论
36 楼 free_zk 2010-01-06  
支持LZ,继续加油!!!
35 楼 明天的昨天 2010-01-05  
楼主 抓紧时间继续放送了
我们都很期待
34 楼 yfnok 2010-01-04  
lz繼續啊,寫的太好了
33 楼 yulon 2010-01-02  
明天的昨天 写道
yulon 写道
明天的昨天 写道
感觉好像是 传智的视频内容
楼主是 黎活明老师??

这位兄台好眼力,黎老师讲的视频确实值得大家去学习一下!这些是我结合黎老师视频讲的内容和自己的一些扩展,当总结一下自己的学习心得与大家共享!比如:定义转换器的方式不只一种,还有里面包含的思想.


你总结的很好


当我在配置
<constant name="struts.action.extension" value="do,action"></constant>之后

访问就必须http://localhost:81/struts2/control/department/list.do 加do或action后缀
不加后缀就会报错

好的办法应该这样写
<constant name="struts.action.extension" value="do,action,,"></constant>


不错
32 楼 明天的昨天 2010-01-02  
yulon 写道
明天的昨天 写道
感觉好像是 传智的视频内容
楼主是 黎活明老师??

这位兄台好眼力,黎老师讲的视频确实值得大家去学习一下!这些是我结合黎老师视频讲的内容和自己的一些扩展,当总结一下自己的学习心得与大家共享!比如:定义转换器的方式不只一种,还有里面包含的思想.


你总结的很好


当我在配置
<constant name="struts.action.extension" value="do,action"></constant>之后

访问就必须http://localhost:81/struts2/control/department/list.do 加do或action后缀
不加后缀就会报错

好的办法应该这样写
<constant name="struts.action.extension" value="do,action,,"></constant>
31 楼 yulon 2010-01-02  
明天的昨天 写道
感觉好像是 传智的视频内容
楼主是 黎活明老师??

这位兄台好眼力,黎老师讲的视频确实值得大家去学习一下!这些是我结合黎老师视频讲的内容和自己的一些扩展,当总结一下自己的学习心得与大家共享!比如:定义转换器的方式不只一种,还有里面包含的思想.
30 楼 明天的昨天 2010-01-01  
感觉好像是 传智的视频内容
楼主是 黎活明老师??
29 楼 kenvie84 2009-12-31  
学习了,多谢分享!
28 楼 T我们的爱T 2009-12-31  
这个帖子发的好规范噢!!
27 楼 2009Chenyanrong 2009-12-23  
楼主好厉害,看了之后学习了。多谢哦。。
26 楼 kuchaguangjie 2009-12-23  
楼主乍看蛮可爱嘛。。。
25 楼 wander312 2009-12-23  
被忽悠了, LZ明显是个男的.
24 楼 记忆无泪 2009-12-23  
光线暗了看得不是很清晰 等下看看lz的文章 呵呵
23 楼 black.angel 2009-12-23  
很好的文章,虽然我主要是前端开发,偶尔还是搞搞J2EE的,这文章收藏了。
22 楼 tianxin_008883 2009-12-23  
当初花俩星期搞定的东西,给你两天给搞定了
21 楼 yuxiaojicai 2009-12-22  
不错不错 多多学习
20 楼 caiwenhn2008 2009-12-22  
用个女人头像不见得就是女人吧。。。
19 楼 海阔天空love 2009-12-22  
不知美女下一贴啥时发啊???等着看呢。。哈哈哈。。。
18 楼 海阔天空love 2009-12-22  
好。学习了。美女的这关于struts2的一系列帖子都是学习的好贴啊。。。
17 楼 vieri122 2009-12-22  
楼主的头像是本人吗?

相关推荐

    Struts2.1权威指南——基于WebWork核心的MVC开发.zip

    《Struts 2.1权威指南》特点为:1.经验丰富,针对性强 《Struts 2.1权威指南》凝聚了作者大量的实际开发经验和感悟。作者依照读者的学习规律,首先介绍基本概念和基本操作,然后对内容进行深入讲解。 2.讲解具体,...

    Struts2.1 源码+开发包(项目依赖库)

    Struts2.1源码+Struts2.1依赖库(jar包)

    struts2.1完整jar包

    struts2.1完整jar包。内容齐全。

    struts2.1 jar包

    struts2.1在tomcat下载的包总是报错,根据tomcat官方解释修改后无任何错误,并且已经运行

    Struts2.1权威指南2

    Struts2.1权威指南 李刚的著作 共四个部分 用7-zip解压

    struts2.0升级到struts2.1的工具

    struts2.0升级到struts2.1的工具,自动修改配置文件和页面

    Struts2.1的jar包

    Struts2.1的jar包

    Struts 2.1 权威指南 part13 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part04 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part01 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part02 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part06 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part03 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part05 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part11 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part12 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part10 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part09 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part07 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts 2.1 权威指南 part08 pdf

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

Global site tag (gtag.js) - Google Analytics