第六讲 类型转换、数据校验、国际化、拦截器.ppt_第1页
第六讲 类型转换、数据校验、国际化、拦截器.ppt_第2页
第六讲 类型转换、数据校验、国际化、拦截器.ppt_第3页
第六讲 类型转换、数据校验、国际化、拦截器.ppt_第4页
第六讲 类型转换、数据校验、国际化、拦截器.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六讲struts2中的其他功能,主要内容,1、类型转换 2、简单数校验据 3、国际化i18n 4、单(多)文件上传 5、拦截器原理与实现 6、struts2总结,1、类型转换,1、编写类型转换器(类)。 2、类型转换器注册: (1)局部类型转换器: 在Action类所在的包下放置ActionClassNperties文件,ActionClassName是Action的类名,后面的-perties是固定写法,对于本例而言,文件的名称应为TestAperties 。在properties文件中

2、的内容为:属性名称=类型转换器的全类名 本例:p=.huanghuai.converter.MyPointConverter (2)类型转换器注册为全局类型转换器: 在SRC下放置perties文件 。在properties文件中的内容为:待转换的类型=类型转换器的全类名 本例:java.awt.Point=.huanghuai.converter.MyPointConverter,2、简单的输入校验,在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。 对于输入校验struts2

3、提供了两种实现方法: 1. 采用手工编写代码实现。 2. 基于XML配置方式实现。,2.1 struts2手工编写实现(action中所有方法进行校验) 步骤,1、在Action中重写validate()方法 public void validate() if(this.username=null | .equals(this.username.trim() this.addFieldError(username, 用户名不能为空); /自动验证action中的所有方法,验证不通过自动返回“input”视图。 2、在要显示验证不通过的信息的网页上引入struts2标签库 3、在网页上显示验证不

4、同过的信息 /显示所有的信息 username /显示需要的单个信息,手工编写代码实现输入校验说明,通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过显示失败信息。 validate

5、()使用例子: public void validate() if(this.username=null | .equals(this.username.trim() this.addFieldError(username, 用户名不能为空); if(this.mobile=null | .equals(this.mobile.trim() this.addFieldError(mobile, 手机号不能为空); else if(!Ppile(1358d9$).matcher(this.mobile.trim().matches() this.addFieldError(mobile, 手机号

6、的格式不正确); 验证失败后,请求转发至input视图: /addUser.jsp 在addUser.jsp文件中引入struts2标签库 后并在页面中使用显示失败信息。,2.1 struts2手工编写实现,1. 2、手工编写代码实现对action指定方法输入校验,通过validateXxx()方法实现, validateXxx()只会校验action中方法名为xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承Action

7、Support ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。 validateXxx()方法使用例子: 如果action中有方法:public String add() throws Exception return success; public void validateAdd() if(username=null 验证失败后,请求转发至input视图: /addUser.jsp 在addUser.jsp页面中使用显示失败信息。,1. 类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。 2. 如果在执行

8、类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldErrors里,然后执行第3步。如果类型转换没有出现异常,则直接进入第3步。 3. 系统通过反射技术调用action中的validateXxx()方法,Xxx为方法名。 4. 调用action中的validate()方法。 5. 经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法

9、。,struts2手工编写实现,输入校验流程,struts2手工编写实现举例,1、导入struts2架包 2、配置Web.xml文件 3、编写index.jsp文件 用户名:不能为空 手机号:不能为空,并要符合手机号的格式1,3/5/8,后面是9个数字 ,struts2手工编写实现举例,4、编写action类PersonAction.java public class PersonAction extends ActionSupport private String username; private String mobile;/省略了set、get方法 public String upda

10、te() ActionContext.getContext().put(message,更新成功!); return success; public String save() ActionContext.getContext().put(message,保存成功!); return success; ,struts2手工编写实现举例,Override public void validate() if(this.username=null | .equals(this.username.trim() this.addFieldError(username, 用户名不能为空); if(this

11、.mobile=null | .equals(this.mobile.trim() this.addFieldError(mobile, 手机号不能为空); else if(!Ppile(1358d9$).matcher(this.mobile.trim().matches() this.addFieldError(mobile, 手机号的格式不正确); ,struts2手工编写实现举例,5、配置struts.xml文件 /index.jsp /success.jsp 6、回到login.jsp添加struts2标签库和显示错误信息 用户名:不能为空username 手机号:不能为空,并要符合

12、手机号的格式1,3/5/8,后面是9个数字mobile ,2.1 基于XML配置方式实现输入校验基于XML配置方式实现对action的所有方法进行输入校验,使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校 验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名, -validation为固定写法。 如果Action类为.PersonAction,那么该文件的取名应为:PersonAction-validation.

13、xml。下面是校验文件的模版: true 用户名不能为空! 指定action中要校验的属性,指定校验器,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。 为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。 在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空

14、格,然后判断 用户名是否为空。,编写校验文件时,不能出现帮助信息,在编写ActionClassName-validation.xml校验文件时,如果出现不了帮助信息,可以按下面方式解决: windwos-preferences-myeclipse-files and editors-xml-xmlcatalog 点“add”,在出现的窗口中的location中选“File system”,然后在xwork-2.1.2解压目录的srcjava目录中选择xwork-validator-1.0.3.dtd,回到设置窗口的时候不要急着关闭窗口,应把窗口中的Key Type改为URI 。Key改为,校验

15、器的使用例子,required 必填校验器 性别不能为空! requiredstring 必填字符串校验器 true 用户名不能为空! stringlength:字符串长度校验器 10 2 true ,校验器的使用例子,email:邮件地址校验器 电子邮件地址无效 regex:正则表达式校验器 手机号格式不正确! /CDATA让其中的符号当成不同文本!,校验器的使用例子,int:整数校验器 1 150 年龄必须在1-150之间 字段OGNL表达式校验器 文件不能为空 ,struts2提供的校验器列表,系统提供的校验器如下: required (必填校验器,要求field的值不能为null) r

16、equiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格) stringlength(字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格) regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true) int(整数校验器,要求fie

17、ld的整数值必须在指定范围内,min指定最小值,max指定最大值) double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值) fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过) email(邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址) url(网址校验器,要求如果field的值非空,则必须是合法的url地址) date(日期校验器,要求fie

18、ld的日期值必须在指定范围内,min指定最小值,max指定最大值) conversion(转换校验器,指定在类型转换失败时,提示的错误信息) visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性) expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中),当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对act

19、ion中的某个处理方法实施验证,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中为action配置的名称。例如:在实际应用中,常有以下配置: /WEB-INF/page/message.jsp /WEB-INF/page/addUser.jsp UserAction中有以下两个处理方法: public String add() throws Exception . public String update() throws Exception . 要对add()方法实施验证,校验文件的

20、取名为: UserAction-user_add-validation.xml 要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml,2、2 基于XML配置方式实现输入校验基于XML配置方式对指定action方法实现输入校验,当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件: 1. AconClassName-validation.xml 2. Act

21、ionClassName-ActionName-validation.xml 系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。 当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下: . 访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseActi

22、on-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。,基于配置校验的举例,1、导入struts2架包 2、配置Web.xml文件 3、编写index.jsp文件 用户名:不能为空 手机号:不能为空,并要符合手机号的格式1,3/5/8,后面是9个数字 ,基于配置校验的举例,4、编写action类PersonAction.java public class PersonAction extends ActionSupport private Strin

23、g username; private String mobile; ;/省略了set、get方法 public String update() ActionContext.getContext().put(message,更新成功!); return success; public String save() ActionContext.getContext().put(message,保存成功!); return success; ,5、编写,5、在与PersonAction类同包下PersonAction-validation.xml, true 用户名不能为空! 手机号不能为空 手机号

24、格式不正确! ,2.1 struts2手工编写实现(action中所有方法进行校验) 步骤,1、在Action中重写validate()方法 public void validate() if(this.username=null | .equals(this.username.trim() this.addFieldError(username, 用户名不能为空); /自动验证action中的所有方法,验证不通过自动返回“input”视图。 2、在要显示验证不通过的信息的网页上引入struts2标签库 3、在网页上显示验证不同过的信息 /显示所有的信息 username /显示需要的单个信息

25、,手工编写代码实现输入校验说明,通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过显示失败信息。 validate()使用例子: public void validate() if(

26、this.username=null | .equals(this.username.trim() this.addFieldError(username, 用户名不能为空); if(this.mobile=null | .equals(this.mobile.trim() this.addFieldError(mobile, 手机号不能为空); else if(!Ppile(1358d9$).matcher(this.mobile.trim().matches() this.addFieldError(mobile, 手机号的格式不正确); 验证失败后,请求转发至input视图: /addU

27、ser.jsp 在addUser.jsp文件中引入struts2标签库 后并在页面中使用显示失败信息。,21.1 struts2手工编写实现(action中所有方法进行校验),1. 2、手工编写代码实现对action指定方法输入校验,通过validateXxx()方法实现, validateXxx()只会校验action中方法名为xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的f

28、ieldErrors包含失败信息,struts2会将请求转发到名为input的result。 validateXxx()方法使用例子: 如果action中有方法:public String add() throws Exception return success; public void validateAdd() if(username=null 验证失败后,请求转发至input视图: /addUser.jsp 在addUser.jsp页面中使用显示失败信息。,1. 类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。 2. 如果在执行类型转换的过程中出现异常,系统会

29、将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldErrors里,然后执行第3步。如果类型转换没有出现异常,则直接进入第3步。 3. 系统通过反射技术调用action中的validateXxx()方法,Xxx为方法名。 4. 调用action中的validate()方法。 5. 经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。,struts2手工编写实现,

30、输入校验流程,struts2手工编写实现举例,1、导入struts2架包 2、配置Web.xml文件 3、编写index.jsp文件 用户名:不能为空 手机号:不能为空,并要符合手机号的格式1,3/5/8,后面是9个数字 ,struts2手工编写实现举例,4、编写action类PersonAction.java public class PersonAction extends ActionSupport private String username; private String mobile;/省略了set、get方法 public String update() ActionConte

31、xt.getContext().put(message,更新成功!); return success; public String save() ActionContext.getContext().put(message,保存成功!); return success; ,struts2手工编写实现举例,Override public void validate() if(this.username=null | .equals(this.username.trim() this.addFieldError(username, 用户名不能为空); if(this.mobile=null | .

32、equals(this.mobile.trim() this.addFieldError(mobile, 手机号不能为空); else if(!Ppile(1358d9$).matcher(this.mobile.trim().matches() this.addFieldError(mobile, 手机号的格式不正确); ,struts2手工编写实现举例,5、配置struts.xml文件 /index.jsp /success.jsp 6、回到login.jsp添加struts2标签库和显示错误信息 用户名:不能为空username 手机号:不能为空,并要符合手机号的格式1,3/5/8,后面

33、是9个数字mobile ,2.1 基于XML配置方式实现输入校验基于XML配置方式实现对action的所有方法进行输入校验,使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校 验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名, -validation为固定写法。 如果Action类为.PersonAction,那么该文件的取名应为:PersonAction-validation.xml。下面是校验文件的模版:

34、true 用户名不能为空! 指定action中要校验的属性,指定校验器,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。 为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为资源文件中的key。 在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断 用户名是否为空。,

35、编写校验文件时,不能出现帮助信息,在编写ActionClassName-validation.xml校验文件时,如果出现不了帮助信息,可以按下面方式解决: windwos-preferences-myeclipse-files and editors-xml-xmlcatalog 点“add”,在出现的窗口中的location中选“File system”,然后在xwork-2.1.2解压目录的srcjava目录中选择xwork-validator-1.0.3.dtd,回到设置窗口的时候不要急着关闭窗口,应把窗口中的Key Type改为URI 。Key改为,校验器的使用例子,required

36、必填校验器 性别不能为空! requiredstring 必填字符串校验器 true 用户名不能为空! stringlength:字符串长度校验器 10 2 true ,校验器的使用例子,email:邮件地址校验器 电子邮件地址无效 regex:正则表达式校验器 手机号格式不正确! /CDATA让其中的符号当成不同文本!,校验器的使用例子,int:整数校验器 1 150 年龄必须在1-150之间 字段OGNL表达式校验器 文件不能为空 ,struts2提供的校验器列表,系统提供的校验器如下: required (必填校验器,要求field的值不能为null) requiredstring (必

37、填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格) stringlength(字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格) regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true) int(整数校验器,要求field的整数值必须在指定范围内,m

38、in指定最小值,max指定最大值) double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值) fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过) email(邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址) url(网址校验器,要求如果field的值非空,则必须是合法的url地址) date(日期校验器,要求field的日期值必须在指定范围内,m

39、in指定最小值,max指定最大值) conversion(转换校验器,指定在类型转换失败时,提示的错误信息) visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性) expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中),当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个处理方法实施验证,

40、那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中为action配置的名称。例如:在实际应用中,常有以下配置: /WEB-INF/page/message.jsp /WEB-INF/page/addUser.jsp UserAction中有以下两个处理方法: public String add() throws Exception . public String update() throws Exception . 要对add()方法实施验证,校验文件的取名为: UserAction-

41、user_add-validation.xml 要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml,2、2 基于XML配置方式实现输入校验基于XML配置方式对指定action方法实现输入校验,当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件: 1. AconClassName-validation.xml 2. ActionClassName-Act

42、ionName-validation.xml 系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。 当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下: . 访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validati

43、on.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。,基于配置校验的举例,1、导入struts2架包 2、配置Web.xml文件 3、编写index.jsp文件 用户名:不能为空 手机号:不能为空,并要符合手机号的格式1,3/5/8,后面是9个数字 ,基于配置校验的举例,4、编写action类PersonAction.java public class PersonAction extends ActionSupport private String username; priv

44、ate String mobile; ;/省略了set、get方法 public String update() ActionContext.getContext().put(message,更新成功!); return success; public String save() ActionContext.getContext().put(message,保存成功!); return success; ,5、编写,5、在与PersonAction类同包下PersonAction-validation.xml, true 用户名不能为空! 手机号不能为空 手机号格式不正确! ,6、配置stru

45、ts.xml文件, /index.jsp /success.jsp 7、回到login.jsp添加struts2标签库和显示错误信息 用户名:不能为空username 手机号:不能为空,并要符合手机号的格式1,3/5/8,后面是9个数字mobile ,第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从/下载。 第二步:把form表的enctype设置为:“multipart/form-data“,如下: 第三步:在Action类中添加以下属性,

46、属性红色部分对应于表单中文件字段的名称: public class Fileupload private File uploadFile;/得到上传的文件 private String uploadFileContentType;/得到文件的类型 private String uploadFileFileName;/得到文件的名称 /这里略省了属性的getter/setter方法 public String upload() throws Exception String realpath = ServletActionContext.getServletContext().getRealPa

47、th(/images); File file = new File(realpath); if(!file.exists() file.mkdirs(); FileUtils.copyFile(uploadFile,new File(file, uploadFileFileName); return success; ,三、Struts2 文件上传,第四步:配置struts.xml文件 /suc.jsp ,关于上传文件的说明,1、临时文件夹的设置(必须的) 2、文件大小限制,默认2M 3、文件类型限制 第一种方法是通过javascript校验来限制,这个比较简单,获取input的value然后

48、截取扩展名 进行判断即可。 第二种方法配置struts拦截器 image/bmp,image/png,image/gif,image/jpeg,image/jpg 2000 /success.jsp/index.jsp,多文件上传,第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。 这两个文件可以从/下载。 第二步:把form表的enctype设置为:“multipart/form-data“,如下: 第三步:在Action类中添加以下属性,属性红色部分对应于

49、表单中文件字段的名称: public class HelloWorldAction private File uploadImages;/得到上传的文件 private String uploadImagesContentType;/得到文件的类型 private String uploadImagesFileName;/得到文件的名称 /这里略省了属性的getter/setter方法 public String upload() throws Exception String realpath = ServletActionContext.getServletContext().getRea

50、lPath(/images); File file = new File(realpath); if(!file.exists() file.mkdirs(); for(int i=0 ;iuploadFile.length; i+) File f =uploadFilei; FileUtils.copyFile(f, new File(file, uploadFileFileNamei); return success; ,四、Struts2 自定义拦截器,截拦器的作用和意义 截拦器的定义与配置 默认截拦器分析 截拦器栈 截拦器示例-访问控制,四、Struts2 自定义拦截器,截拦器是Str

51、uts2中最重要的概念之一,Struts中有80%的功能都通过截拦器实现 截拦器意义: 提供更高层次的解耦,无须侵入框架本身便可以添加新的功能. 截拦器是AOP的一种实现,底层通过动态代理模式完成 将一些功能放到截拦器,可以降低Action的复杂性,提高重用性. 截拦器的典型使用 封装请求参数 文件上传 异常处理 . 拦截器是Action的截拦器是拦截Action动作的!,如果没有为Action指定截拦器,则使用defaultStack作为默认截拦器 下面的功能由默认截拦器提供 请求参数封装 文件上传 类型转换异常处理 一旦为Action指定了截拦器,则默认截拦器不再起作用,必须显示指定默认截

52、拦器.,Struts2 自定义拦截器,Struts2 自定义拦截器,截拦器是一个继承自AbstractInterceptor抽象类或实现Interceptor接口的类,可以重写的方法: public void init():执行初始化动作 public void destroy():执行销毁动作 String intercept(ActionInvocation invocation):执行截拦动作 参数invocation:包含了Action的引用, invocation.invoke()方法用于将控制权转给下一个截拦器或者调用Action的execute()方法. 返回值为逻辑视图 Abs

53、tractInterceptor为init和destroy方法提供了默认实现.,要自定义拦截器需要实现erceptor.Interceptor接口: public class MyInterceptor implements Interceptor public void destroy() public void init() public String intercept (ActionInvocation invocation) throws Exception System.out.println(进入拦截器); if(sessio

54、n里存在用户) String result = invocation.invoke(); else return “logon”; /System.out.println(返回值:+ result); /return result; ,Struts2 自定义拦截器, , ,如果Action配置了多个截拦器,截拦器的执行顺序与配置顺序相同 截拦器可以注入属性值,在struts.xml文件中通过value实现,作用于interceptor或interceptor-ref. 通过intercept的返回值,可以改变请求的流程控制(*). 一般来说, invocation.invoke()方法总是要调

55、用的. 如果希望包下的所有action都使用自定义的拦截器,可以通过把拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。 ,将多个截拦器组合成一个截拦器栈 配置 使用 ,Struts2 自定义拦截器,Struts2 自定义拦截器 截拦器示例-访问控制,编写个web项目,利用拦截器实现登录后才能访问添加、显示模块,查询功能不进行限制!本项的文件有:web.xml、struts.xml,Action类 LoginAction.java、拦截器MyInter.java及login.jsp、welcome.

56、jsp、error.jsp、query.jsp、add.jsp、show.jsp、logout.jsp,1、web.xml 文件配置 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* ,十一、Struts2 自定义拦截器 截拦器示例-访问控制,2、编写Action类 package ; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;

57、public class LoginAction extends ActionSupport private String username; private String password; public String getUsername() return username; public void setUsername(String username) this.username = username; public String getPassword() return password; public void setPassword(String password) this.

58、password = password; ,十一、Struts2 自定义拦截器 截拦器示例-访问控制,public String execute() throws Exception if (username= | username=null |password= |password=null) return INPUT; if (getUsername().equals(sunli) ,十一、Struts2 自定义拦截器 截拦器示例-访问控制,public String add() return SUCCESS; public String show() return SUCCESS; public String query() return SUCCESS; ,十一、Struts2 自定义拦截器 截拦器示例-访问控制,3、编写拦截器MyInter.java package ; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import erceptor.Inter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论