2012年12月26日
Struts2 学习 第6part 通配符配置*_*
从这一part我们可以学到“约定高于配置”这个原则。
项目例子:Struts2_ActionWildCard
首先我们还是来看看这个项目的strust.xml配置文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="true" />
- <package name="actions" extends="struts-default" namespace="/actions">
- <action name="Student*" class="com.wwj.struts2.action.StudentAction" method="{1}">
- <result>/Student{1}_success.jsp</result>
- </action>
- <action name="*_*" class="com.wwj.struts2.action.{1}Action" method="{2}">
- <result>/{1}_{2}_success.jsp</result>
- <!-- {0}_success.jsp -->
- </action>
- </package>
- </struts>
我贴这段代码的时候,忍不住惊喜,为什么呢,因为小巫感觉编程真的太奇妙了,尤其是自己学会一个知识点之后。废话不多说:解析一下这个配置文件吧:
命名空间:/actions
两个action:Student*、*_*
action对应的类文件:StudentAction,{1}Action
action对应的方法:{1},{2}
result:Student{1}_success.jsp, {1}_{2}_success.jsp
看到以上的配置文件,有童鞋可能会叫喧着:我靠,这都是些什么东西啊。Struts2太难了,我不学了。,蛮有趣的一件事情,刚开始的时候,小巫也蒙了一下,后来坚持听完尚学堂的视频,我感觉自己懂了。
先看一下效果,在继续解释吧:
键入:http://localhost:8080/Strut2_ActionWildcard/
显示该页面的jsp文件:index.jsp
- <?xml version="1.0" encoding="utf-8" ?>
- <%@ page language="java" contentType="text/html; charset=GB18030"
- pageEncoding="utf-8"%>
- <%
- String context = request.getContextPath();
- %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
- <title>Insert title here</title>
- </head>
- <body>
- 使用通配符,将配置量降到最低
- <br />
- <a href="<%=context%>/actions/Studentadd">添加学生</a>
- <a href="<%=context%>/actions/Studentdelete">删除学生</a>
- <br />
- 不过,一定要遵守"约定优于配置"的原则
- <br />
- <a href="<%=context%>/actions/Teacher_add">添加老师</a>
- <a href="<%=context%>/actions/Teacher_delete">删除老师</a>
- <a href="<%=context%>/actions/Course_add">添加课程</a>
- <a href="<%=context%>/actions/Course_delete">删除课程</a>
- </body>
- </html>
从jsp文件可以看到一些约定,比如Studentadd和Studentdelete,都有Student这样的前缀。我们再回到Struts.xml文件看看,Student*这个Action,发现了没?,*号代表的是什么?代表的是所有的字符串匹配,这里匹配的字符串是add和delete。然而method={1}表示的是什么?表示的是第一个通配符匹配的字符串代表的方法。
再来看看第二个Action:*_*,这个看起来像笑脸,配置能简化到这种程度,我都不知道说什么好了。同样的,两个*号,都是代表所有的字符串匹配,第一*代表第一个字符串匹配,第二个*代表第二个字符串匹配。method={2}代表第二个字符串匹配所代表的方法。
再来看看result:{1}_{2}_success.jsp. 这下子,应该可以明白了,只要我们约定好这些通配符所代表的是什么东西,我们配置的时候会非常方便。
比如:/actions/Teacher_add会跳转到Teacher_add_success.jsp这个页面
/action/Course_add会跳转到 Course_add_success.jsp这个页面
给大家看一下整个项目的文件吧:
通过上面的介绍,不知道大家对我所说的“约定大于配置”有什么样的体会了,马士兵老师说,真正的项目开发一定是这样的,一个成熟的项目组都会有相应的约定。这是项目经理要做的事情。小巫还是学生,体会并不深刻,照目前的这种水平是不能胜任项目经理的。不过我会朝这个方向继续努力。