Struts2——配置

一、通配符

参考:https://mp.weixin.qq.com/s/IwmSBorQlTefcGF1Qi9zwA
作用:简化代码。
PrivilegeAction.java

public class PrivilegeAction extends ActionSupport {
    public String login() {
        System.out.println("我是登陆");
        return "success";
    }
    public String register() {
        System.out.println("我是注册");
        return "success";
    }
}

未使用通配符时:

<action name="login" class="privilegeaction.PrivilegeAction" method="login">
  <result name="success">/index.jsp</result>
</action>

<action name="register" class="privilegeaction.PrivilegeAction" method="register">
  <result name="success">/index.jsp</result>
</action>

使用通配符时:

<package name="privilige" extends="struts-default">
    <action name="privilege_*" class="privilegeaction.PrivilegeAction" method="{1}">
        <result name="success">/index.jsp</result>
    </action>
</package>

访问URL
1、localhost:8080/privilege_login
2、localhost:8080/privilege_register

二、Struts中路径的匹配原则

2.1 通常情况

有时候,若在package节点中指定namespace名称空间,则在访问对应的资源名称时,就需要在前面加入相对应名称空间的值。
名称空间的值为“/user”

<package name="privilige" extends="struts-default" namespace="/user">
    <action name="privilege_*" class="privilegeaction.PrivilegeAction" method="{1}">
        <result name="success">/index.jsp</result>
    </action>
</package>

访问URL:localhost:8080/user/privilege_login。

2.2 匹配原则

1、在名称空间和资源路径的中间可添加任意的路径。
访问URL:localhost:8080/user/a/b/c/privilege_login。访问成功。
2、不能在名称空间之前加入不存在的路径。
访问URL:localhost:8080/a/user/aprivilege_login。访问失败。

2.3 访问顺序

http://localhost:8080/user/a/a/privilege_login:
1、Struts会把请求的资源路径拿到,也就是privilege_login。
2、看看有没有/user/a/a这个名称空间;若有,就返回结果
——若没有,就看看有没有/user/a这个名称空间;若有,就返回结果
——若没有,再看看有没有/user这个名称空间;若有,就返回结果
3、直到最后,如果都没有找到,就报错!

三、Struts常量

3.1 修改默认访问路径

Struts2默认的访问后缀是.action
如:http://localhost:8080/user/a/a/privilege_login.action:

<struts>
	<constant name="struts.action.extension" value="action"/>
	<!-- value = "action",URL后缀一定要写action。-->
	<!-- 即http://localhost:8080/user/a/a/privilege_login.action -->
	<!-- value = "action,do,",URL后缀可以是action,可以是do,也可以不写。= -->
	<!-- 即http://localhost:8080/user/a/a/privilege_login.do -->
	<!-- value = "action,,",URL后缀可以是action,可以不写。= -->
	<!-- 即http://localhost:8080/user/a/a/privilege_login -->
</struts>

3.2 Struts常用的常量

在这里插入图片描述
动态方法调用
1、在action节点不配置method属性

<package name="privilige" extends="struts-default" namespace="/user">
    <!-- <action name="privilege_*" class="privilegeaction.PrivilegeAction" method="{1}"> -->
    <!-- 没有配置method属性 -->
    <action name="login" class="privilegeaction.PrivilegeAction">
        <result name="success">/index.jsp</result>
    </action>
</package>

2、在地址栏使用资源名称!方法名的方式去调用业务方法
如:http://localhost:8080/user/login!login:
资源名称 + ! + 方法名

四、跳转全局视图

4.1 提出问题

PrivilegeAction.java

public class PrivilegeAction extends ActionSupport {
    public String login() {
        System.out.println("我是登陆");
        return "success";
    }
    public String register() {
        System.out.println("我是注册");
        return "success";
    }
}

CategoryAction.java

public class CategoryAction extends ActionSupport {
    public String add() {
        System.out.println("我是添加");
        return "success";
    }
    public String find() {
        System.out.println("我是查找");
        return "success";
    }
}

struts.xml

<action name="privilege_*" class="privilegeaction.PrivilegeAction" method="{1}">
	<result name="success">/index.jsp</result>
</action>
<action name="category_*" class="privilegeaction.CategoryAction" method="{1}">
	<result name="success">/index.jsp</result>
</action>

提出问题:result标签的属性值及标签体内容相同,是否可以合并,达到简化代码的目的?
解决方案:使用跳转全局视图

4.2 解决问题

struts.xml

<package name="privilige" extends="struts-default" >
    <global-results>
        <result name="success">/index.jsp</result>
    </global-results>
    <action name="privilege_*" class="privilegeaction.PrivilegeAction" method="{1}">
    </action>
    <action name="category_*" class="privilegeaction.CategoryAction" method="{1}">
    </action>
</package>

五、Action节点中的默认配置

5.1 相对完整的action节点

<action name="privilege_*" class="privilegeaction.PrivilegeAction" method="{1}">
</action>

5.2 省略method属性

<action name="privilege" class="privilegeaction.PrivilegeAction">
</action>

不写method的话,默认执行的是execute()方法。execute()方法默认返回值是SUCCESS

public class BBAtion extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("我是execute()");
        return SUCCESS;
    }
}

5.2 省略class属性

<!-- 什么情况不配置class? 即处理的aciton -->
<!-- 答案: 当只是需要跳转到WEB-INF下资源的时候。 -->
<action name="test2">
	<result name="success" >/WEB-INF/index.jsp</result>
</action>

不写class,class默认执行的action在struts-default有配置< default-class-ref class=“com.opensymphony.xwork2.ActionSupport” />
类似与Servlet需要跳转到WEB-INF下的资源。Tomcat不允许直接访问WEB-INF资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值