首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

struts2:0配置 之 21.2 约定大于配置

2012-07-26 
struts2:零配置 之 21.2 约定大于配置21.2? 约定大于配置21.2.1? 约定大于配置的HelloWorld先来做一个示例

struts2:零配置 之 21.2 约定大于配置
21.2? 约定大于配置21.2.1? 约定大于配置的HelloWorld

先来做一个示例,让大家体会一下什么是约定大于配置。

1:Convention Plugin

从Struts2.1版本起,Struts2官方就推荐使用Convention Plugin替换Codebehind Plugin来实现零配置。相对Codebehind Plugin而言,Convention Plugin有如下一些特点:

通过包的命名习惯来指定Action的位置通过命名习惯来约定Result(包括Jsp、FreeMarker等)的路径类名对应于URL的约定转换包名对应于命名空间的约定转换遵循SEO规范的链接地址,比如:使用test-action来替换TestAction基于注解的Action名称约定基于注解的拦截器约定基于注解的命名空间约定基于注解的XWork包默认action以及默认的Result

等等。总之,使用Convention Plugin来实现零配置,会更灵活、更彻底,基本上可以做到不需要struts.xml来进行配置,甚至不需要注解进行配置,完全由Struts2依靠约定进行自动配置即可。

2:设置环境

要使用Convention Plugin,需要把struts2-convention-plugin-2.1.8.1.jar包拷贝到web工程的WEB-INF\lib包里面。

3:最简单的HelloWorld

要示范零配置,当然首先去掉struts.xml文件,缺省情况下,Convention Plugin会约定所有的结果页面都存放在WEB-INF\content文件夹下。

在WEB-INF文件夹下新建一个content文件夹,然后在content文件夹下新建一个名称为helloworld.jsp的文件,内容示例如下:

?

图21.1? 约定配置示例

4:说明

在这个HelloWorld里面,根本就没有写Action,当然也不存在struts.xml文件,完全是按照Convention Plugin的约定来运行,直接到WEB-INF/content文件夹下面,根据请求的url来找到对应的helloworld.jsp,然后直接运行这个页面就得到了如上的运行结果。

那么对于Convention Plugin来说,到底有哪些约定呢?

21.2.2? 常见的约定

1默认把所有的结果页面都存储在WEB-INF/content文件夹下,这个值可以通过在struts.xml或者struts.properties文件中设置struts.convention.result.path这个属性的值来改变到其他路径。示例如下:

?

图21.2? 示例的包结构

(1)如果要运行HelloWorldAction的话,对应的URL应该为:http://localhost:9080/helloworld/t1/t2/hello-world,而且在content文件夹下应该有t1文件夹,t1文件夹下应该有t2文件夹,t2文件夹下应该有相应的result页面,如下图:

struts2:0配置 之 21.2 约定大于配置

图21.3? t2文件夹示例

像这个示例中,同时存在hello-world-success.jsp和hello-world.jsp,那么会优先匹配到hello-world-success.jsp,如果不存在hello-world-success.jsp才匹配hello-world.jsp。

(2)先看看ConventionAction的实现,示例代码如下:

?

图21.4 content文件夹

如果运行的URL为:http://localhost:9080/helloworld/convention?userId=22,那么会匹配到ConventionAction这个类,运行结束后,返回success。接下来到content文件夹下去优先匹配到convention-success.jsp,然后运行这个页面,展示给用户。

如果运行的URL为:http://localhost:9080/helloworld/convention,那么会匹配到ConventionAction这个类,运行结束后,返回toadd。接下来到content文件夹下去优先匹配到convention-toadd.jsp,然后运行这个页面,展示给用户。

如果此时把convention-toadd.jsp文件去掉,然后再次运行,运行的URL同样为:http://localhost:9080/helloworld/convention,那么会匹配到ConventionAction这个类,运行结束后,返回toadd。接下来到content文件夹下去寻找匹配的页面,没有能匹配上的,那么就会到ConventionAction这个类的同包下,寻找是否有ConventionToaddAction这个类,有这个类,那么就会运行这个类,相当于是Action链了。

热点排行