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类并减少很多配置。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 使用SpringBoot RestTemplate实现第三方接口对接

    使用SpringBoot RestTemplate实现第三方接口对接实现对接第三方接口,可以使用HttpClient(年岁较久),也可以使用SpringBootRestTemplate(新生代)。可根据个人喜好选择适当的方式进行对接,个人推荐使用SpringBootRestTemplate。具体使用如下:自定义配置类:application.yml文件中配置:注意:对应XXXConfig实体类中属性,在application.yml中配置必须在同一级…

  • Linux集群分发脚本xsync[通俗易懂]

    Linux集群分发脚本xsync[通俗易懂]Linux集群分发脚本xsync1.scp(securecopy)安全拷贝2.rsync远程同步工具3.xsync集群分发脚本4.免密登陆1.scp(securecopy)安全拷贝1)scp定义:scp可以实现服务器与服务器之间的数据拷贝(fromserver1toserver2)2)基本语法scp-r$pdir/$fname…

  • 关于hard work的名言_partyhard

    关于hard work的名言_partyhard今天看了美团饿了么的app撕逼,作为程序员而且是app开发者,表示深深的蛋疼了。知乎原文:如何评价美团外卖商家版强杀竞争对手的商家版App进程?不评价回答里各种关于程序员节操问题的论述,能看到这篇博客的,心里都明白需求是谁提的。单聊聊hardcode的事。我不是科班出身,所以之前还这个词还真不是很熟悉。magicnumber倒是听说过。扯远了,http://blog.csdn

    2022年10月28日
  • Java Stringbuilder简单介绍

    Java Stringbuilder简单介绍程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过”+”符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生,下面就Stringbuilder的使用做个简要的总结:一、创建Stringbuilder对象StringBuilderstrB=newStringBuilder();1、append(Stringstr)/append(Charc):字符串连接Syst

  • 1.2线性代数-行列式的性质

    行列式的性质:性质1:;行列式转置值不变对行成立的性质,对列也成立性质二:两行互换(两列互换),行列式的值要变号证明思路:若D中的每一项都和D1中的每一项差一个负号,那么D=-D13214是1234经过一次顺序变换得来的(1和3变换位置),1234为偶,3214肯定是奇原因:2,7,12,13列标的排法没变,只是行标变了。原来是1-2-3-4行,现在变成了3-2-1-4推论:两行或者两列对应相等,行列式值等于0若第一行和第三行互换,那么根据…

  • C语言中数组的总结

    C语言中数组的总结目录一维数组的创建和初始化一维数组的使用一维数组在内存中的存储指针的初步介绍一维数组的指针访问二维数组的创建和初始化二维数组的使用二维数组在内存中的存储二维数组的指针访问有关数组的运算数组作为函数参数1.一维数组的创建和初始化数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。eg:intarr[

发表回复

您的电子邮箱地址不会被公开。

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