Struts2拦截器与验证框架
Struts2拦截器
在struts2框架中主配置文件struts-defalut.xml文件中定义了大量的拦截器和拦截器栈。通过default-interceptor-ref元素定义了当前应用的默认拦截器栈,对用户的每次请求都需要调用拦截器栈中的每个拦截器来拦截请求,最后一个拦截器处理完后将请求传递到具体控制器中。拦截器栈是对拦截器的应用,相当于拦截器的集合。通过拦截器栈可以将一系列拦截器很方便的应用到action中。
我们可以根据自己的业务需求自定义拦截器,将拦截器通过在struts.xml文件中注册,应用到我们的action控制器中。如果在action元素总没有显式的定义对拦截器的引用,那么使用框架默认的拦截器栈。如果在具体的控制器中显式的引用了拦截器,那么默认的拦截器栈失效。
拦截器的应用步骤:
拦截器分为类级拦截器(粗粒度拦截器)和方法级拦截器(细粒度拦截器)
1、 创建拦截器
在Interceptor中新建类loginInterceptor
类级拦截器implements Interceptor;实现destroy()、init()、intercept()三个方法
方法级拦截器 extends MethodFilterInterceptor重写doIntercept()方法。
拦截器中获得session
public String intercept(ActionInvocation invocation) throws Exception{
//获取session
Map session=invocation.getInvocationContext().getSession();
if(session.get("users")!=null){ return invocation.invoke();//释放控制权
}else{ return Action.LOGIN; } }
2、 在Struts.xml中配置拦截器
<struts>
<package name="s2" extends="struts-default">
<interceptors>
<!-- 注册登录拦截器(粗粒度拦截器,类级别的) -->
<interceptor name="loginInterceptor"
class="com.bsb.interceptor.LoginInterceptor"></interceptor>
<!-- 注册细粒度的方法级别的拦截器 -->
<interceptor name="methodInterceptor" class="com.bsb.interceptor.MyMethodInterceptor">
<param name="includeMethods">save,update,delete</param><!-- 定义要拦截的方法 -->
<param name="excludeMethods">checkall,checkbyid</param> <!-- 定义不拦截的方法(可以省略) -->
</interceptor>
<!-- 注册拦截器栈 -->
<interceptor-stack name="loginStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<interceptor-stack name="methodStack">
<interceptor-ref name="methodInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 将自定义的拦截器栈设置为默认的拦截器栈 –>
<default-interceptor-ref name="methodStack"></default-interceptor-ref>
<global-results> <!-- 注册全局result -->
<result name="login">/login1.jsp</result>
</global-results>
<action name="login" class="loginaction">
<result name="loginok">/index.jsp</result>
<result name="loginfail">/login.jsp</result>
<result name="input">/login.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref> <!—-引用拦截器栈-—>
</action>
<action name="*user" method="{1}" class="useraction">
<result name="init">/NewUser.jsp</result>
<result name="saveok" type="chain">findAlluser</result>
<result name="savefail">/NewUser.jsp</result>
<result name="findall">/index.jsp</result>
<result name="deleteok" type="chain">findAlluser</result>
<result name="updateok" type="chain">findAlluser</result>
<result name="inituser">/UpdateUser.jsp</result>
<result name="input">/NewUser.jsp</result>
<result name="qxbz" type="chain">findAlluser</result>
<interceptor-ref name="mehthodstack"></interceptor-ref><!—-引用拦截器栈-—>
</action>
</package>
</struts>
Struts2中的框架验证
Struts2的框架验证,主要是配置文件验证。
1、配置文件的命名规范
单动作控制器:LoginAction-validation.xml(控制器名- validation.xml)
多动作控制器:StudAction-savestud-validation.xml(控制器名-表单请求名-validation.xml)
2、配置文件验证规则
配置文件的验证规则在xwork,jar\xwork-validator-1.0.2.dtd\xwork-validator-config.xml目录中
验证策略在xwork.validator.validators中default.xml中
<!-- <message key="error.jsp.email.required"></message>key属性是从属性文件中取值 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- field-validator 元素表示对字段的校验 type属性表示调用的校验策略 -->
<field name="user.uname">
<field-validator type="requiredstring">
<message>用户名不允许为空</message>
</field-validator>
</field>
<field name="user.uage"><!-- 年龄的范围验证 -->
<field-validator type="requiredstring">
<message>年龄不允许为空</message>
</field-validator>
<field-validator type="int">
<param name="min">18</param>
<param name="max">60</param>
<message>年龄必须在18-60之间</message>
</field-validator>
</field>
<!-- 电话校验 -->
<field name="stud.stele">
<!-- field-validator 元素表示对字段的校验type属性表示调用的校验策略 -->
<field-validator type="requiredstring">
<!-- <message key="error.jsp.tele.required"></message> -->
<message>电话号码不允许为空</message>
</field-validator>
<field-validator type="regex"> <!-- 通过正则表达式校验电话的合法性 -->
<param name="expression"><![CDATA[ (^\d{3,4}-)?\d{7,8}$ ]]></param> <message>电话格式错误</message>
</field-validator>
</field>
<field name="stud.semail"> <!-- 邮箱校验 -->
<!-- field-validator 元素表示对字段的校验type属性表示调用的校验策略 -->
<field-validator type="requiredstring">
<message>邮箱不允许为空</message>
</field-validator>
<field-validator type="email"> <!-- 校验邮箱的合法性 -->
<message>邮箱格式错误</message>
</field-validator>
</field>
<field name="stud.sbirthday">
<field-validator type="required">
<message>出生日期不允许为空</message>
</field-validator>
<field-validator type="date">
<param name ="min">1950-01-01</param>
<param name = "max">1992-01-01</param>
<message>生日格式错误</message>
</field-validator>
</field>
</validators>
浙公网安备 33010602011771号