《框架及应用主要组件作业与要求》由会员分享,可在线阅读,更多相关《框架及应用主要组件作业与要求(37页珍藏版)》请在金锄头文库上搜索。
1、3、Struts2的拦截器的拦截器 拦截器(拦截器(Interceptor)是)是Struts2的核心组成部分。的核心组成部分。 拦截器动态拦截拦截器动态拦截Action调用的对象,它提供了一种机调用的对象,它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可制,使开发者可以定义一个特定的功能模块,这个模块可以在以在Action执行之前或者之后运行,也可以在一个执行之前或者之后运行,也可以在一个Action执行之前阻止执行之前阻止Action执行。执行。 拦截器分为两类:拦截器分为两类:Struts2提供的内建拦截器和用户自提供的内建拦截器和用户自定义的拦截器。定义的拦截器。 镀鼎
2、议覆篙残阐灾擦拍眨溃炉妥下钡蚜趋件附坠慢波骗廷旧曝森桩卿臂狂框架及应用主要组件作业与要求框架及应用主要组件作业与要求Struts2拦截器的自定义实现 为了实现自定义拦截器,为了实现自定义拦截器,Struts2提供了提供了Interceptor接口,以及对该接口实现的一个抽象拦截器类接口,以及对该接口实现的一个抽象拦截器类(AbstractInterceptor)。)。 实现拦截器类一般可以实现实现拦截器类一般可以实现Interceptor接口,或者直接接口,或者直接继承继承AbstractInterceptor类。类。 Struts2还提供了一个还提供了一个MethodFilterInterc
3、epter类,该类类,该类是是AbstractInterceptor类的子类,需要实现的拦截器支持类的子类,需要实现的拦截器支持方法过滤性,就继承方法过滤性,就继承MethodFilterIntercepter。锐蒜峻骇刀苦巧制秦验鬃煞烫毡佬好淤境框捂渭剂更普烦词羡摇干遵波售框架及应用主要组件作业与要求框架及应用主要组件作业与要求用户自定义一个拦截器一般需要三步:用户自定义一个拦截器一般需要三步:(1)自定义一个实现)自定义一个实现Interceptor接口接口 (或继承(或继承AbstractInterceptor 或继承或继承MethodFilterIntercepter)的类。)的类。(
4、2)在)在struts.xml中注册上一步中定义的拦截器。中注册上一步中定义的拦截器。(3)在需要使用的)在需要使用的Action中引用上述定义的拦截器。中引用上述定义的拦截器。帧淆查揍歇扳冀卞阅状宽枪兔做因酸舌敬蹲们菲揉券琐拦邹呈汞烙光希寅框架及应用主要组件作业与要求框架及应用主要组件作业与要求1. 拦截器接口:拦截器接口:Interceptor Struts2提供的提供的Interceptor接口(接口(Interceptor.java)的代码如下:)的代码如下:import com.opensymphony.xwork2.ActionInvocation;import java.io.S
5、erializable;public interface Interceptor extends Serializable void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; Intercept 方法是拦截器的核心方法,实现具体的拦截操作,方法是拦截器的核心方法,实现具体的拦截操作,返回一个字符串作为逻辑视图。返回一个字符串作为逻辑视图。 与与Action一样,如果拦截器能够成功调用一样,如果拦截器能够成功调用Action,则,则Action中的中的execut
6、e()方法返回一个字符串类型值,作为逻辑视方法返回一个字符串类型值,作为逻辑视图,否则,返回开发者自定义的逻辑视图。图,否则,返回开发者自定义的逻辑视图。揽曹疹瓶幼褒拂勺狮瀑隐浅恋宪届砂培杭厂自锑行拦窒舆便鹿成舔枫兵专框架及应用主要组件作业与要求框架及应用主要组件作业与要求2. 抽象拦截器类:抽象拦截器类:AbstractInterceptor 抽象拦截器类(抽象拦截器类(AbstractInterceptor),是对接口),是对接口Interceptor的一种实现,其中,的一种实现,其中,init()和和destroy()方法是空方法是空实现。实现。 import com.opensymph
7、ony.xwork2.ActionInvocation;public abstract class AbstractInterceptor implements Interceptor public void init() public void destroy() public abstract String intercept(ActionInvocation invocation) throws Exception;竹裂事觅除哟藩媳杭袜西嘶穷贫一抨虽耪惺延啡任倔观尝伶方激栋责细晚框架及应用主要组件作业与要求框架及应用主要组件作业与要求3自定义拦截器自定义拦截器: 实现接口实现接口Inte
8、rcepter(或继承(或继承AbstractInterceptor),并在),并在interceptor方法中加入有关的处理代码,其代码格式如下:方法中加入有关的处理代码,其代码格式如下:package interceptor;public class MyInterceptor extends AbstractInterceptor public String intercept(ActionInvocation invocation) throws Exception System.out.println(Before); /在在Action之前调用之前调用String result =
9、 invocation.invoke();/* invocation.invoke()方法检查是否还有拦截器,若有,则方法检查是否还有拦截器,若有,则继续调用余下的拦截器,若没有,则执行继续调用余下的拦截器,若没有,则执行action的业务逻辑,并返的业务逻辑,并返回值回值*/System.out.println(After);return result;连奶频绢碌穆即藻曲雕秧悄姥哭凝西遂卜鹃豺售蝴喧铁钩猴大棕漠菠锈嘉框架及应用主要组件作业与要求框架及应用主要组件作业与要求4在在Struts.xml中配置拦截器中配置拦截器 /success.jsp /test.jsp 伦市掂眷雍反跑铺鲜谰眺许
10、惺痰踏颤缄亩坏兄烟诛碎掺曝耗箕卧勿虽织仇框架及应用主要组件作业与要求框架及应用主要组件作业与要求5. 在在interceptor方法中,利用参数方法中,利用参数ActionInvocation可获取页面提交的信息可获取页面提交的信息public String intercept(ActionInvocation ai) throws Exception Map session = invocation.getInvocationContext().getSession();if(session.get(user) = null) return login; else return ai.inv
11、oke();傅予盗吨绅霉铸郸撅森相丝苞率农揉揩忍揖蔚类褪男顷誊粳涅苍胖捅渝庇框架及应用主要组件作业与要求框架及应用主要组件作业与要求案例: 开发一个网上论坛过滤系统,如果网友发表的开发一个网上论坛过滤系统,如果网友发表的有不文明的语言,将通过拦截器对不文明的文字有不文明的语言,将通过拦截器对不文明的文字进行自动替代。只是给出了一种简单的过滤,过进行自动替代。只是给出了一种简单的过滤,过滤是否有滤是否有“讨厌讨厌”文字,若有文字,若有“讨厌讨厌”,则用,则用“喜欢喜欢”代替要过滤的内容代替要过滤的内容“讨厌讨厌”,形成新的文,形成新的文本内容并显示在论坛上。运行界面如图所示。本内容并显示在论坛上
12、。运行界面如图所示。疙玉距伐成酞崭醒踞亡托渡抱战亲解纱糕儒坤两报果然蔚谐赚箱伤薪腕滦框架及应用主要组件作业与要求框架及应用主要组件作业与要求常洛爆暂衡率漏俯赁坡萎绦老帛宅恢延壮敏管急占寺涸轰血极往见荚茬坍框架及应用主要组件作业与要求框架及应用主要组件作业与要求Struts2的输入验证 Struts2提供了安全的服务器验证方法:提供了安全的服务器验证方法: (1)一种是使用)一种是使用validate()方法,方法, (2)另一种是配置验证(使用配置验证文件)另一种是配置验证(使用配置验证文件) 荔洒场钦厉必溉靴剐源撼轰笑佑柒浦玛与瘟赂醇似伯条祷颊研拥婶触处奏框架及应用主要组件作业与要求框架及应
13、用主要组件作业与要求1 使用使用validate()方法实现验证方法实现验证 validate()方法是专门用来验证数据的,实现的时方法是专门用来验证数据的,实现的时候需要继承候需要继承ActionSupport类,并重写类,并重写validate()方法方法来完成输入验证来完成输入验证 。就瞪扭惑厕除鸟蛇烬兰竣旺赃厄骨郸稽必凹惊浊貌吏涕顾汰抒搅尾尿疑赊框架及应用主要组件作业与要求框架及应用主要组件作业与要求案例案例实现客户注册输入验证实现客户注册输入验证 使用使用validate()方法实现对注册页面进行验证。注方法实现对注册页面进行验证。注册页面如下图所示,若输入的数据验证成功,进入验证册
14、页面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册成功页面(该页面显示注册信息),否则,仍返回注册页面。页面。膜艘笑胜染践挠泞制入塔控赦杨涡拐橡拭副植相帕颗汛裳酝旭盅瑟蝇革猾框架及应用主要组件作业与要求框架及应用主要组件作业与要求【分析】【分析】 对于该案例,根据对于该案例,根据Struts2的的MVC设计思想,需要设设计思想,需要设计计3部分组件:部分组件:(1)模型组件:)模型组件: 注册用户的注册用户的JavaBean:User.Java 实现注册信息添加到数据库的实现注册信息添加到数据库的JavaBean:userDbase.java(2)A
15、ction控制器的设计:控制器的设计:RegisterAction.java,在该,在该控制器中有两个主要方法:控制器中有两个主要方法: public String register():实现注册:实现注册 public void validate():实现注册前的信息验证:实现注册前的信息验证(3)设计视图:)设计视图: 注册页面(注册页面(Regist.jsp):按上图所示的页面设计):按上图所示的页面设计 注册成功后,显示注册信息的页面:注册成功后,显示注册信息的页面:Success.jsp。崇多硬嘘潦埃楼饭臆犯如硒赢酞伙助咳狠汞剿态泵银必咱鹤盛目状襄裸泌框架及应用主要组件作业与要求框架
16、及应用主要组件作业与要求(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;/省略了属性的Setter、Getter方法p
17、ublic 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,用户名不
18、能为空!用户名不能为空!); 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.getUserP
19、wd().length()6) addFieldError(user.userPwd,密码长度不能小于6!); if(userPwd.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,邮件地址不能为空!);el
20、seString f2=w+(-+.w+)*w+(-.w+)*.w+(-.w+)*; if(!Pattern.matches(f2,user.getUserEmail() addFieldError(user.userName,邮箱地址格式不正确!); 臼醒羹獭裕廊暑逼羞腾邻氖血熏廊仍慧伎吠读难炸揪糠靶抑攒砧漳诗囤窍框架及应用主要组件作业与要求框架及应用主要组件作业与要求(4)编写注册页面:ch12_5_Regist.jsp,其代码如下:注册页面 bodyfont-size:12px; #titlecolor:#FF7B0B;font-size:20px;font-weight:bold; .
21、tdheight:30px; .infocolor:#BBBBBB; function check(frm) if(frm.accept.checked=false) alert(您需要仔细阅读用户使用协议,并同意接受协议!); return false; return true; 莉单匿嘎拿橱松秤粟戴匹赊擞快啸扶丈市仿碳谎灿牛逞棘烙倪彰竿君角潘框架及应用主要组件作业与要求框架及应用主要组件作业与要求 填写注册信息 用户名:* 用户名由字母开头,后跟字母、数字或下划线!密码:* 设置登录密码,至少6位!确认密码:* 请再输入一次你的密码!性别:* 请选择你的性别!邮箱地址:* 请填写您的常用邮
22、箱,可以用此邮箱找回密码!基本情况:* 我已经仔细阅读并同意接受用户使用协议 侗锥巫玖禹丧知催买泥赊篮眉汇租煮众灸憋五围舍濒楷锯耐则醒武吞晦警框架及应用主要组件作业与要求框架及应用主要组件作业与要求(5)编写注册成功页面:)编写注册成功页面:Success.jsp: 校验成功 校验通过,用户信息如下: 用户名: 密码: 确认密码: 性别: 邮箱地址: 基本情况: 诣陈玩熔搓灾板官影郊竿蜘叙瓤郴莲涛泻肖扣初经址模卯骗姬张晓企到蓬框架及应用主要组件作业与要求框架及应用主要组件作业与要求(6)修改)修改struts.xml配置配置Action,配置信息如下,配置信息如下: /regis
23、ter.jsp /success.jsp 诫已喳序襄妇达嫡阶漾探休湃庙眯藐居习傀囱姐咀臆畸摇旁伦触椎治谬炕框架及应用主要组件作业与要求框架及应用主要组件作业与要求2 使用验证文件实现验证 基于验证文件的输入验证方式,将验证规则保存基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中在特定的验证文件中 。实现验证的要求:实现验证的要求:1. 验证文件的命名规则验证文件的命名规则 验证文件的命名规则是:验证文件的命名规则是:Actio类名类名-validatin.xml。如果一个。如果一个Action有多个逻辑处理方法,要为某个特定方法做验证,其命名规有多个逻辑处理方法,要为某个特定方法做
24、验证,其命名规则是:则是:Action类名类名-Action逻辑名逻辑名-validatin.xml(其中,(其中,Action逻逻辑名,是指辑名,是指struts.xml中的对应该处理方法的中的对应该处理方法的action配置中的配置中的name值)。值)。 例如:如果该校验器对应的例如:如果该校验器对应的Action类名为类名为Register2Action,那么验证文件的名为那么验证文件的名为Register2Action-validation.xml。该验证文。该验证文件一般都是保存在与件一般都是保存在与Action类相同的目录下,这样对于不同的类相同的目录下,这样对于不同的Actio
25、n处理请求将会加载不同的校验文件。处理请求将会加载不同的校验文件。故兆秉防驴娶斩霄狄治柱茧伶动避甭绩角蒜贼写抄蜘抽璃晋宾技串毒希硷框架及应用主要组件作业与要求框架及应用主要组件作业与要求2. 校验器 Struts2框架中提供了大量的内置校验器,在项目开发中,框架中提供了大量的内置校验器,在项目开发中,大部分校验功能都可以通过内置校验器来完成。大部分校验功能都可以通过内置校验器来完成。 Struts2框架提供两种配置校验器的方式:框架提供两种配置校验器的方式: 字段校验器配置风格字段校验器配置风格 非字段校验器配置风格非字段校验器配置风格。桓梭幽甘圈淑也欣汕帖哗记桅辉刨畴痈忆慷应音近棺六巾逝悸懦
26、栈错尺英框架及应用主要组件作业与要求框架及应用主要组件作业与要求(1)字段校验器配置风格)字段校验器配置风格 如果使用字段校验器配置风格,如果使用字段校验器配置风格,校验文件以校验文件以元素为基本元素为基本元素元素,这个基本元素的,这个基本元素的name属性值为被校验的字段,该风格的格式:属性值为被校验的字段,该风格的格式: 参数值参数值 校验失败提示的信息校验失败提示的信息 . 烛掩姜涨霓雌屠侗陕稿糟迷踢犀揣妆捉澳晚榷庸愚巩临殆峰涟彻拷赃柬际框架及应用主要组件作业与要求框架及应用主要组件作业与要求3常用的字段检验器常用的字段检验器 常用的字段校验器有常用的字段校验器有: 必填校验器必填校验器
27、要求字段必须有值,校验字段是否为空要求字段必须有值,校验字段是否为空 必填字符串校验器必填字符串校验器要求字段为一个非空字符串,并且长度需要大于要求字段为一个非空字符串,并且长度需要大于0 字符串长度校验器字符串长度校验器用于校验字段中字符串长度在指定的范围用于校验字段中字符串长度在指定的范围 整数校验器整数校验器用于将要求被校验的整数在指定范围内,否则校验失败用于将要求被校验的整数在指定范围内,否则校验失败 日期校验器日期校验器 邮件地址校验器邮件地址校验器 网址校验器网址校验器 表达式校验器表达式校验器 字段表达式校验器字段表达式校验器 索郎疥令妄疫蓄颊覆鞍痈惋哥浊扎鸳质拙廷嚎妹咨忌林卓镰
28、挟湃分缸息噪框架及应用主要组件作业与要求框架及应用主要组件作业与要求(1)必填检验器:)必填检验器:required 要求字段必须有值,校验字段是否为空。要求字段必须有值,校验字段是否为空。 fieldName:指定校验字段的名称。:指定校验字段的名称。例如:例如: 用户名不能为空!用户名不能为空! 酬膛腰写脏室夯碾忌琳年喉诱当锈盼敛恳庭廷欧腑茫鄂比郝坡患鹏没演康框架及应用主要组件作业与要求框架及应用主要组件作业与要求(2)必填字符串校验器:)必填字符串校验器:requiredstring 要求字段为一个非空字符串,并且长度需要大于要求字段为一个非空字符串,并且长度需要大于0。 fieldNa
29、me:指定校验字段的名称,:指定校验字段的名称, trim:指定是否在校验之前对字符串进行整理,截取:指定是否在校验之前对字符串进行整理,截取字符串前后空格,默认值为字符串前后空格,默认值为true。例如:例如: true 用户名不能为空!用户名不能为空! 当敞誉补倘惫片津栏灯敛冤萤纂剖肤摇谆炸哎尽莎迹腿栖幼宁销糊讽暗坦框架及应用主要组件作业与要求框架及应用主要组件作业与要求(3)整数校验器:)整数校验器:int 用于将要求被校验的整数在指定范围内,否则校验失败。用于将要求被校验的整数在指定范围内,否则校验失败。 fieldname:指定校验字段的名称;:指定校验字段的名称; max:指定整数
30、的最大值,可选项,不选为最大值不限制;:指定整数的最大值,可选项,不选为最大值不限制; min:指定整数的最小值,可选项,不选为最小值不限制。:指定整数的最小值,可选项,不选为最小值不限制。例如:例如: 1 100 年龄必须在年龄必须在1到到100之间!之间! 府勒搐钥龚鄙盆象阶击期狂弗丙映碑慌瞻缺谎陶缴致佬妇氯贞粟握涧胞隶框架及应用主要组件作业与要求框架及应用主要组件作业与要求(4)日期校验器:)日期校验器:date 要求字段的日期值在指定的范围内。要求字段的日期值在指定的范围内。 fieldname:指定校验字段的名称;:指定校验字段的名称; max:指定整数的最大值,可选项,不选为最大值
31、不限制;:指定整数的最大值,可选项,不选为最大值不限制; min:指定整数的最小值,可选项,不选为最小值不限制。:指定整数的最小值,可选项,不选为最小值不限制。例如:例如: 必须是日期格式!必须是日期格式! 1900-01-01 2090-12-31 key=userBirthday.range 滨诞奄罕婚浮机则梢妥哇秆丝骏讯逆祷喀负速奔蛋漆筋饰镣葛记粟滦复溅框架及应用主要组件作业与要求框架及应用主要组件作业与要求(5)邮件地址校验器:)邮件地址校验器:email 要求指定字段必须满足邮件地址规则(采用正则表达描要求指定字段必须满足邮件地址规则(采用正则表达描述)。述)。例如:例如: 你的电子
32、邮件地址必须是一个有效的电邮你的电子邮件地址必须是一个有效的电邮地址!地址! 和誉硼擅旬攀氓症自柯悉呕筑举斜匡诈冤欣豁学骚俭蛰适能旋旱召闭陇七框架及应用主要组件作业与要求框架及应用主要组件作业与要求(6)网址校验器:)网址校验器:url 要求被校验字段必须为合法的要求被校验字段必须为合法的URL地址。地址。例如:例如: 无效的网络地址!无效的网络地址! 吴门凋高甲匿捞专插漳疏胞嗅荡讳诫柠稼坑藐柜椒略邢鳃面潮褒擞扑汀咀框架及应用主要组件作业与要求框架及应用主要组件作业与要求(7)字段表达式校验器:)字段表达式校验器: fieldexpression 要求字段必须满足一个逻辑表达式。要求字段必须满
33、足一个逻辑表达式。 fieldname:指定校验字段的名称,:指定校验字段的名称, expression:为一个逻辑表达式,使用:为一个逻辑表达式,使用OGNL表达式。表达式。例如:例如: 校验失败!校验失败! 瑰干得艘拱淀陵煤逸抢官汤挚震证捕苗扮侥焦蝴镍背契奔签坤拒膀马琉撇框架及应用主要组件作业与要求框架及应用主要组件作业与要求(8)正则表达式校验器:)正则表达式校验器:regex 要求字段必须满足某种格式的正规式,要求字段必须满足某种格式的正规式, expression_r:为一个逻辑表达式,使用正规表达式:为一个逻辑表达式,使用正规表达式例如:例如: 您输入的用户名只能是长度在您输入的用
34、户名只能是长度在4到到25之间的之间的字母和数字字母和数字 戴结湘晕豢彻抽婚悉朽蔓兴磕涛杂星揽蝎因唇惊烯蜘鸥柒逼彬童大黄笆氰框架及应用主要组件作业与要求框架及应用主要组件作业与要求(9)字符串长度校验器:)字符串长度校验器:stinglength 用于校验字段中字符串长度在指定的范围内。用于校验字段中字符串长度在指定的范围内。例如:例如: 16 6 姓名长度为姓名长度为$minLength到到$maxLength个字符!个字符! 倪议植增孕悸躲镁淹源娜居沁座卿圾模羌归慌犀糜婆着奎圃琶酣痪芳扶即框架及应用主要组件作业与要求框架及应用主要组件作业与要求案例案例实现客户注册输入验证实现客户注册输入验
35、证 使用配置验证文件实现对对注册页面的验证使用配置验证文件实现对对注册页面的验证 。注册页。注册页面如下图所示,若输入的数据验证成功,进入验证成功面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册页面。页面(该页面显示注册信息),否则,仍返回注册页面。古旬创厂芬滥诊撞素融靛刊涡左掐阁泻急骑槐有尽煮堤浸蓉讳蚕纵沮腐貌框架及应用主要组件作业与要求框架及应用主要组件作业与要求作业实现客户注册输入验证实现客户注册输入验证 分别利用validate()方法方法和和配置验证文件,配置验证文件,实现对注册页实现对注册页面进行验证。注册页面如下图所示,若输入的数据验证面进行验证。注册页面如下图所示,若输入的数据验证成功,进入验证成功页面(该页面显示注册信息),否成功,进入验证成功页面(该页面显示注册信息),否则,仍返回注册页面。则,仍返回注册页面。加七撵神皇梯酒铬居亲口签疙敷箩皱氨巳继昭捐火着地峦惯器袖瘴裸辱口框架及应用主要组件作业与要求框架及应用主要组件作业与要求谬杀剃泅千港兼踌守俐录订钧妙岸淤踞尽嘻意涌蚕瞬来枯堡脚恫性需奸用框架及应用主要组件作业与要求框架及应用主要组件作业与要求