Struts拦截器.ppt_第1页
Struts拦截器.ppt_第2页
Struts拦截器.ppt_第3页
Struts拦截器.ppt_第4页
Struts拦截器.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、Struts第十章,Struts拦截器,1,要实现功能,上节回顾,国际化所使用的类 Struts2 中如何实现jsp页面信息的国际化 Struts2中如何实现 aciton中错误信息国际化 Struts2中如何实现标签中的国际化 Struts2中,如何实现验证框架中错误信息的国际化,本节目标,什么是拦截器 struts框架内置的拦截器 实现自定义拦截器 所涉及的类 步骤,拦截器是struts2的一个重要特性 Struts2框架大部分核心功能都是通过拦截器来实现的(避免表单重复提交、类型转换、表单参数与属性的赋值、文件上传等),什么是拦截器,拦截器,在AOP(Aspect-Oriented Pr

2、ogramming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作 拦截是AOP的一种实现策略。 Aop它本身就是一个拦截器。 在Webwork的中文文档的解释 拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式 拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。 拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截

3、器链中的拦截器就会按其之前定义的顺序被调用,拦截器的功能,有利于程序解耦 使程序变成可插拔,拦截器的工作方式,动态代理设计模式,使用过哪些设计模式?,拦截器的实现原理:,大部分时候,拦截器方法都是通过代理的方式来调用的。 当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。,拦截器的实现原理:,拦截器,Struts2的拦截器和Servlet过滤器类似。 在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的

4、拦截器 在执行完所有引用的拦截器的intercept方法后 会执行Action的execute方法。,JAVA中采用方式,Struts2拦截器采用动态代理的方式,动态代理角色,目标对象 拦截器 对目标对象所生成的代理对象(是对象产生出来的) 代理对象综合和目标对象及拦截器对象是它俩的结合体,拦截器的配置,Struts2中,拦截器采用配置的方式进行。 配置拦截器在struts.xml文件中进行。,自定义一个拦截器的步骤,定义一个拦截器类 通过元素来定义拦截器。 l通过元素来使用拦截器,1、定义一个拦截器类,实现erceptor.Interce

5、ptor接口继承 继承类erceptor.AbstractInterceptor,拦截器中的方法,void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; 其中intercept方法是拦截器的核心方法,所有安装的拦截器都会调用这个方法。在Struts2中已经在struts-default.xml中预定义了一些自带的拦截器,如timer、params等。,拦截器类中各个方法,init(); 在该拦截器被初始化之后,在

6、该拦截器执行拦截之前,系统回调该方法。对于每个拦截器而言,此方法只执行一次。 void destroy();该方法跟init()方法对应。在拦截器实例被销毁之前,系统将回调该方法。 String intercept(ActionInvocation invocation) throws Exception; 该方法是用户需要实现的拦截动作。该方法会返回一个字符串作为逻辑视图。,查帮助文档,invoke(),拦截器的工作方式,动态代理设计模式,使用过哪些设计模式?,案例MyInterceptor1,public class myInterceptor implements Interceptor

7、 public void destroy() System.out.println(destroy); public void init() System.out.println(init); public String intercept(ActionInvocation arg0) throws Exception System.out.println(interceptor); String result=arg0.invoke(); return result; ,2.在struts.xml文件中定义拦截器, ,3、引用使用拦截器,一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦

8、截器栈来拦截Action了。拦截器的拦截行为将会在Action的exceute方法执行之前被执行。 /success.jsp /welcome.jsp ,执行工程。,重新配置工程,并重启tomcat 此时查看控制台,会看到什么? “init” 为什么会出现init? 因为工程在加载时已经实例化了一个MyInterceptor类的实例放在内存中,并且已经执行了其init()方法 。,执行register.jsp,此时http:/localhost:8081/struts2/regisgter.jsp,控制台会看到什么? interceptor” 但程序却进入了welcome.jsp页面。,在va

9、lidate工程中实现拦截器,查看程序功能,看到 Validate()方法没有被 执行? 为什么?,Struts2提供的拦截器,struts-default.xml文件中定义 Struts2-core.2-0-2.jar包中定义,Struts2提供的拦截器,Struts2提供的拦截器,Alias:在请求之间转换名字不同的相同参数 Chain:将所有属性从前一个Action复制到当前的Action中。一般和result type=“chain”一起使用 Checkbox:添加自动的复选框处理代码,即当复选框未选时,使用false来代替。 conversionError:将类型转换错误从Actio

10、nContext中取出,并添加到Action的字段错误中。,Struts2提供的拦截器,createSession:自动创建一个HttpSession对象,对于某些需要有HttpSession对象才能正常工作的拦截器才有用。 execAndWait:能让一个执行时间较长的Action在后台执行,并向用户显示友好的进度信息。(这个拦裁器必须是最后一个) fileUpload:文件上传的功能 Exception:这个拦截器提供了异常处理的功能。允许你把一个异常映射到一个结果码,就像有action返回的结果码,而不是抛出意想不到的异常。,Struts2提供的拦截器,I18N:用于支持国际化,它将当前

11、会话选择的locale放入用户的session中。 modelDriven:支持模型驱动的拦截器,如果Action实现了ModelDriven接口,则把getModel()方法返回的结果压入值栈。 Params:这个拦截器负责将请求参数设置为action的属性。 Token:这个拦截器检查传到action的tocken值,避免表单重复提交。,Struts2提供的拦截器,Validation:调用验证框架读取*Action-validation.xml文件,并执行其中的验证规则 Workflow:如果action实现了validate()方法,则执行validate()方法进行验证,如果验证出错

12、,那么拦截器将返回input码。,Struts2内置的拦截器栈,由多个拦截器组成 也可以由拦截器栈组成 例: ,Struts2内置的拦截器栈, ,查看struts-default.xml文件,Struts2-core包下的 META-INF包下 struts-default.xml文件,拦截器及拦截器栈,拦截器栈是若于个拦截器的组成。 用定义 里面可以包括很多个拦截器,解决validate()不执行的方法,加入, /out.jsp /index.jsp ,给拦截器传参,在中加入 在MyInterceptor类中加入属性,名字是param的name指定,给拦截器传参, hello ,在拦截器类中

13、引用,public class MyInterceptor implements Interceptor private String para; public String getPara() return para; public void setPara(String para) this.para = para; ,自定义拦截器栈, 注:自定义拦截器栈里面可以有拦截器的引用,也可以有拦截器栈的引用,自定义拦截器栈的引用, /out.jsp /index.jsp ,默认拦截器栈,格式: 是package的子标记 应该在action标记之前,在之(查看的验证文件)如果位置放错,控制台出错。

14、 表示如果action中未指定拦截器,使用此拦截器栈 如果action中指定,则用指定的替代默认的拦截器栈 此用法多用于多个action都有共同拦截功能时,多个拦截器的执行顺序, ,AbstractInterceptor类, ,public String intercept(ActionInvocation arg0) throws Exception System.out.print(intercept);1 String result=arg0.invoke();2 System.out.print(finish);7 return result; ,public String inter

15、cept(ActionInvocation arg0) throws Exception System.out.print(intercept);3 String result=arg0.invoke(); System.out.print(finish);6 return result; ,拦截方法的拦截器,默认情况下,会拦截所有validate()execute()方法 如果想拦截方法,需要: 使用MethodFilterInterceptor方法过滤拦截器 需要重写doInterceptor() 在struts.xml文件中加入param 标记,上机内容,完成一个用户注册页面。用户注册的

16、信息可放天在一个User类中。 用属性来存储 完成一个登陆界面。 完成安全验证,即对一个用户是否登陆进行判断的拦截器,如果用户已经登陆,则可以查看绝密文件,如果用户未登陆,则要求返回至登陆界面。所用内容提示如下: 1、在Action可以实现SessionAware接口,LoginAction的定义,public String execute() throws Exception if (dn.equals(this.getUsername().trim() ,案例(用户登陆验证),public class AuthInterceptor extends AbstractInterceptor

17、Override public String intercept(ActionInvocation invocation) throws Exception System.out.print(begin); String result=invocation.invoke(); ActionContext ctx=ActionContext.getContext(); Map session=ctx.getSession(); String user=(String)session.get(user); System.out.print(user is +user); if(null=user)

18、 ActionSupport action=(ActionSupport)invocation.getAction(); action.addActionError(dddddddd); return action.LOGIN; else System.out.print(else); return result; ,Struts.xml文件的定义, /login2.jsp /result.jsp /login2.jsp ,Result.jsp, sername: password: ,总结,什么是拦截器 它使用什么样的设计模式 动态代理需要重写的方法 使用拦截器的步骤 可以实现/继承哪些类和接口,各自的特点是什么,常用的几种设计模式之Singleton,1、美国总统的职位是唯一的,美国宪法规定了总统的选举,任期以及继任的顺序。这样,在任何时刻只能由一个现任的总统。无论现任总统的身份为何,其头衔“美利坚合众国总统”是访问这个职位的人的一个全局的访问点。2、中国古代皇帝玉玺,也是只能有一个,不管在谁手里,是谁使用,都只能保证只有这么一个玉玺,有了它,才能拥有它所代表的一切权力,行使它所赋予的相关职责。因此, Singleton模式要求一个类有且仅有一个实例,并

温馨提示

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

评论

0/150

提交评论