请求和处理的映射,也就是常说的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等但不限于这些返回结果,自定义的返回结果只要有对应的相应视图即可。
优点:配置灵活,精简
缺点:配置时要求仔细,使用统一的规则,所谓的“约定优于配置”
实际开发中,根据各个配置方式的优缺点自行选择,配置没有绝对的好坏