struts2 开发中,一些功能需要在struts.xml中的配置

2023-11-08

1.普通package

<!-- package元素:
	        * name:为当前包起名
	                作用,用于继承
	        * namespace:命名空间,相当于一个房间号:我们需要对号入座 
	        * extends:当使用action的时候,必须继承struts-default,如果不继承,struts2定义的所有方法将失效-->
	<package name="primer" namespace="/primer" extends="struts-default">
		
		<!-- 
			name:action路径
			如果在当前命名空间下找不到action,默认执行执行action,
			作用:在项目出现异常的时候,统一跳转的页面
		 -->
		<default-action-ref name="helloWorldAction"></default-action-ref>
		
		<!-- 
		action元素:
		   * name:页面需要处理页面访问的链接,即action路径 
		   * class:处理当前链接的类(全路径)-->
		<action name="helloWorldAction" class="cn.itcast.web.a_primer.HelloWorldAction">
			<!-- result元素:
				name:返回值(与XXXXXActon类中的return的返回值对应)
				/primer/success.jsp,需要跳转的页面
			 -->
			<result name="success">/primer/success.jsp</result>
		</action>
		<!-- 没有指定action中的class,默认是ActionSupprot中的execute()方法
		     如果没有指定result中的name,默认是执行success -->
		<action name="actionNoClass">
			<result>
				/primer/formSuccess.jsp
			</result>
		</action>
	</package>


2.package 设置转发与重定向的写法

<package name="resulttype" namespace="/resulttype" extends="struts-default">
		<action name="resulttypeAction" class="cn.itcast.web.c_resulttype.ResulttypeAction">
			<!-- 写法1 -->
			<!-- <result name="success" type="dispatcher">
				/resulttype/success.jsp
			</result> -->
			<!-- 写法2 -->
			<!-- <result name="success" type="dispatcher">
				<param name="location">/resulttype/success.jsp</param>
			</result>-->
			<!--<result name="success" type="redirect">
				/resulttype/success.jsp
			</result>   -->
			<!-- 重定向到另一个资源的action -->
			<result name="success" type="redirectAction">
				<!-- name="actionName":需要访问的action的路径
				     name="namespace":指向另一个Action资源的命名空间 
				     如果使用重定向,request作用域将无效-->
				<param name="actionName">helloWorldAction</param>
				<param name="namespace">/primer</param>
			</result>
		</action>
	</package>

3.通配符在struts.xml配置中的使用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<!-- 是否调用action中的动态方法:true(默认):允许调用(在action中可以!号)
	                false:不允许调用调用动态方法 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	
	<package name="pattern" namespace="/pattern" extends="struts-default">
	
		<!-- 定义全局的返回结果 -->
		<global-results>
			<result name="delete">
				/pattern/successGlobal.jsp
			</result>
		</global-results>
		
		<!-- method:表示BookAction类中方法的名称,返回值String -->
		<action name="bookAction" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>
		<!-- 通配符实例(1)
		<a href="${pageContext.request.contextPath}/pattern/a_add.action"> 通配符映射示例(1)</a><br>
        <a href="${pageContext.request.contextPath}/pattern/b_add.action"> 通配符映射示例(1)</a><br>
        <a href="${pageContext.request.contextPath}/pattern/c_add.action"> 通配符映射示例(1)</a><br>
		 -->
		<!--<action name="a_add" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>
		<action name="b_add" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>
		<action name="c_add" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>  -->
		<!-- <action name="*_add" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>  -->
		<!-- 通配符实例(2) 
		  <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action"> 图书</a><br>
          <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户</a><br>
		-->
		<!-- <action name="BookAction_add" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>
		<action name="UserAction_add" class="cn.itcast.web.d_pattern.UserAction" method="add">
			<result name="add">
				/pattern/UserAction.jsp
			</result>
		</action>-->
		<!-- <action name="*_add" class="cn.itcast.web.d_pattern.{1}" method="add">
			<result name="add">
				/pattern/{1}.jsp
			</result>
		</action> -->
		<!-- 通配符实例(3) 
		<a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br>
        <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br>
        <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户添加</a><br>
        <a href="${pageContext.request.contextPath}/pattern/UserAction_delete.action">用户删除</a><br>
    -->
        <!-- <action name="BookAction_add" class="cn.itcast.web.d_pattern.BookAction" method="add">
			<result name="add">
				/pattern/BookAction.jsp
			</result>
		</action>
		<action name="BookAction_delete" class="cn.itcast.web.d_pattern.BookAction" method="delete">
			<result name="delete">
				/pattern/success.jsp
			</result>
		</action>
		<action name="UserAction_add" class="cn.itcast.web.d_pattern.UserAction" method="add">
			<result name="add">
				/pattern/UserAction.jsp
			</result>
		</action>
		<action name="UserAction_delete" class="cn.itcast.web.d_pattern.UserAction" method="delete">
			<result name="delete">
				/pattern/success.jsp
			</result>
		</action>-->
		<!-- <action name="*_*" class="cn.itcast.web.d_pattern.{1}" method="{2}">
			<result name="{2}">
				/pattern/{1}.jsp
			</result>
			<result name="delete">
				/pattern/success.jsp
			</result>
		</action> -->
		<!-- 动态方法调用 
			<a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br>
            <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br>
		-->
		<!-- <action name="BookAction" class="cn.itcast.web.d_pattern.BookAction">
			<result name="add">/pattern/BookAction.jsp</result>
			<result name="delete">/pattern/success.jsp</result>
		</action>-->
		<!-- 使用通配符调用(在项目中建议使用)
		 使用通配符定义action<br>
         <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br>
         <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br>
		 -->
		<action name="BookAction_*" class="cn.itcast.web.d_pattern.BookAction" method="{1}">
			<result name="add">/pattern/BookAction.jsp</result>
			<result name="delete">/pattern/success.jsp</result>
		</action>
	</package>
</struts>

4.上传文件功能的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<constant name="struts.multipart.maxSize" value="5229339"></constant>
	<package name="upload" namespace="/upload" extends="struts-default">
		<!-- 1、配置上传文件大小
		     2、配置允许上传文件的类型
		     3、配置允许上传文件的扩展名 -->
		<!-- <interceptors>
			<interceptor-stack name="defaultStack">
				将fileUpload放置到默认栈的后面,当默认栈执行完毕后,再执行
				<interceptor-ref name="fileUpload">
					<param name="maximumSize">5229339</param>
					<param name="allowedTypes">application/pdf,application/vnd.ms-excel</param>
					<param name="allowedExtensions">.pdf,.txt</param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>  -->
		
		<action name="uploadAction_*" class="cn.itcast.web.f_upload.UploadAction" method="{1}">
		
			<interceptor-ref name="defaultStack">
				<!-- 定义文件的大小,默认是2M -->
				<param name="fileUpload.maximumSize">1229339</param>
				<!-- 定义允许上传的文件类型,如果文件类型定义多个,需要用逗号分开 -->
				<param name="fileUpload.allowedTypes">application/pdf,application/vnd.ms-excel,application/vnd.ms-powerpoint</param>
				<!-- 定义文件的扩展名,如果存在多个扩展名,用逗号分开 -->
				<param name="fileUpload.allowedExtensions">.pdf,.ppt</param>
			</interceptor-ref>
			
			<result name="success">/upload/success.jsp</result>
			<!--input: 如果该类中上传文件失败,可跳转到/upload/error.jsp -->
			<result name="input">/upload/error.jsp</result>
		</action>
		
		<action name="uploadsAction_*" class="cn.itcast.web.f_upload.UploadsAction" method="{1}">
			<result name="success">/upload/success.jsp</result>
			<result name="input">/upload/error.jsp</result>
		</action>
	</package>
</struts>

5.自定义拦截器 配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="aop" namespace="/aop" extends="struts-default">
		<!-- 自定义拦截器 -->
		<interceptors>
			<interceptor name="person" class="cn.itcast.web.g_aop.PersonInterceptor"></interceptor>
			<interceptor-stack name="personStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<!-- 将自定义的拦截器放置到默认栈的后面 -->
				<interceptor-ref name="person"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- 默认执行的拦截器,即自定义的拦截器 -->
		<default-interceptor-ref name="personStack"></default-interceptor-ref>
		
		<action name="userAction_*" class="cn.itcast.web.g_aop.UserAction" method="{1}">
			<result name="success">/aop/success.jsp</result>
			<!-- 表示失败 -->
			<result name="error">/aop/error.jsp</result>
		</action>
	</package>
</struts>

6.表单校验 配置

(1)手工校验的xml配置(仅需要指定input跳转页面即可)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="validate" namespace="/validate" extends="struts-default">
		<action name="validateAction_*" class="cn.itcast.web.h_validate.ValidateAction" method="{1}">
			<result name="success">/validate/success.jsp</result>
			<!-- 表示失败,input:如果验证失败需要跳转到的页面(struts2自带) -->
			<result name="input">/validate/login.jsp</result>
		</action>
		<action name="validateXmlAction_*" class="cn.itcast.web.h_validate.ValidateXmlAction" method="{1}">
			<result name="success">/validate/success.jsp</result>
			<!-- 表示失败,input:如果验证失败需要跳转到的页面(struts2自带) -->
			<result name="input">/validate/loginxml.jsp</result>
		</action>
	</package>
</struts>

(2)xml校验 (针对ValidateAction中的所有方法)(注意xml文件命名规则:ValidateXmlAction-validation.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 使用XML文件对指定Action类做校验 -->
<validators>
	<!-- 指定校验的字段名称,对应表单中name的属性值 -->
	<field name="username">
		<!-- 针对某一字段的验证规则 
		struts2将验证规则存放到xwork-2.x.jar中
		com.opensymphony.xwork2.validator.validators下的default.xml文件
		-->
		<!-- 用户名不能为空 -->
		<field-validator type="requiredstring">
			<!-- 指定验证规则中属性名称指定相应值 -->
			<param name="trim">true</param>
			<!-- 填写提示的错误信息 -->
			<message>用户名不能为空</message>
		</field-validator>
	</field>
	<field name="psw">
		<!-- 密码不能为空 -->
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message><![CDATA[密码不能为空]]></message>
		</field-validator>
		<!-- 密码长度在6到12之间 -->
		<field-validator type="regex">
			<param name="expression">^[A-Za-z0-9]{6,12}$</param>
			<message><![CDATA[密码的长度不匹配(需要输入6到12之间)]]></message>
		</field-validator>
	</field>
</validators>


(3)xml校验(针对ValidateAction中的指定方法) (注意xml文件命名规则:ValidateXmlAction-validateXmlAction_login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 使用XML文件对指定Action类做校验 -->
<validators>
	<!-- 指定校验的字段名称,对应表单中name的属性值 -->
	<field name="username">
		<!-- 针对某一字段的验证规则 
		struts2将验证规则存放到xwork-2.x.jar中
		com.opensymphony.xwork2.validator.validators下的default.xml文件
		-->
		<!-- 用户名不能为空 -->
		<field-validator type="requiredstring">
			<!-- 指定验证规则中属性名称指定相应值 -->
			<param name="trim">true</param>
			<!-- 填写提示的错误信息 -->
			<message>用户名不能为空</message>
		</field-validator>
	</field>
	<field name="psw">
		<!-- 密码不能为空 -->
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message><![CDATA[密码不能为空]]></message>
		</field-validator>
		<!-- 密码长度在6到12之间 -->
		<field-validator type="regex">
			<param name="expression">^[A-Za-z0-9]{6,12}$</param>
			<message><![CDATA[密码的长度不匹配(需要输入6到12之间)]]></message>
		</field-validator>
	</field>
	<!-- 验证年龄不能小于0 -->
	<field name="age">
		<field-validator type="agevalidator">
			<message><![CDATA[年龄不能小于0]]></message>
		</field-validator>
	</field>
</validators>


(4)自定义校验    ( 在src的目录下创建validators.xml,配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
  		"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
	<!-- name:为自定义的校验规则指定名称,
	            与ValidateXmlAction-validateXmlAction_login-validation.xml文件中校验规则type的值对应
	     class:校验规则的类路径
	 -->
	
	<validator name="agevalidator" class="cn.itcast.web.h_validate.AgeValidator"></validator>
</validators>


7.国际化   配置

<!-- 加载国际化的资源文件
    name:在项目配置国际化资源文件,让显示的错误信息为中文
    value:如果在src的目录下,直接填写properties文件的名称
           如果将资源文件放置到cn.itcast.web下,此时填写cn.itcast.web.资源文件名称
     -->
    <constant name="struts.custom.i18n.resources" value="fileupload,cn.itcast.web.i_i18n.resource,cn.itcast.web.l_model.token"></constant>


8.token 防表单重复提交 配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="model" namespace="/model" extends="struts-default">
		<interceptors>
			<interceptor-stack name="tokenStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<!-- 将token拦截器放置到默认栈的后面 -->
				<interceptor-ref name="token">
					<!-- 针对Action中某个方法控制表单重复提交 ,需要添加includeMethods,指定Action的方法,如果是多个方法用逗号分开-->
					<param name="includeMethods">save</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="tokenStack"></default-interceptor-ref>
		<action name="customerAction_*" class="cn.itcast.web.l_model.CustomerAction" method="{1}">
			<result name="add">/model/add.jsp</result>
			<result name="save">/model/success.jsp</result>
			<result name="edit">/model/edit.jsp</result>
			<!-- 定义表单重复提交 invalid.token:表示如果表单重复提交,需要跳转的页面-->
			<result name="invalid.token">/model/message.jsp</result>
		</action>
	</package>
</struts>



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

struts2 开发中,一些功能需要在struts.xml中的配置 的相关文章

随机推荐

  • python Tkinter使用与美化

    Tkinter使用 自定义窗体 import tkinter root tkinter Tk 自定义窗体的标题 root title 我的第一个窗口 自定义窗体的图标 注意 这里的图标只能是ico结尾的图标文件 需自己事先创建图标 括号中写
  • Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号...

    如何开启MySQL的远程帐号 1 首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单 运行 输入 cmd 进入控制台 然后cd 进入MySQL 的 bin 目录下 然后输入下面的命令 gt MySQL uroot
  • Linux 中线程的实现

    文章目录 一 线程的概念 二 线程的实现方式 三 线程库中的接口介绍 四 线程的简单使用 4 1 主函数创建一个线程 4 2 主函数创建多个线程 4 3 多进程对一个变量进行操作 五 线程安全 六 线程创建 6 1 创建进程上限 6 2 线
  • 华为数通方向HCIP-DataCom H12-831题库(单选题:81-100)

    第81题 关于结构化的网络故障排除流程中的确认故障阶段的描述 正确的是 A 应关注如何更好的解决故障而不论该故障是否属于自己的负责范围 B 应重视用户的意见 以用户的判断为依据来判断故障问题 C 应使影响最小化 尽量不让其他人知道网络出现了
  • jmeter基础操作,图文

    jmeter基础操作 1 jmeter环境搭建 jmeter是用Java开发的 依赖jdk jer所以jdk的版本使用1 8版本 1 安装JDK环境 配置环境变量 2 官网下载jmeter下载需要的版本包 3 下载完成后 在bin文件夹下
  • 使用VSCode内置终端执行python脚本时出现OMP: Error #15错误

    本问题出现的必要条件 Windows11 21H2 使用VSCode内置终端执行脚本 且通过编辑器右键的 在终端中运行python文件 选项启动终端 脚本中调用了matplot包 VSCode和Powershell都针对Conda进行了配置
  • layui笔记之树形结构

    div ul class easyui tree ul div div class easyui menu style width 120px div 添加 div div
  • 【registry】 javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

    1 背景 在 registries registrie rest service idea 无法引入的背景下 以及 registry NoSuchFieldError INCLUDE ALL 以及 解决依赖问题报错 javax el Exp
  • 小程序开发----自定义有效期缓存

    在uni app中使用 缓存数据优化 import cache from common js cache 使用方法 一 设置缓存 string cache put k string你好啊 json cache put k b 3 2 arr
  • 从tensorboard导出数据,自己用python画折线图

    有大佬有更好的方法 请狠狠踢我 我很爱学习的 写论文时 我们可能需要这样的 但是tensorboard展示的是这样的 虽然tensorboard可以导出svg 但是使用visio去除不了背景 同门亲手验证的 办法就是从tensorboard
  • CSAPP:DataLab详细解析

    做题的时候看了好多博客 一点一点更深入的了解 学习 不得不说lab真的很好 学到很多 做题准备我已经在上一个博客提到了 建议写之前看一下README 1 bitXor 运用 和 实现x y 这里可以用一个真值表 x y x y 0 0 0
  • char*的变量不可直接==“字符串”

    char 的变量不可直接 字符串 需要使用strcmp a b
  • less命令乱码_less命令

    less命令乱码 The less command is one I use a lot It shows you the content stored inside a file in a nice and interactive UI
  • PCL 法向量夹角约束的欧式聚类分割

    目录 一 概述 二 代码实现 三 结果展示 一 概述 目前广为流传的欧式聚类都是 PCL 欧式聚类分割一文中的实现方式 但是 完整版的点云欧式聚类算法是可以附带法向量夹角约束的 具体使用方法见本文 二 代码实现 include
  • PS图层混合算法之六(差值,溶解, 排除)

    差值模式 查看每个通道中的颜色信息 比较底色和绘图色 用较亮的像素点的像素值减去较暗的像素点的像素值 与白色混合将使底色反相 与黑色混合则不产生变化 排除模式可生成和差值模式相似的效果 但比差值模式生成的颜色对比度较小 因而颜色较柔和 与白
  • 冻结训练的理解与使用

    冻结训练的作用 当我们已有部分预训练权重 这部分预训练权重所应用的那部分网络是通用的 如骨干网络 那么我们可以先冻结这部分权重的训练 将更多的资源放在训练后面部分的网络参数 这样使得时间和资源利用都能得到很大改善 然后后面的网络参数训练一段
  • 虚拟化技术的工作原理_虚拟化技术与原理简介

    随着云计算技术的发展及其应用的普及和深入 云平台资源的高效利用成为越来越重要的问题 而服务器虚拟化技术是云计算实现资源有效利用的关键技术 云计算的云端系统 其实质上就是一个大型的分布式系统 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台 而
  • LayUI导入Excel表(Apache POI)

    LayUI导入Excel表 Apache POI 前端框架LayUI 将excel表导入到数据库 并展示在页面 首先要明白 excel表整体构造 一整个 excel表是一个工作簿 workbook 而其中又有很多工作表 sheet 然后一行
  • QT C++ 欧姆龙PLC网络通信协议FinsTcp库 通信慢的问题

    这个库移植自我自己以前的C 欧姆龙PLC网络通信协议FinsTcp库 详见以下链接 https blog csdn net panasonicsony article details 126300935 QT主界面上一个写入PLC辅助触点的
  • struts2 开发中,一些功能需要在struts.xml中的配置

    1 普通package