《框架及应用主要组件作业与要求.ppt》由会员分享,可在线阅读,更多相关《框架及应用主要组件作业与要求.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3、Struts2的拦截器的拦截器 拦截器(拦截器(Interceptor)是)是Struts2的核心组成部分。的核心组成部分。拦截器动态拦截拦截器动态拦截Action调用的对象,它提供了一种机调用的对象,它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可制,使开发者可以定义一个特定的功能模块,这个模块可以在以在Action执行之前或者之后运行,也可以在一个执行之前或者之后运行,也可以在一个Action执行之前阻止执行之前阻止Action执行。执行。拦截器分为两类:拦截器分为两类:Struts2提供的内建拦截器和用户自提供的内建拦截器和用户自定义的拦截器。定义的拦截器。Strut
2、s2拦截器的自定义实现 为了实现自定义拦截器,为了实现自定义拦截器,Struts2提供了提供了Interceptor接口,以及对该接口实现的一个抽象拦截器类接口,以及对该接口实现的一个抽象拦截器类(AbstractInterceptor)。)。实现拦截器类一般可以实现实现拦截器类一般可以实现Interceptor接口,或者直接接口,或者直接继承继承AbstractInterceptor类。类。Struts2还提供了一个还提供了一个MethodFilterIntercepter类,该类类,该类是是AbstractInterceptor类的子类,需要实现的拦截器支持类的子类,需要实现的拦截器支持方
3、法过滤性,就继承方法过滤性,就继承MethodFilterIntercepter。用户自定义一个拦截器一般需要三步:用户自定义一个拦截器一般需要三步:(1)自定义一个实现)自定义一个实现Interceptor接口接口 (或继承(或继承AbstractInterceptor 或继承或继承MethodFilterIntercepter)的类。)的类。(2)在)在struts.xml中注册上一步中定义的拦截器。中注册上一步中定义的拦截器。(3)在需要使用的)在需要使用的Action中引用上述定义的拦截器。中引用上述定义的拦截器。1.拦截器接口:拦截器接口:Interceptor Struts2提供的
4、提供的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的一种实现,其中,的一种实现,其中,init
6、()和和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自定义拦截器自定义拦截器:实现接口实现接口Intercepter(或继承(或继承Ab
7、stractInterceptor),并在),并在interceptor方法中加入有关的处理代码,其代码格式如下:方法中加入有关的处理代码,其代码格式如下:package interceptor;public class MyInterceptor extends AbstractInterceptor public String intercept(ActionInvocation invocation)throws Exception System.out.println(Before);/在在Action之前调用之前调用String result=invocation.invoke();
8、/*invocation.invoke()方法检查是否还有拦截器,若有,则方法检查是否还有拦截器,若有,则继续调用余下的拦截器,若没有,则执行继续调用余下的拦截器,若没有,则执行action的业务逻辑,并返的业务逻辑,并返回值回值*/System.out.println(After);return result;4在在Struts.xml中配置拦截器中配置拦截器 /success.jsp /test.jsp 5.在在interceptor方法中,利用参数方法中,利用参数ActionInvocation可获取页面提交的信息可获取页面提交的信息public String intercept(Act
9、ionInvocation 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()方法是专门用来验证数据的,实现的时方法是专门用来验证数据的,实现的时候需要继承候需要继承A
11、ctionSupport类,并重写类,并重写validate()方法方法来完成输入验证来完成输入验证。案例案例实现客户注册输入验证实现客户注册输入验证 使用使用validate()方法实现对注册页面进行验证。注方法实现对注册页面进行验证。注册页面如下图所示,若输入的数据验证成功,进入验证册页面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册成功页面(该页面显示注册信息),否则,仍返回注册页面。页面。【分析分析】对于该案例,根据对于该案例,根据Struts2的的MVC设计思想,需要设设计思想,需要设计计3部分组件:部分组件:(1)模型组件:)模型组件:注
12、册用户的注册用户的JavaBean:User.Java 实现注册信息添加到数据库的实现注册信息添加到数据库的JavaBean:userDbase.java(2)Action控制器的设计:控制器的设计:RegisterAction.java,在该,在该控制器中有两个主要方法:控制器中有两个主要方法:public String register():实现注册:实现注册 public void validate():实现注册前的信息验证:实现注册前的信息验证(3)设计视图:)设计视图:注册页面(注册页面(Regist.jsp):按上图所示的页面设计):按上图所示的页面设计 注册成功后,显示注册信息的
13、页面:注册成功后,显示注册信息的页面: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 private User user;private String userPwd;/省略了
14、属性的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,用户名不能为空!用户名不能为空!);else String f1=a-zA-Zw*;if(!Patt
15、ern.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(userPwd.length()=0|userPwd=null)addFieldError(userPwd,确认
16、密码不能为空!);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(f2,user.getUserEmail()addFieldError(user.userName,邮箱地址格式不正
17、确!);(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 false;return true;填写注册信息 用户名:*用户名由字母开头,后跟字母、数字或下划线!密码:*设置登录密码,至少6位!确
18、认密码:*请再输入一次你的密码!性别:*请选择你的性别!邮箱地址:*请填写您的常用邮箱,可以用此邮箱找回密码!基本情况:*我已经仔细阅读并同意接受用户使用协议 (5)编写注册成功页面:)编写注册成功页面:Success.jsp:校验成功 校验通过,用户信息如下:用户名:密码:确认密码:性别:邮箱地址:基本情况:(6)修改)修改struts.xml配置配置Action,配置信息如下,配置信息如下:/register.jsp /success.jsp 2 使用验证文件实现验证 基于验证文件的输入验证方式,将验证规则保存基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中在特定的验
19、证文件中。实现验证的要求:实现验证的要求:1.验证文件的命名规则验证文件的命名规则 验证文件的命名规则是:验证文件的命名规则是:Actio类名类名-validatin.xml。如果一个。如果一个Action有多个逻辑处理方法,要为某个特定方法做验证,其命名规有多个逻辑处理方法,要为某个特定方法做验证,其命名规则是:则是:Action类名类名-Action逻辑名逻辑名-validatin.xml(其中,(其中,Action逻逻辑名,是指辑名,是指struts.xml中的对应该处理方法的中的对应该处理方法的action配置中的配置中的name值)。值)。例如:如果该校验器对应的例如:如果该校验器对
20、应的Action类名为类名为Register2Action,那么验证文件的名为那么验证文件的名为Register2Action-validation.xml。该验证文。该验证文件一般都是保存在与件一般都是保存在与Action类相同的目录下,这样对于不同的类相同的目录下,这样对于不同的Action处理请求将会加载不同的校验文件。处理请求将会加载不同的校验文件。2.校验器 Struts2框架中提供了大量的内置校验器,在项目开发中,框架中提供了大量的内置校验器,在项目开发中,大部分校验功能都可以通过内置校验器来完成。大部分校验功能都可以通过内置校验器来完成。Struts2框架提供两种配置校验器的方式
21、:框架提供两种配置校验器的方式:字段校验器配置风格字段校验器配置风格 非字段校验器配置风格非字段校验器配置风格。(1)字段校验器配置风格)字段校验器配置风格 如果使用字段校验器配置风格,如果使用字段校验器配置风格,校验文件以校验文件以元素为基本元素为基本元素元素,这个基本元素的,这个基本元素的name属性值为被校验的字段,该风格的格式:属性值为被校验的字段,该风格的格式:参数值参数值 校验失败提示的信息校验失败提示的信息 .3常用的字段检验器常用的字段检验器 常用的字段校验器有常用的字段校验器有:必填校验器必填校验器要求字段必须有值,校验字段是否为空要求字段必须有值,校验字段是否为空 必填字符
22、串校验器必填字符串校验器要求字段为一个非空字符串,并且长度需要大于要求字段为一个非空字符串,并且长度需要大于0 字符串长度校验器字符串长度校验器用于校验字段中字符串长度在指定的范围用于校验字段中字符串长度在指定的范围 整数校验器整数校验器用于将要求被校验的整数在指定范围内,否则校验失败用于将要求被校验的整数在指定范围内,否则校验失败 日期校验器日期校验器 邮件地址校验器邮件地址校验器 网址校验器网址校验器 表达式校验器表达式校验器 字段表达式校验器字段表达式校验器(1)必填检验器:)必填检验器:required 要求字段必须有值,校验字段是否为空。要求字段必须有值,校验字段是否为空。field
23、Name:指定校验字段的名称。:指定校验字段的名称。例如:例如:用户名不能为空!用户名不能为空!(2)必填字符串校验器:)必填字符串校验器:requiredstring 要求字段为一个非空字符串,并且长度需要大于要求字段为一个非空字符串,并且长度需要大于0。fieldName:指定校验字段的名称,:指定校验字段的名称,trim:指定是否在校验之前对字符串进行整理,截取:指定是否在校验之前对字符串进行整理,截取字符串前后空格,默认值为字符串前后空格,默认值为true。例如:例如:true 用户名不能为空!用户名不能为空!(3)整数校验器:)整数校验器:int 用于将要求被校验的整数在指定范围内,
24、否则校验失败。用于将要求被校验的整数在指定范围内,否则校验失败。fieldname:指定校验字段的名称;:指定校验字段的名称;max:指定整数的最大值,可选项,不选为最大值不限制;:指定整数的最大值,可选项,不选为最大值不限制;min:指定整数的最小值,可选项,不选为最小值不限制。:指定整数的最小值,可选项,不选为最小值不限制。例如:例如:1 100 年龄必须在年龄必须在1到到100之间!之间!(4)日期校验器:)日期校验器:date 要求字段的日期值在指定的范围内。要求字段的日期值在指定的范围内。fieldname:指定校验字段的名称;:指定校验字段的名称;max:指定整数的最大值,可选项,
25、不选为最大值不限制;:指定整数的最大值,可选项,不选为最大值不限制;min:指定整数的最小值,可选项,不选为最小值不限制。:指定整数的最小值,可选项,不选为最小值不限制。例如:例如:必须是日期格式!必须是日期格式!1900-01-01 2090-12-31 key=userBirthday.range (5)邮件地址校验器:)邮件地址校验器:email 要求指定字段必须满足邮件地址规则(采用正则表达描要求指定字段必须满足邮件地址规则(采用正则表达描述)。述)。例如:例如:你的电子邮件地址必须是一个有效的电邮你的电子邮件地址必须是一个有效的电邮地址!地址!(6)网址校验器:)网址校验器:url
26、要求被校验字段必须为合法的要求被校验字段必须为合法的URL地址。地址。例如:例如:无效的网络地址!无效的网络地址!(7)字段表达式校验器:)字段表达式校验器:fieldexpression 要求字段必须满足一个逻辑表达式。要求字段必须满足一个逻辑表达式。fieldname:指定校验字段的名称,:指定校验字段的名称,expression:为一个逻辑表达式,使用:为一个逻辑表达式,使用OGNL表达式。表达式。例如:例如:校验失败!校验失败!(8)正则表达式校验器:)正则表达式校验器:regex 要求字段必须满足某种格式的正规式,要求字段必须满足某种格式的正规式,expression_r:为一个逻辑
27、表达式,使用正规表达式:为一个逻辑表达式,使用正规表达式例如:例如:您输入的用户名只能是长度在您输入的用户名只能是长度在4到到25之间的之间的字母和数字字母和数字 (9)字符串长度校验器:)字符串长度校验器:stinglength 用于校验字段中字符串长度在指定的范围内。用于校验字段中字符串长度在指定的范围内。例如:例如:16 6 姓名长度为姓名长度为$minLength到到$maxLength个字符!个字符!案例案例实现客户注册输入验证实现客户注册输入验证 使用配置验证文件实现对对注册页面的验证使用配置验证文件实现对对注册页面的验证。注册页。注册页面如下图所示,若输入的数据验证成功,进入验证成功面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册页面。页面(该页面显示注册信息),否则,仍返回注册页面。作业实现客户注册输入验证实现客户注册输入验证 分别利用validate()方法方法和和配置验证文件,配置验证文件,实现对注册页实现对注册页面进行验证。注册页面如下图所示,若输入的数据验证面进行验证。注册页面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册页面。则,仍返回注册页面。
限制150内