Struts2-Action-4-系列问题(路径、调用Action的自定义方法、通配符)

4.路径设置

Struts中的路径问题是根据action的路径而不是通过jsp的路径来确定,所以尽量不要使用相对路径。虽然可以使用redirect方式解决,但redirect方式非必要。解决的办法非常简单,统一使用绝对路径(在jsp中使用request.getContextPath()方式拿到webapp的路径,或者在jsp的head标签中指定”/>)

说明:如果当前url路径是http://localhost:8080/hello/path/path.action
访问,那么url接下来会访问http://localhost:8080/hello/path/index.jsp(会造成一些问题,因为是相对路径比较麻烦)

访问,那么url接下来会访问http://localhost:8080/index.jsp(因为在jsp中“/”代表站点的跟路径,而不是应用的根路径)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();//  hello
    String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";// http://localhost:8080/hello/
%>
<html>
<head>
    <base href="<%=basePath%>"/>
</head>
<body>
<%--index.jsp的绝对路径是:    http://localhost:8080/hello/index.jsp--%>
<%--下面的三种方法可以访问到  index.jsp--%>

<%--<a href="<%=basePath%>index.jsp">index.jsp</a><br>--%>
<%--<a href="index.jsp">使用默认basePath的index.jsp(当在head标签中配置了base标签后)</a><br>--%>
<a href="<%=path%>/index.jsp">request.getContextPath()的index.jsp</a><br>
<%=path%><br>
<%=basePath%><br>
<h2>pathtest.jsp</h2>
</body>
</html>

5.调用Action的自定义方法
Action执行的时候并不一定要执行execute方法,可以在配置文件中配置method=来指定执行哪个方法,也可以在URL中动态指定(DMI推荐),前者会产生大量的action,不推荐

<!--调用Action的自定义方法-->
   <!--调用Action的自定义方法-->
    <package name="user" namespace="/user" extends="struts-default" >
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <!--第一种:可以忘记  因为有多少方法   就要有多少Action-->
        <!-- http://localhost:8080/hello/user/userAdd -->
        <action name="userAdd" class="com.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>
        <!--第二种:相对于第一种要好  推荐  DMI方式(dynamic method invoke)-->
        <!-- http://localhost:8080/hello/user/user!add -->
        <action name="user" class="com.UserAction" >
            <result>/user_add_success.jsp</result>
        </action>
        <!-- 第三种:通配符-->
    </package>

注意:使用Struts2.5版本DMI时,因为增加了安全性相关内容,要在struts.xml中添加

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
//在相应package中添加
<global-allowed-methods>regex:.*</global-allowed-methods>

6.通配符(wildcard)
使用通配符,将配置量降到最低(需要约定好JSP和ACTION等的命名规则)
不过,一定要遵守“约定优于配置”的原则
通配符的方式比DMI的方式还要优,因为DMI的方式还是要定义多个result对应的jsp名字,而通配符的方式可以用于为jsp命名

如果某个访问action,能和多个name匹配,那么首先匹配最精确的那个(不带通配符的),再匹配次精确的(只要有的均算同一等级,不管几个 ,谁在前面调哪个)

<!-- 通配符  -->
    <package name="actions" extends="struts-default" namespace="/actions">

        <action name="Student_*" class="com.StudentAction" method="{1}">
            <result>/Student_{1}_success.jsp</result>
            <allowed-methods>add</allowed-methods>
        </action>
<!--注意,如果是Struts2.5的话,要在package中添加 <allowed-methods>add</allowed-methods>-->
        <action name="*_*" class="com.{1}Action" method="{2}">
            <result>/{1}_{2}_success.jsp</result>
            <allowed-methods>add</allowed-methods>
        </action>

    </package>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值