Struts2学习笔记(五)——服务端验证以及拦截器过滤器

Struts2 有两种方式实现服务端验证

(一)使用ActionSupport编码实现验证

1)在action中进行验证    

if("".equals(user.getName())||user.getName()==null);

this.addFailderror("user.name","msg") return INPUT;


2)重写validate()

if(........)


3)使用validate+方法名()


<s:fielderror cssStyle"color:red;" /> 

显示方法addFailderror("user.name","msg")传递的信息

<s:actionerror cssStylr="color:red;" />

显示方法addActionError("msg")传递的错误信息


接受参数时,也会调用validate()方法,若出现错误,则不继续执行业务方法。


(二)验证框架   ******格式源文件包中的xworks-validator-x.x.x.dtd文件

使用该方法需要action配置文件中配置<result name="INPUT"></>的项

1)编写jsp数据输入页面

2)编写Action类及其配置文件

3)在Action类同目录下创建验证文件ActionName-validation.xml

4)编写验证规则

(xworks-validator-1.0.3.dtd下的内容)

<!ELEMENT validators (field|validator)+>

<!ELEMENT field (field-validator+)>

<!ATTLIST field

name CDATA #REQUIRED

>

<!ELEMENT field-validator (param*, message)>

<!ATTLIST field-validator

type CDATA #REQUIRED

    short-circuit (true|false) "false"

>

<!ELEMENT validator (param*, message)>

<!ATTLIST validator

type CDATA #REQUIRED

    short-circuit (true|false) "false"

>

<!ELEMENT param (#PCDATA)>

<!ATTLIST param

    name CDATA #REQUIRED

>

<!ELEMENT message (#PCDATA|param)*>

<!ATTLIST message

    key CDATA #IMPLIED

>

实际效果:

<validators>

<!--不能为空-->

<field name="user.name">

<field-validator type="requiredstring">

<message>用户名不能为空</message>

</field-validator>

<!--限制长度-->

<field-validator type="stringLength">

<param name="minLength">6</param>

<param name="maxLength">10</param>

<message>长度${minLength}~${maxLength}间</message>

</field-validator>

</field>

<!--正则表达式-->

<field name="  ">

<field-validator type="regex">

<param name="regexExpression" ><![CDATA[^1[358]\d{9}$]]></param>

<message>...</message>

</field-validator>

</field>

validator的file类型:

required:必填校验器

requiredstring:必填字符串校验器

int:整数校验器

double:双精度浮点数校验器

date:日期校验器

expression:表达式校验器

fieldexpression:字段表达式校验器

email:电子邮件校验器

url:网址校验器

visitor:Visitor校验器

conversion:转换校验器

stringlength:字符串长度校验器

regex:正则表达式校验器


若想对某一业务方法配置验证规则:

编写ActionName(Action类名)-alias(Action的路径名)-validation.xml;

顺序验证:

Action父类-validation.xml->

Action父类-alias-validation.xml->

Action类-validation.xml->

Action类-alias-validation.xml


表单验证可看详细:http://www.open-open.com/lib/view/open1414135851762.html


拦截器:  Struts核心

递归?

做一些Action执行前的预处理

将控制交给后续拦截器或返回结果字符串

做一些Action执行后的处理



//进行下一个拦截

String result = invocation.invoke();

return result;

<interceptors>

<interceptor name=" " class=" " />

<interceptor-stack name=" " >

<interceptor-ref name="  |(或分隔)   " />

</interceptor=stack>

</interceptor>

<!--默认拦截器引用-->

<default-interceptor-ref name="  " />

<action name=" " class=" ">

<interceptor-ref name=" " />

</action>


拦截器的实现方法:

一、实现Interceptor接口

1)void init()

2)void destory()

3)String intercept(ActionInvocation ai) throws Exception


二、继承AbstractInterceptor抽象类

提供了init() 和 destory()

只需实现intercept()方法


三、继承MethodFilterInterceptor类

1)指定拦截方法

2)指定不拦截的方法


拦截器栈有多个<interceptor-ref>谁在前,谁先起作用

拦截器起作用的顺序,先<action<再本包,再父包。


过滤器与拦截器的区别:

1)拦截器用于拦截对Action请求,而过滤器几乎可以过滤所有的请求

2)拦截器中可以获取Action的当前执行状态,而过滤器不可以

3)过滤器是Servlet中概念,在web.xml中配置;拦截器是Struts2/Webwork中概念,在struts.xml中配置


拦截器和过滤器


①拦截器是基于java的反射机制的,而过滤器是基于函数回调。


②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。


③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。


④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。


⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。


⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值