版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3、struts2的拦截器的拦截器 拦截器(拦截器(interceptor)是)是struts2的核心组成部分。的核心组成部分。 拦截器动态拦截拦截器动态拦截action调用的对象,它提供了一种机调用的对象,它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可制,使开发者可以定义一个特定的功能模块,这个模块可以在以在action执行之前或者之后运行,也可以在一个执行之前或者之后运行,也可以在一个action执行之前阻止执行之前阻止action执行。执行。 拦截器分为两类:拦截器分为两类:struts2提供的内建拦截器和用户自提供的内建拦截器和用户自定义的拦截器。定义的拦截器。 st
2、ruts2拦截器的自定义实现 为了实现自定义拦截器,为了实现自定义拦截器,struts2提供了提供了interceptor接口,以及对该接口实现的一个抽象拦截器类接口,以及对该接口实现的一个抽象拦截器类(abstractinterceptor)。)。 实现拦截器类一般可以实现实现拦截器类一般可以实现interceptor接口,或者直接接口,或者直接继承继承abstractinterceptor类。类。 struts2还提供了一个还提供了一个methodfilterintercepter类,该类,该类是类是abstractinterceptor类的子类,需要实现的拦截器支类的子类,需要实现的拦截
3、器支持方法过滤性,就继承持方法过滤性,就继承methodfilterintercepter。用户自定义一个拦截器一般需要三步:用户自定义一个拦截器一般需要三步:(1)自定义一个实现)自定义一个实现interceptor接口接口 (或继承(或继承abstractinterceptor 或继承或继承methodfilterintercepter)的类。)的类。(2)在)在struts.xml中注册上一步中定义的拦截器。中注册上一步中定义的拦截器。(3)在需要使用的)在需要使用的action中引用上述定义的拦截器。中引用上述定义的拦截器。1. 拦截器接口:拦截器接口:interceptor stru
4、ts2提供的提供的interceptor接口(接口(interceptor.java)的代码如下:)的代码如下:import com.opensymphony.xwork2.actioninvocation;import java.io.serializable;public interface interceptor extends serializable void destroy(); void init(); string intercept(actioninvocation invocation) throws exception; intercept 方法是拦截器的核心方法,实现具
5、体的拦截操方法是拦截器的核心方法,实现具体的拦截操作,返回一个字符串作为逻辑视图。作,返回一个字符串作为逻辑视图。 与与action一样,如果拦截器能够成功调用一样,如果拦截器能够成功调用action,则,则action中的中的execute()方法返回一个字符串类型值,作为逻辑视方法返回一个字符串类型值,作为逻辑视图,否则,返回开发者自定义的逻辑视图。图,否则,返回开发者自定义的逻辑视图。2. 抽象拦截器类:抽象拦截器类:abstractinterceptor 抽象拦截器类(抽象拦截器类(abstractinterceptor),是对接口),是对接口interceptor的一种实现,其中,的
6、一种实现,其中,init()和和destroy()方法是空方法是空实现。实现。 import com.opensymphony.xwork2.actioninvocation;public abstract class abstractinterceptor implements interceptor public void init() public void destroy() public abstract string intercept(actioninvocation invocation) throws exception;3自定义拦截器自定义拦截器: 实现接口实现接口inte
7、rcepter(或继承(或继承abstractinterceptor),并在),并在interceptor方法中加入有关的处理代码,其代码格式如下:方法中加入有关的处理代码,其代码格式如下:package interceptor;public class myinterceptor extends abstractinterceptor public string intercept(actioninvocation invocation) throws exception system.out.println(before); /在在action之前调用之前调用string result =
8、 invocation.invoke();/* invocation.invoke()方法检查是否还有拦截器,若有,则方法检查是否还有拦截器,若有,则继续调用余下的拦截器,若没有,则执行继续调用余下的拦截器,若没有,则执行action的业务逻辑,并的业务逻辑,并返回值返回值*/system.out.println(after);return result;4在在struts.xml中配置拦截器中配置拦截器 /success.jsp /test.jsp 5. 在在interceptor方法中,利用参数方法中,利用参数actioninvocation可获取页面提交的信息可获取页面提交的信息publ
9、ic string intercept(actioninvocation ai) throws exception map session = invocation.getinvocationcontext().getsession();if(session.get(user) = null) return login; else return ai.invoke();案例: 开发一个网上论坛过滤系统,如果网友发表开发一个网上论坛过滤系统,如果网友发表的有不文明的语言,将通过拦截器对不文明的文的有不文明的语言,将通过拦截器对不文明的文字进行自动替代。只是给出了一种简单的过滤,字进行自动替代。只
10、是给出了一种简单的过滤,过滤是否有过滤是否有“讨厌讨厌”文字,若有文字,若有“讨厌讨厌”,则用,则用“喜欢喜欢”代替要过滤的内容代替要过滤的内容“讨厌讨厌”,形成新的,形成新的文本内容并显示在论坛上。运行界面如图所示。文本内容并显示在论坛上。运行界面如图所示。struts2的输入验证 struts2提供了安全的服务器验证方法:提供了安全的服务器验证方法: (1)一种是使用)一种是使用validate()方法,方法, (2)另一种是配置验证(使用配置验证文件)另一种是配置验证(使用配置验证文件) 1 使用使用validate()方法实现验证方法实现验证 validate()方法是专门用来验证数据
11、的,实现的时方法是专门用来验证数据的,实现的时候需要继承候需要继承actionsupport类,并重写类,并重写validate()方法方法来完成输入验证来完成输入验证 。案例案例实现客户注册输入验证实现客户注册输入验证 使用使用validate()方法实现对注册页面进行验证。注方法实现对注册页面进行验证。注册页面如下图所示,若输入的数据验证成功,进入验证册页面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册成功页面(该页面显示注册信息),否则,仍返回注册页面。页面。【分析【分析】 对于该案例,根据对于该案例,根据struts2的的mvc设计思想,需要
12、设设计思想,需要设计计3部分组件:部分组件:(1)模型组件:)模型组件: 注册用户的注册用户的javabean:user.java 实现注册信息添加到数据库的实现注册信息添加到数据库的javabean:userdbase.java(2)action控制器的设计:控制器的设计:registeraction.java,在该,在该控制器中有两个主要方法:控制器中有两个主要方法: public string register():实现注册:实现注册 public void validate():实现注册前的信息验证:实现注册前的信息验证(3)设计视图:)设计视图: 注册页面(注册页面(regist.j
13、sp):按上图所示的页面设计):按上图所示的页面设计 注册成功后,显示注册信息的页面:注册成功后,显示注册信息的页面:success.jsp。(3)编写业务控制器:)编写业务控制器:registeraction.java:package action;import beans.user;import beans.userdbase;import com.opensymphony.xwork2.actionsupport;import java.util.regex.*;public class registervalidateaction extends actionsupport priva
14、te user user;private string userpwd;/省略了属性的setter、getter方法public string register() throws exception userdbase ud=new userdbase();if(ud.adduser(user)=1) return success;else return error;public void validate() if(user.getusername()=null |user.getusername().length()=0) addfielderror(user.username,用户名不能
15、为空!用户名不能为空!); else string f1=a-za-zw*; if(!pattern.matches(f1,user.getusername() addfielderror(user.username,格式不正确!格式不正确!); if(user.getuserpwd().length()=0|user.getuserpwd()=null) addfielderror(user.userpwd,密码不能为空!); else if(user.getuserpwd().length()6) addfielderror(user.userpwd,密码长度不能小于6!); if(use
16、rpwd.length()=0|userpwd=null) addfielderror(userpwd,确认密码不能为空!); else if(userpwd.equals(user.getuserpwd() addfielderror(userpwd,密码不一致!); if(user.getuseremail().length()=0|user.getuseremail()=null) addfielderror(user.useremail,邮件地址不能为空!);elsestring f2=w+(-+.w+)*w+(-.w+)*.w+(-.w+)*; if(!pattern.matches
17、(f2,user.getuseremail() addfielderror(user.username,邮箱地址格式不正确!); (4)编写注册页面:ch12_5_regist.jsp,其代码如下:注册页面 bodyfont-size:12px; #titlecolor:#ff7b0b;font-size:20px;font-weight:bold; .tdheight:30px; .infocolor:#bbbbbb; function check(frm) if(frm.accept.checked=false) alert(您需要仔细阅读用户使用协议,并同意接受协议!); return
18、false; return true; 填写注册信息 用户名:* 用户名由字母开头,后跟字母、数字或下划线!密码:* 设置登录密码,至少6位!确认密码:* 请再输入一次你的密码!性别:* 请选择你的性别!邮箱地址:* 请填写您的常用邮箱,可以用此邮箱找回密码!基本情况:* 我已经仔细阅读并同意接受用户使用协议 (5)编写注册成功页面:)编写注册成功页面:success.jsp: 校验成功 校验通过,用户信息如下: 用户名: 密码: 确认密码: 性别: 邮箱地址: 基本情况: (6)修改)修改struts.xml配置配置action,配置信息如下,配置信息如下: /regi
19、ster.jsp /success.jsp 2 使用验证文件实现验证 基于验证文件的输入验证方式,将验证规则保存基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中在特定的验证文件中 。实现验证的要求:实现验证的要求:1. 验证文件的命名规则验证文件的命名规则 验证文件的命名规则是:验证文件的命名规则是:actio类名类名-validatin.xml。如果一个。如果一个action有多个逻辑处理方法,要为某个特定方法做验证,其命名规有多个逻辑处理方法,要为某个特定方法做验证,其命名规则是:则是:action类名类名-action逻辑名逻辑名-validatin.xml(其中,(其中,a
20、ction逻逻辑名,是指辑名,是指struts.xml中的对应该处理方法的中的对应该处理方法的action配置中的配置中的name值)。值)。 例如:如果该校验器对应的例如:如果该校验器对应的action类名为类名为register2action,那么验证文件的名为那么验证文件的名为register2action-validation.xml。该验证文。该验证文件一般都是保存在与件一般都是保存在与action类相同的目录下,这样对于不同的类相同的目录下,这样对于不同的action处理请求将会加载不同的校验文件。处理请求将会加载不同的校验文件。2. 校验器 struts2框架中提供了大量的内置校
21、验器,在项目开发中,框架中提供了大量的内置校验器,在项目开发中,大部分校验功能都可以通过内置校验器来完成。大部分校验功能都可以通过内置校验器来完成。 struts2框架提供两种配置校验器的方式:框架提供两种配置校验器的方式: 字段校验器配置风格字段校验器配置风格 非字段校验器配置风格非字段校验器配置风格。(1)字段校验器配置风格)字段校验器配置风格 如果使用字段校验器配置风格,如果使用字段校验器配置风格,校验文件以校验文件以元素为基本元素为基本元素元素,这个基本元素的,这个基本元素的name属性值为被校验的字段,该风格的格式:属性值为被校验的字段,该风格的格式: 参数值参数值 校验失败提示的信
22、息校验失败提示的信息 . 3常用的字段检验器常用的字段检验器 常用的字段校验器有常用的字段校验器有: 必填校验器必填校验器要求字段必须有值,校验字段是否为空要求字段必须有值,校验字段是否为空 必填字符串校验器必填字符串校验器要求字段为一个非空字符串,并且长度需要大于要求字段为一个非空字符串,并且长度需要大于0 字符串长度校验器字符串长度校验器用于校验字段中字符串长度在指定的范围用于校验字段中字符串长度在指定的范围 整数校验器整数校验器用于将要求被校验的整数在指定范围内,否则校验失败用于将要求被校验的整数在指定范围内,否则校验失败 日期校验器日期校验器 邮件地址校验器邮件地址校验器 网址校验器网
23、址校验器 表达式校验器表达式校验器 字段表达式校验器字段表达式校验器 (1)必填检验器:)必填检验器:required 要求字段必须有值,校验字段是否为空。要求字段必须有值,校验字段是否为空。 fieldname:指定校验字段的名称。:指定校验字段的名称。例如:例如: 用户名不能为空!用户名不能为空! (2)必填字符串校验器:)必填字符串校验器:requiredstring 要求字段为一个非空字符串,并且长度需要大于要求字段为一个非空字符串,并且长度需要大于0。 fieldname:指定校验字段的名称,:指定校验字段的名称, trim:指定是否在校验之前对字符串进行整理,截取:指定是否在校验之
24、前对字符串进行整理,截取字符串前后空格,默认值为字符串前后空格,默认值为true。例如:例如: true 用户名不能为空!用户名不能为空! (3)整数校验器:)整数校验器:int 用于将要求被校验的整数在指定范围内,否则校验失败。用于将要求被校验的整数在指定范围内,否则校验失败。 fieldname:指定校验字段的名称;:指定校验字段的名称; max:指定整数的最大值,可选项,不选为最大值不限制;:指定整数的最大值,可选项,不选为最大值不限制; min:指定整数的最小值,可选项,不选为最小值不限制。:指定整数的最小值,可选项,不选为最小值不限制。例如:例如: 1 100 年龄必须在年龄必须在1
25、到到100之间!之间! (4)日期校验器:)日期校验器:date 要求字段的日期值在指定的范围内。要求字段的日期值在指定的范围内。 fieldname:指定校验字段的名称;:指定校验字段的名称; max:指定整数的最大值,可选项,不选为最大值不限制;:指定整数的最大值,可选项,不选为最大值不限制; min:指定整数的最小值,可选项,不选为最小值不限制。:指定整数的最小值,可选项,不选为最小值不限制。例如:例如: 必须是日期格式!必须是日期格式! 1900-01-01 2090-12-31 key=userbirthday.range (5)邮件地址校验器:)邮件地址校验器:email 要求指定字段必须满足邮件地址规则(采用正则表达描要求指定字段必须满足邮件地址规则(采用正则表达描述)。述)。例如:例如: 你的电子邮件地址必须是一个有效的电邮你的电子邮件地址必须是一个有效的电邮地址!地址! (6)网址校验器:)网址校验器:url 要求被校验字段必须为合法的要求被校验字段必须为合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025标准私人房产合同
- 2024年素质教育培训行业市场调查研究及发展战略规划报告
- 宁夏吸塑托盘项目资金申请报告
- 2024-2027年中国软件建模行业市场调研及未来发展趋势预测报告
- 湖北省2024年初中学业水平考试模拟训练语文试卷含答案
- 2020-2025年中国安全防护服行业市场运营现状及投资战略咨询报告
- 年产吨无氧光亮铜杆项目可行性研究报告
- 2024-2027年中国UWB定位市场竞争态势及行业投资潜力预测报告
- 2025年全球核燃料行业市场调研与发展前景预测分析报告
- 智能工业车辆项目可行性研究报告申请立项
- 医院感染监测清单
- Q∕SY 05592-2019 油气管道管体修复技术规范
- 《1.我又长大了一岁》教学课件∣泰山版
- JIS G3141-2021 冷轧钢板及钢带标准
- qes三体系审核培训ppt课件
- 篮球校本课程教材
- 小学数学校本教材(共51页)
- 遗传群体文献解读集
- 工艺装备环保性与安全性的设计要点
- [玻璃幕墙施工方案]隐框玻璃幕墙施工方案
- 国家开放大学电大本科《管理案例分析》2023-2024期末试题及答案(试卷代号:1304)
评论
0/150
提交评论