用Struts2很长时间,关于配置文件struts.xml中通配符的使用还是第一次真正用在项目中(可能之前都是一些小项目吧)。对于它的使用还真是现在才明白一些,以一个简单的例子做示范. 在一个普通的小型项目中可能会,写很多个配置文件,然后include进struts.xml文件中,这是没有通配符的时候的用法。 对于一个比较大的项目来说,从项目本身的庞大性、项目开发人员的编码及开发风格的等的不同性,再加上项目后期的维护性,如果也是通过为每一个模块(或功能)写这样的配置文件,可以想象一下,从项目开始到项目进入维护阶段,需要些多少个配置文件,而且随着项目功能的逐渐完善,这一过程能保证我们的配置文件是一成不变,能保证每个人在配置文件上不出一点差错吗......所以,在大的项目上,经理都会采用通配符来约定开发模式,规定项目成员必须要怎么配置从而达到简化配置、节约时间的目的。 //可以通过传过来的url访问路径,来确定类名及方法 <action name=""*/*/*"" method=""{3}"" class=""com.company.xxx.{1}.action.{2}Action""></action> <result name=""suc"" type=""direct"">/{3}.jsp</result> 例如,根据上面的通配符的规定,传一个 " system/user/login.do " 时,这时会这样匹配===> 1、name中的第一个 "* " 匹配class所在的包,第二个 "* " 匹配class中的指定Action,因此,完整的class = "com.company.xxx.system.action.userAction" 2、而第三个 "* " 则匹配 method 和 result中返回的页面, 因此 ,完整的 method="login" ,result标签中返回的页面是 /login.jsp 这样使用通配符,那么在项目的过程中,就不用为每一个action配置了,开发人员只需要按照这样的格式给定就可以访问到,减少了很多配置工作。在使用通配符时要注意的几点: a、name属性中使用多个通配符时,不能将多个 " * " 号不加分割的放在一起,因为struts2不知道怎样划分每个星号。 因此,使用多个 "*" 时一定要有一个分隔符, "/" 或 "_"(如user_login.do) 都可以。 b、与通配符匹配的值可以用记号{n}来访问,n是1~9的整数,第一个(*)星号就是{1},第二个就是{2},依次类推;注意当用{0}表示时代表整个请求url 【如某个url是login.do(*/*这样的匹配),而返回页面就可以这样{0}.jsp,最后返回的页面就应该是login.jsp】 c、对于struts2中使用通配符和不使用,二者在请求原理上还是不同的。 当用户给出一条url了以后,struts2首先会遍历通配符以外所有的请求配置,如果找到对应匹配的url则直接进入对应的action 如果未找到,才会去遍历通配符,若有与通配符相匹配的,再进入到此匹配的action。 所以,使用通配符的要比未使用通配符的要慢。