struts之XML配置文件归纳
2016-07-12 16:23
387 查看
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> <!-- 配置错误视图 --> & b526 lt;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中的所有方法进行校验,当然还有代码校验此处省略。
相关文章推荐
- java摸板设计模式
- Java中基本类型和字符串之间的转换
- java程序的耦合度是什么
- JAVA 实现二叉树(链式存储结构)
- String的hashcode(java)
- 基数排序-java实现
- SpringMVC+Spring4+Mybatis3整合实例
- Java 读取properties文件
- Java中的并发库学习总结
- Java CPU使用率过高分析
- [Java 8] (10) 使用Lambda完成函数组合,Map-Reduce以及并行化
- java学习总结(16.07.12)java的枚举类
- Eclipse Java注释模板设置详解
- Java的时间、日期类
- cxf的wsdl2java工具
- 使用Maven创建Java项目和Java Web项目
- 7Spring3+Hibernate3
- Java的简单代理设计模式样例
- Eclipse中SVN修改的*星号没了,解决方法
- Gadgets-JavaBase64加密解密