Struts2中的保安--拦截器

引题:Struts2框架对很多功能进行了封装,这些功能是由拦截器实现的,所以拦截器是Struts2的核心。

下面便结合案例从三个部分讲解下拦截器。

1.what:拦截器是什么

Struts2的拦截器和Servlet中的过滤器类似。用生活中例子来说,拦截器的作用类似于“保安”的角色。

举个例子来说:
生活中,来访者要访问部队某团长,是不能直接进去,需要经过门口保安的检查和登记。
在Struts2中,在浏览器端发起请求的用户相当于来访者,一个个的action类相当于团长,而拦截器就是保安。
当用户在浏览器端访问某个action资源时,需要先经过拦截器的拦截,经过了拦截器的“检查”才可访问到对应的action资源。

拦截器的实现原理:
当请求一个action资源时,Struts2会先查找struts.xml配置文件,并根据配置实例化配置的拦截器对象,然后串成一个列表,最后一个个地调用列表中的拦截器。

在执行Action之前,先执行该Action中配置的所有拦截器的intercept方法,被该方法放行后才可执行Action。

2.why:为什么使用拦截器

如果不采用拦截器,那么很多常用的功能就需要手动写代码。

比如,“类型转换”。web项目,从浏览器端输入的参数都是以String类型传到服务器端的,但在服务器端并非全部存储为String类型,这时就需要进行类型转换),例子如下。

Struts2中的保安--拦截器_第1张图片
浏览器端登录界面输入信息以String类型传输
public class LoginAction extends ActionSupport {
    private String name;
    private int age;
    .......
}

如果采用了拦截器,就可以将强制类型转换功能(这个功能Struts2框架已写好了)写到拦截器中,配置好,不用每次写action时重新写一遍。

这样就使得程序具备了以下优点:

  • “功能”可插拔
  • 提取action中的共性代码,减少代码冗余

3.how:Struts2中怎么使用拦截器

3.1 Struts2的内置拦截器

Struts2本身提供了很多的拦截器,这些拦截器已经在struts-default.xml文件中定义,在Web应用程序中可以直接引用这些拦截器。

常用的内置拦截器有:

Struts2中的保安--拦截器_第2张图片
Struts2中常用的内置拦截器

使用方式:
只要在struts.xml中extends=“"struts-default”即可。

struts.xml

   
   ...

3.2 Struts2的自定义拦截器

(1)通过继承AbstractInterceptor写一个拦截器类

public class OneInteceptor extends AbstractInterceptor{
    @Override
    public void init() {
        System.out.println("OneIntecepto 初始化....");
    }
    @Override
    public String intercept(ActionInvocation inv) throws Exception {
        System.out.println("1:OneIntecptor在Action执行之前.....");
        //result是用来接收Action中方法的返回值
        String result = inv.invoke();//放行,去执行用户要访问的资源---action
        System.out.println("3:OneInteceptor在Action执行之后.....");
        return result;
    }
    @Override
    public void destroy() {
        System.out.println("OneInteceptor 销毁....");
    }
}

(2)LoginAction.java

//LoginAction
public class LoginAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("LoginAction执行...");
        return SUCCESS;
    }
}

(3)拦截器的定义和配置
在struts.xml中对拦截器进行定义和配置


    
        
            
            
        
        
            
            
            /success.jsp
            
            /error.jsp
        
    

结果截图如下:


Struts2中的保安--拦截器_第3张图片
运行结果

拦截器的应用

拦截器可以用来实现:拦截未登录用户访问页面的功能
这个案例的实现代码,有机会再跟大家完整分享。

你可能感兴趣的:(Struts2中的保安--拦截器)