Struts2的通配符配置方式[通俗易懂]

Struts2的通配符配置方式[通俗易懂]Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类:以上三种Action的实现方式都可以被struts2框架自动识别,如果你在struts.xml里面配置了一个ac

大家好,又见面了,我是你们的朋友全栈君。

Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类:

  1. 让你的Action类继承自ActionSupport类(项目中最常用这种方式,因为ActionSupport类中定义了很多帮助方法)
  2. 让你的Action类实现Action接口
  3. 使用POJO的方式来实现,只要Action类中有一个返回值为String的execute方法就好了(这种方式使Action类最容易被测试)

以上三种Action的实现方式都可以被struts2框架自动识别,如果你在struts.xml里面配置了一个action块但是没有配置action类的路径,这样框架默认使用ActionSupport来处理请求。

但是在实际使用struts2的过程中我发现了一个问题,一个Action只有一个execute方法来处理一类请求,如果我开发的某块功能有100个不同的请求那我岂不是要写100个Action类,每个类实现一个execute方法,这样虽然满足了一个类一个责任的设计原则,但是会不会造成“类爆炸”?后来看了struts2的文档才知道,其实我们可以使用struts2灵活的通配符配置来达到减少action类的目的:

先来看看一个简单的时序图

Struts2的通配符配置方式[通俗易懂]

请求从这个页面发起,只是简单的两个链接

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="infoadd">ADD INFO</a><br>
<a href="infodel">DEL INFO</a><br>
</body>
</html>

请求的控制转发是在struts.xml里面配置的

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="mypack" extends="struts-default">
        <action name="info*" class="com.stone.struts2.action.MyFirstAction" method="{1}">
            <result>/{1}info.jsp</result>
            <allowed-methods>add,del</allowed-methods>
        </action>
    </package>
</struts>

上面这个XML的配置内容有几点需要注意:

  1. 我开启了struts2的RMI,apache struts基于安全性考虑,RMI默认是关闭的。
  2. 大家看到action name的值跟平常有点不一样,我使用了星号通配符用来匹配JSP中的两个链接:infoadd和infodel, 要配置method=”{1}”, 这样要被调用的method名字就分别是add和del了。
  3. result的JSP页面的名字也可以用通配符来配置,我分别定义了两个JSP,addinfo.jsp和delinfo.jsp,这样正好一一对应。
  4. 注意在struts2.5之后,基于安全性考虑struts2默认开启了SMI,必须显示定义Action中能被请求调用的方法,所以我有配置<allowed-methods>

看看这个Action类

public class MyFirstAction extends ActionSupport {
    
    public String add() {
        return SUCCESS;
    }
    
    public String del() {
        return SUCCESS;
    }
}

这个demo是为了测试struts2的通配符配置,所以两个JSP里面的内容只是返回一句话而已,这里我就不贴出来了,现在看看调用,我点第一个链接:

Struts2的通配符配置方式[通俗易懂]

Struts2的通配符配置方式[通俗易懂]

点第二个链接

Struts2的通配符配置方式[通俗易懂]

由此可见,struts2的通配符配置真的是很灵活很强大滴,这样我们在实际项目开发中可以少写很多Action类并减少很多配置。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154857.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在类中如何使用 Server.MapPath

    在类中如何使用 Server.MapPath直接在类中使用Server.MapPath会出现错误,这是由于类中不能直接使用System.Web.UI.Page的非静态函数造成的。解决方法有两种:方法一、为类增加继承classCFoo:System.Web.UI.Page方法二、利用上下文直接使用System.Web.HttpContext.Current.Server.MapPath在使用方法一时请注意:C#中,派生类只能从一个类中继承。方法二中,System.Web.HttpContext.Current中System.Web是

    2022年7月15日
    13
  • mybatisplus basemapper原理(提供两瓶水)

    MybatisPlus为什么提供BaseMapper和IService两个相似CRUD操作的接口?转载自:https://blog.csdn.net/krismile__qh/article/details/99590872熟悉mybatis-plus的人都知道,mybatis-plus提供两种包含预定义增删改查操作的接口:com.baomidou.mybatisplus.core…

    2022年4月12日
    316
  • matlab中axis的使用

    matlab中axis的使用%提示disp('该功能练习axis功能');%初始化快捷式数组x=-2*pi:pi/20:2*pi;y=sin(x);plot(x,y);title('sin(x)图形

    2022年7月3日
    22
  • matlab画出三角函数图像_matlab二元函数绘图

    matlab画出三角函数图像_matlab二元函数绘图在matlab中绘制二元函数图像矩形区域上的绘制考虑f(x,y)=2×2+2y2+4xy−3y−3x+1f(x,y)=2x^2+2y^2+4xy-3y-3x+1f(x,y)=2×2+2y2+4xy−3y−3x+1在矩形区域[0,1]×[0,1][0,1]\times[0,1][0,1]×[0,1]上的图像。直接上代码:%meshf(x,y)onacertaindomainclear;clc;%generatedomainX=0:

    2025年9月28日
    5
  • 所有帖子的 分类 总结

    所有帖子的 分类 总结一,数据库的数据库从入门到精通01:https://blog.csdn.net/u012932876/article/details/116212832数据库从入门到精通02:https://blog.csdn.net/u012932876/article/details/117715317数据库从入门到精通03:https://blog.csdn.net/u012932876/article/details/117359992Oracle数据库的操作:https://blog.csdn.net/u

    2022年6月6日
    29
  • pycharm 2021.11.3 激活(注册激活)

    (pycharm 2021.11.3 激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    427

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号