struts之XML配置文件归纳

1.首先是src目录下的总配置文件struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

	<!-- 二、总配置文件:引入其他所有配置文件 -->
	
	<include file="constant.xml"></include>
	<include file="cn/sp/a_config/struts.xml"></include>
	<include file="cn/sp/b_config2/config.xml"></include>
	<include file="cn/sp/c_data/data.xml"></include>
	<include file="cn/sp/d_type/type.xml"></include>
	<include file="cn/sp/e_fileupload/upload.xml"></include>
	
</struts>

这种一般是引入其他包里的配置文件。

2.然后是配置文件的通用模板

<span style="font-size:14px;"><struts>
 <package name="config2" namespace="/" extends="struts-default">
  <!-- 配置全局跳转视图 -->
  <global-results>
   <result name="success">/index.jsp</result>
  </global-results>
  <!-- 通配符: </span><a target=_blank href="http://locahost:8080/struts02/user_login"><span style="font-size:14px;">http://locahost:8080/struts02/user_login</span></a><span style="font-size:14px;"> -->
  <action name="user_*" class="cn.itcast.b_config2.UserAction" method="{1}">
   <result name="loginSuccess" >list.jsp</result>
  </action></span>
<span style="font-size:14px;">  <action name="test2">
    <result name="success" type="redirect">/WEB-INF/index.jsp</result>
   </action></span>
<span style="font-size:14px;"> </package> 
 
</struts></span>

type默认为dispatcher即转发,如要改为重定向需写出来,同时还可以重定向到Action,type="redirectAction".

3.接着是使用struts框架自带的一些功能时涉及到的一些配置文件。

3.1常量配置

<struts>

	<!-- 一、全局配置 -->
	<!-- 0. 请求数据编码 -->
	 <constant name="struts.i18n.encoding" value="UTF-8"/>
	<!-- 1. 修改Struts默认的访问后缀 -->
	<constant name="struts.action.extension" value="action,do,"></constant>
	<!-- 2. 修改xml自动重新加载 -->
	<constant name="struts.configuration.xml.reload" value="true"/>
	<!-- 3. 开启动态方法调用 (默认不开启)-->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	<!-- 4. 修改上传文件的最大大小为30M -->
	<constant name="struts.multipart.maxSize" value="31457280"/>
	<!-- 更改主题,使用标签时用到 -->
 	<constant name="struts.ui.theme" value="simple"></constant>
</struts>

<!-- 通过常量加载资源文件 -->
 <constant name="struts.custom.i18n.resources" value="cn.sp.config.msg"></constant>

这里是加载自己写的国际化配置文件,格式为msg_en_US.properties,en是英语的简写,US是美国简写,还有默认格式msg.properties.

3.2文件上传与下载


<span style="font-size:12px;color:#33ccff;background-color: rgb(51, 102, 255);"><struts>
	<!-- 0. 请求数据编码 -->
	 <constant name="struts.i18n.encoding" value="UTF-8"/>
	 <!-- 2. 修改xml自动重新加载 -->
	<constant name="struts.configuration.xml.reload" value="true"/>
	<!-- 3. 开启动态方法调用 (默认不开启)-->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	
	<package name="upload_" extends="struts-default">
		<!-- 注意: action 的名称不能用关键字"fileUpload" -->
		<action name="fileUploadAction" class="cn.itcast.e_fileupload.FileUpload">
		
			<!-- 限制运行上传的文件的类型 -->
			<interceptor-ref name="defaultStack">
				
				<!-- 限制运行的文件的扩展名 -->
				<param name="fileUpload.allowedExtensions">txt,jpg,jar</param>
				
				<!-- 限制运行的类型   【与上面同时使用,取交集】
				<param name="fileUpload.allowedTypes">text/plain</param>
				-->
				
			</interceptor-ref>
			
			<result name="success">/e/success.jsp</result>
			
			<!-- 配置错误视图 -->
			<result name="input">/e/error.jsp</result>
		</action>
		
		<action name="down_*" class="cn.itcast.e_fileupload.DownAction" method="{1}">
			<!-- 列表展示 -->
			<result name="list">/e/list.jsp</result>
			<!-- 下载操作 -->
			<result name="download" type="stream">
			
				<!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->
			   <param name="contentType">application/octet-stream</param>
			   
			   <!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
			   <param name="inputName">attrInputStream</param>
			   
			   <!-- 下载头,包括:浏览器显示的文件名 -->
			   <param name="contentDisposition">attachment;filename=${downFileName}</param>
			 
			 	<!-- 缓冲区大小设置 -->
			   <param name="bufferSize">1024</param>
			</result>
		</action>
	</package>	
</struts></span>



3.3拦截器


<struts>
	<package name="hello" extends="struts-default">
	
		<!-- 【拦截器配置】 -->
		<interceptors>
		
			<!-- 配置用户自定义的拦截器 -->
			<interceptor name="helloInterceptor" class="cn.itcast.a_interceptor.HelloInterceptor"></interceptor>
			
			<!-- 自定义一个栈: 要引用默认栈、自定义的拦截器 -->
			<interceptor-stack name="helloStack">
				<!-- 引用默认栈 (一定要放到第一行)-->
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<!-- 引用自定义拦截器 -->
				<interceptor-ref name="helloInterceptor"></interceptor-ref>
			</interceptor-stack>
			
		</interceptors>
		
		<!-- 【执行拦截器】 -->
		<default-interceptor-ref name="helloStack"></default-interceptor-ref>
		
	
		<!-- Action配置 -->
		<action name="hello" class="cn.itcast.a_interceptor.HelloAction">
			<result name="success">/index.jsp</result>
		</action>
	
	
	</package>
</struts>
这里需要注意几点:
         1.默认栈一定要放在第一行,也就是所有自定义拦截器的前面
          2.执行拦截器时根据作用范围大小不同可以分为三种写法,具体依实际需求而定。
<package name="user" extends="struts-default">
	
		<!-- 【拦截器配置】 -->
		<interceptors>
			<interceptor name="loginCheck" class="cn.itcast.interceptor.UserCheckInterceptor"></interceptor>
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="loginCheck"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<!-- 【执行拦截器:第一种写法: 当前包下所有的acntion都执行myStack栈】
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
		 -->
	
		<!-- 全局配置 -->
		<global-results>
			<result name="error">/error.jsp</result>
		</global-results>
		
		<action name="user_*" class="cn.itcast.action.UserAction" method="{1}">
			
			<!--第二种写法: 只是在这一个Action中执行myStack栈 
			<interceptor-ref name="defaultStackt"></interceptor-ref>
			<interceptor-ref name="loginCheck"></interceptor-ref>
			-->
			
			<!-- 第三种写法:执行用户栈(与第二种写法一样, 只在当前aciton中执行自定义栈) -->
			<interceptor-ref name="myStack"></interceptor-ref>
			
			
			
			<!-- 1. 登陆失败 -->
			<result name="input">/login.jsp</result>
			
			<!-- 2. 登陆成功 -->
			<result name="loginSuccess" type="redirectAction">user_list</result>
			
			<!-- 3. 列表展示 -->
			<result name="list">/WEB-INF/list.jsp</result>
			
		</action>
	</package>

补上防止表单重复提交拦截器

	<!-- 防止表单重复提交,第二步: 配置" 防止表单重复提交拦截器" -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<interceptor-ref name="token">
				<!-- 指定拦截哪些方法需要防止表单重复提交(save) -->
				<param name="includeMethods">save</param>
			</interceptor-ref>
		
			<!-- 防止表单重复提交,第三步: 如果用户重复提交了跳转到指定的错误页面  -->
			<result name="invalid.token" type="redirectAction">emp_list</result>

第一步就是在对应的jsp页面写入<s:token></s:token>


3.4数据校验

UserAction-user_register-validation.xml这种取名方式是对特定的action中的特定方法进行数据效验,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
 		"-//Apache Struts//XWork Validator 1.0.3//EN"
 		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
	
	<!-- 验证的每一个字段用field表示 -->
	<field name="user.userName">
		<!-- 指定使用的验证器 -->
		<field-validator type="requiredstring">
			<!-- 验证失败的错误提示信息 -->
			<message>用户名不能为空!</message>
		</field-validator>
	</field>
	
	<!-- 验证pwd -->
	<field name="user.pwd">
		
		<!-- 非空 -->
		<field-validator type="requiredstring">
			<message>密码不能为空!</message>
		</field-validator>
		
		<!-- 长度 -->
		<field-validator type="stringlength">
			<param name="minLength">6</param>
			<param name="maxLength">8</param>
			<message>密码必须为6-8位!</message>
		</field-validator>
	</field>
	
	<!-- 验证日期 -->
	<field name="user.birth">
		<field-validator type="date">
			<message>日期格式不对!</message>
		</field-validator>
	</field>
	
	<!-- 验证Email -->
	<field name="user.email">
		<field-validator type="email">
			<message>邮箱格式错误!</message>
		</field-validator>
	</field>
	
</validators> 		
 		


命名方式ActionClassName-validation.xml 放置在同Action的包下,默认Action中的所有方法进行校验,当然还有代码校验此处省略。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章