struts2的通配符使用以及路径问题浅析

相信大家一定学习过国际化,熟悉国际化的同学们可能都知道占位符。那么在struts2中,也有类似这种的体现,那就是通配符。下面就来看看它的使用吧~

使用通配符定义action

源代码

<package name="itcast" namespace="/test" extends="struts-default">
	<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
		<result name="success">/WEB-INF/page/hello.jsp</result>
	</action>
</package>


<package name="itcast" namespace="/test" extends="struts-default">
	<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
		<result name="success">/WEB-INF/page/hello.jsp</result>
	</action>
</package>
public class HelloWorldAction{
	private String message;
	....
	public String execute() throws Exception{
		this.message = "我的第一个struts2应用";
		return "success";
	}
	
	public String other() throws Exception{
		this.message = "第二个方法";
		return "success";
	}
}

补充:
        要访问other()方法,可以通过这样的URL访问:http://localhost:8080/(项目名)/test/helloworld_other.action

其他:   

  • 使用通配符,将配置量降到最低
  • 不过,一定要遵守"约定优于配置"的原则
<action name=“*” class=“com.ambow.struts2.action.{1}Action” method=“add”></action>

   
   
    • 
             
             
      同时,struts2还支持*/*的配置模式,在配置文件中<struts>节点下配置如下:
        
        
    <constant name="struts.enable.SlashesInActionNames" value="true"></constant>
    
    则以上配置可改写为:
    <action name=“*/*” class=“com.ambow.struts2.action.{1}Action” method=“{2}”></action>
    
    • 其中第一个“*”映射到具体的某个action类,第二个“*”映射到该类的方法。不过这里要注意的name=“*/*”,在为action取名时,默认情况下在名字中是不允许出现 斜杠 (/)的。如果想在名字中使用 斜杠 (/),就需要在struts.xml文件中通过指定:
      <constant name=“struts.enable.SlashesInActionNames” value=“true” />
      

      来打开这个功能。其实这样做还挺麻烦的,只要把actionname写成“*_*”就不存在斜杠问题了:

      如:
    <action name=“*_*” class=“com.ambow.struts2.action.{1}Action” method=“{2}”></action>
    
    Struts2中的路径问题
    1. Struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
    2. 虽然可以用redirect方式解决,但redirect方式并非必要。
    3. 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextPath()方式来拿到webapp的路径)
    4. 或者指定basePath


    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值