温故知新:struts2_02请求和处理的映射

请求和处理的映射,也就是常说的action和url之间的关系,struts2提供了很多种方式来配置他们之间的映射,01中提到的struts.xml配置
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6 
 7    <constant name="struts.action.extension" value="action,," /><!-- 请求后缀名-->  
 8    <package name="helloworld" extends="struts-default" namespace="/"><!-- struts-default这个包是一定要继承的,否则struts很多重要功能会失效-->
 9       <action name="hello" <!-- action的名称,namespace的值连接/hello表示请求该action  -->
10             class="demo.action.HelloWorld"><!-- class表示该action的位置,在action的配置中,如果不指定调用哪个方法,则默认调用execute方法  -->
11             <result name="success">/helloWorld.jsp</result><!-- action的返回结果,以及相应的视图  -->
12       </action>
13    </package>
14 
15 </struts>
就是一种方式。这个配置中,就已经能很明显的看出action和url之间的关系,只是这段配置没有指明具体调用action中的哪个方法,所有默认调用了execute方法,虽然比较笨拙,但是这可以记为配置映射的第一个方法。需要特别一提的是struts.action.extension配置,它代表了action的后缀名,逗号隔开。也就是说,它指定了哪些结尾的请求为struts请求,默认是action和空结尾的请求。

方法一:
一个action只对应一个请求,默认调用execute方法,这样,为了满足业务需求,package中就会出现大量的action配置。实际开发中,除非这个请求进行的操作非常多,以至于书写的代码几千行,甚至上万行,否则一般不会这么配置,就算真的出现这样的情况,也极有可能和其他配置方式混搭使用,单独使用的比较少。
优点:配置简单明了,而且action中只有一个方法,方便阅读
缺点:会出现大量的action配置,大量的action类

方法二:
为了让一个action能够对应多个请求,可以在方法一的基础上为action的配置添加method属性
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6 
 7    <package name="helloworld" extends="struts-default" namespace="/">
 8       <action name="hello" method="method01"
 9             class="demo.action.HelloWorld">
10             <result name="success">/helloWorld.jsp</result>
11       </action>
12    </package>
13 
14 </struts>
如此一来,action中的method01方法就会对应/hello请求。
优点:可以减少action类的数量
缺点:还是有大量的配置!!

方法三:
这种请求和处理的映射有点类似于将方法名当做参数来传递,struts.xml的配置和方法一一致,无需更改,只是在发送请求的时候需要将请求的方法一并发送,原始的请求是/hello,而连带方法名的请求是/hello!hello,或者还可以写/hello?method:hello(假定Helloworld类中有hello方法),这样一来,就是直接调用hello方法来完成处理。
优点:不仅可以完成一个action和多个请求的映射,还能减少action的配置,仅仅只是额外配置action的result即可
缺点:地址注意不能写错,实际开发中不常用,或许只是看起来请求地址怪怪的。。。但依然是个不错的配置方式

方法四:
基于通配符的映射
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6 
 7    <package name="helloworld" extends="struts-default" namespace="/">
 8       <action name="*_*" 
 9             class="demo.action.{1}action" method="{2}">
10             <result name="success">/{1}/{2}.jsp</result>
11       </action>
12    </package>
13 
14 </struts>
显而易见,任何形式的“XX_XX”请求都会得到映射,{1}代表第一个*的值,{2}代表第二个,以此类推,最主要的是,一定要从action的名称,到action内的方法,直至最后响应视图的位置,都要好好的在请求中写好。基于通配符的配置方式显得十分灵活,但也要求十分的细心,是一种能同时简化action类和配置内容的映射方式。这里要特别提到result的结果,结果可以是struts提供的SUCCESS,ERROR等但不限于这些返回结果,自定义的返回结果只要有对应的相应视图即可。
优点:配置灵活,精简
缺点:配置时要求仔细,使用统一的规则,所谓的“约定优于配置”

实际开发中,根据各个配置方式的优缺点自行选择,配置没有绝对的好坏



posted on 2014-10-30 00:38 都较瘦 阅读(217) 评论(0)  编辑  收藏 所属分类: MVCFramework


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜