2012年12月26日

Struts2 学习 第6part 通配符配置*_*

从这一part我们可以学到“约定高于配置”这个原则。

项目例子:Struts2_ActionWildCard

首先我们还是来看看这个项目的strust.xml配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  5.  
  6. <struts> 
  7.     <constant name="struts.devMode" value="true" /> 
  8.     <package name="actions" extends="struts-default" namespace="/actions"> 
  9.         <action name="Student*" class="com.wwj.struts2.action.StudentAction" method="{1}"> 
  10.             <result>/Student{1}_success.jsp</result> 
  11.         </action> 
  12.           
  13.         <action name="*_*" class="com.wwj.struts2.action.{1}Action" method="{2}"> 
  14.             <result>/{1}_{2}_success.jsp</result> 
  15.             <!-- {0}_success.jsp --> 
  16.         </action> 
  17.     </package> 
  18. </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/

Struts2 学习 第6part 通配符配置*_*_Struts2_02

显示该页面的jsp文件:index.jsp

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <%@ page language="java" contentType="text/html; charset=GB18030" 
  3.     pageEncoding="utf-8"%> 
  4.  
  5. <%  
  6.     String context = request.getContextPath();  
  7. %> 
  8.  
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  10. <html xmlns="http://www.w3.org/1999/xhtml"> 
  11.     <head> 
  12.         <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
  13.         <title>Insert title here</title> 
  14.     </head> 
  15.     <body> 
  16.         使用通配符,将配置量降到最低  
  17.         <br /> 
  18.         <a href="<%=context%>/actions/Studentadd">添加学生</a> 
  19.         <a href="<%=context%>/actions/Studentdelete">删除学生</a> 
  20.         <br /> 
  21.         不过,一定要遵守"约定优于配置"的原则  
  22.         <br /> 
  23.         <a href="<%=context%>/actions/Teacher_add">添加老师</a> 
  24.         <a href="<%=context%>/actions/Teacher_delete">删除老师</a> 
  25.         <a href="<%=context%>/actions/Course_add">添加课程</a> 
  26.         <a href="<%=context%>/actions/Course_delete">删除课程</a> 
  27.  
  28.     </body> 
  29. </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这个页面

 

给大家看一下整个项目的文件吧:

Struts2 学习 第6part 通配符配置*_*_Struts2_04

 

通过上面的介绍,不知道大家对我所说的“约定大于配置”有什么样的体会了,马士兵老师说,真正的项目开发一定是这样的,一个成熟的项目组都会有相应的约定。这是项目经理要做的事情。小巫还是学生,体会并不深刻,照目前的这种水平是不能胜任项目经理的。不过我会朝这个方向继续努力。