Struts2.0实现零配置..自己学习看看

自从ror热潮席卷web开发界以来,惯例优于配置的快速开发理念便深入人心。

struts2中对action name支持通配符配置,所以使其方便的实现零配置成为可能。

实现零配置后的开发会是怎样,开发员不用配置struts.xml,也不用在action代码中写annotation,是真正干净的零配置。以下的代码是我们希望达到的效果。
action示例
package net.jacker.ww.sys;

public class UserAction extends BaseAction {


 
    public String execute() throws Exception {
        
         return "default"; 
         // default表示使用缺省页面,路径名和action所在包和类名相关,为 /sys/User.jsp
    }

    public String roles(){
       
        return view("/sys/UserRoles"); // 指定展示页面为 /sys/UserRoles.jsp
    }


    public String xxxx(){
      
       return redirect("/sys/User.do"); // 重定向,url为 /sys/User.do
   
    }




}

以上action的三个方法无需配置,将可以分别用以下链接进行访问:
http://localhost:8080/sys/User.do
http://localhost:8080/sys/User!roles.do
http://localhost:8080/sys/User!xxxx.do(将重定向到User.do)


下面我们来看看以上零配置是如何做到的。
首先,我们需要在struts.xml中做如下的配置。
<struts>
    <constant name="struts.enable.SlashesInActionNames" value="true" /> <!-- action名可以有'/'字符 -->
    <constant name="struts.action.extension" value="do"/> <!-- .do为访问扩展名 -->

  <package name="default" extends="struts-default">
 
  <!-- 通配符配置,匹配所有的URL对action的访问 -->
    <action name="*/*!*" class="net.jacker.ww.{1}.{2}Action" method="{3}">
      <result name="default" type="dispatcher">/{1}/{2}.jsp</result>
      <result name="view" type="dispatcher">${viewpath}.jsp</result>
      <result name="redirect" type="redirect">${viewpath}</result>
    </action>
    <action name="*/*" class="net.jacker.ww.{1}.{2}Action">
      <result name="default" type="dispatcher">/{1}/{2}.jsp</result>
      <result name="view" type="dispatcher">${viewpath}.jsp</result>
      <result name="redirect" type="redirect">${viewpath}</result>
    </action>
  </package>

</struts>


然后是写一个Action基类,BaseAction.java
package net.jacker.ww;

import com.opensymphony.xwork2.Action;


public abstract class BaseAction implements Action{

   

    String viewpath; //该属性会在struts.xml中用到

    public String view(String vpath){
        viewpath = vpath;
        return "view";
    }

    public String redirect(String vpath){
        viewpath = vpath;
        return "redirect";
    }


    public String getViewpath() {
        return viewpath;
    }

   

}

做好以上的基础工作,你的action类只要继承BaseAction,符合XxxAction的命名规则,放到对应的包下,页面也放到对应的路径,就可以无需配置而访问了。

如果要替换view层也很简单,只要对struts.xml做简单修改,比如:

<result name="default" type="dispatcher">/{1}/{2}.jsp</result>

改为

<result name="default" type="velocity">/{1}/{2}.vtl</result>

修改后的struts将统一使用velocity模板取代jsp作为页面展示层。

注意:
实测后发现,以上零配置的做法只在struts2.0.11版本中可以使用,在struts2.0.XX的更高版本中却未能获通过,这不能不说是个遗憾。

你可能感兴趣的:(xml,.net,jsp,struts,velocity)