首页 > 代码库 > Action开发、通配符、路径问题和struts中常量用法

Action开发、通配符、路径问题和struts中常量用法

1、action开发

开发的几种方式

 (1)、继承自ActionSupport,(如果用struts的数据效验功,能必须必须使用此功能,因为ActionSupport实现了数据效验的接口)

public class UserAction extends ActionSupport{}

 (2)、实现Action接口,该接口的内容如下。(有五个常量和一个方法)

pubic interface Action{
   public static final String success="success";
   public static final String NONE="none";
   public static final String INPUT="input";
   public static final String LOGIN="login";
   public Strng execute() throws Exception;       
}

 (3)、不实现任何类,也不继承任何接口。

public class UserAction3{
	//action 中业务处理方法
	public String login(){
		System.out.println("UserAction Log(3)!");
		return "success";
	}
	
}

 2、访问通配符

在struts的配置信息中可以用*代表与{1}来优化

刚开始的时候是这样写的

<struts>
    <package name="config" namespace="/" extends="struts-default">
    	<action name="login" class="com.gqx.a_test.UserAction" method="login">
    		<result name="success">/index.jsp</result>
    	</action>
    	<action name="register" class="com.gqx.a_test.UserAction" method="register">
    		<result name="success">/index.jsp</result>
    	</action>  	
    </package>  
</struts>

现在可以使用通配符去优化

<!-- 使用通配符去优化 -->
    	<action name="user_*" class="com.gqx.a_test.UserAction" method="{1}">
    		<result name="success">/index.jsp</result>
    	</action>

 结果如下图

技术分享技术分享


现在当在action中返回字符串的结果不相同的时候,可以这样写

public class UserAction extends ActionSupport  {
	//action 中业务处理方法
	public String login(){
		System.out.println("UserAction Log()!");
		return "login";
	}
	public String register(){
		System.out.println("UserAction Register()!");
		return "register";
	}
}

同时返回的jsp页面不同,这个时候可以这样去配置struct.xml

    <action name="user_*" class="com.gqx.a_test.UserAction" method="{1}">
    		<result name="{1}">/{1}.jsp</result>
    	</action>

 结果如图:

技术分享

3、struts中路径匹配原则

 一般的默认namespace="/",当你改成

 <package name="config" namespace="/user" extends="struts-default">
    ......
 </package> 

 就需要访问这个路径http://localhost:8080/Struts_Study/user/user_register

 技术分享

这时候你还可以这样访问http://localhost:8080/Struts_Study/user/a/b/user_register,结果是正常的

但是这样就不行了 http://localhost:8080/Struts_Study/a/b/user/user_register

究其原因是因为当用户在地址栏输入http://localhost:8080/Struts_Study/user/a/b/user_register,回车后

在服务器Tomcat端

  localhost             找到访问那一台机器

  8080              根据端口号,找到tomcat

  Struts_Study          找到项目名称

  /user/a/b          寻找是否有这个名称空间,没找到,继续向下(找到就返回)

  /user/a           寻找是否有这个名称空间,没找到,继续向下(找到就返回)

  /user            寻找是否有这个名称空间,没找到,继续向下(找到就返回)

  /               默认命名空间,还没有找到,报错

 

  


 

常量

struts中默认访问后缀

  在struts1中是do,在struts2中是action(以下都可以)

技术分享技术分享

 那么如何修改默认访问的后缀

struts2的默认后缀在struts-core-2.3.4-1/org.apache.struts/default.properties中有如下代码

struts.action.extension=action,,

 在struts中通过常量去修改

<!-- 全局配置 -->
	<!-- 修改struts默认的访问后缀 -->
	<constant name="struts.action.extension" value="http://www.mamicode.com/action,do,,"></constant>

 指定访问后缀为do,action或没有都可以

当 value="http://www.mamicode.com/action,do"     访问后缀只能是action或do

当 value="http://www.mamicode.com/action"  访问后缀只能是action

 

Action开发、通配符、路径问题和struts中常量用法