Testing...

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>

 

posted on 2013-05-12 00:47  左思  阅读(261)  评论(0)    收藏  举报

导航

Testing...