首页编程java编程什么是拦截器java?Java实现的拦截器

什么是拦截器java?Java实现的拦截器

编程之家2023-10-14107次浏览

大家好,今天给各位分享什么是拦截器java的一些知识,其中也会对Java实现的拦截器进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

什么是拦截器java?Java实现的拦截器

java中拦截器和过滤器的区别

1

拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2

什么是拦截器java?Java实现的拦截器

拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

3

拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

什么是拦截器java?Java实现的拦截器

4

拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

5

在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

Java实现的拦截器

拦截器在在流行的开源框架中很常见依赖的技术就是Java的动态代理

理解拦截器的核心原理对理解这些开源框架的体系结构至关重要

下面以一个简单的模型的来说明拦截器的实现的一般方法

模型分为以下模块

业务组件是被代理和被拦截的对象

代理处理器实现了InvocationHandler接口的一个对象

代理对象 Proxy对象

拦截器普通的JavaBean在调用业务方法的之前或者之后会自动拦截并执行自己的一些方法

客户端执行业务处理的入口

以下是模型的实现

一业务组件分为业务接口和业务类

/**

*业务组件接口

*/

public interface BusinessInterface{

public void doSomething();

}

/**

*业务组件

*/

public class BusinessClass implements BusinessInterface{

public void doSomething(){

System out println(业务组件BusinessClass方法调用:doSomething());

}

}

二代理处理器包含了业务对象绑定动态代理类的处理并实现了 InvocationHandler接口的invoke方法

import java lang reflect InvocationHandler;

import java lang reflect Method;

import java lang reflect Proxy;

/**

*动态代理处理器工具

*/

public class DynamicProxyHandler implements InvocationHandler{

private Object business;//被代理对象

private InterceptorClass interceptor= new InterceptorClass();//拦截器

/**

*动态生成一个代理类对象并绑定被代理类和代理处理器

*

*@param business

*@return代理类对象

*/

public Object bind(Object business){

this business= business;

return Proxy newProxyInstance(

//被代理类的ClassLoader

business getClass() getClassLoader()

//要被代理的接口本方法返回对象会自动声称实现了这些接口

business getClass() getInterfaces()

//代理处理器对象

this);

}

/**

*代理要调用的方法并在方法调用前后调用连接器的方法

*

*@param proxy代理类对象

*@param method被代理的接口方法

*@param args被代理接口方法的参数

*@return方法调用返回的结果

*@throws Throwable

*/

public Object invoke(Object proxy Method method Object[] args) throws Throwable{

Object result= null;

interceptor before();

result=method invoke(business args);

interceptor after();

return null;//To change body of implemented methods use File| Settings| File Templates

}

}

三拦截器普通的JavaBean在调用业务方法的之前或者之后会自动拦截并执行自己的一些方法

/**

*拦截器

*/

public class InterceptorClass{

public void before(){

System out println(拦截器InterceptorClass方法调用:before()!);

}

public void after(){

System out println(拦截器InterceptorClass方法调用:after()!);

}

}

四模拟客户端执行业务处理的入口

/**

*客户端

*/

public class Client{

public static void main(String args[]){

DynamicProxyHandler handler= new DynamicProxyHandler();

BusinessInterface business= new BusinessClass();

BusinessInterface businessProxy=(BusinessInterface) handler bind(business);

businessProxy doSomething();

}

lishixinzhi/Article/program/Java/hx/201311/27143

为什么拦截器是基于java的反射机制

如果说拦截器是基于反射机制,也就是说拦截器

我们在xml文件中定义,但是创建不需要我们创建;每次当要执行到拦截器相关代码的时候

可以动态的执行class.forname("类名")

创建拦截器对象,而不需要我们再去创建

和操作~~~这些都是封装好了的,我们只管定义好拦截器就行,那个应该属于拦截器的一个底层实现原理!

什么是拦截器,如何配置拦截器,如何使用拦截器

需在web.xml文件中配置<filter>标签,这个标签就是用作拦截器的,具体的配置如下:

<filter>---配置过滤器

<filter-name>FirstFilter</filter-name>

---为过滤器起一个名字

<filter-class>com.itheima.filter.FirstFilter</filter-class>

---过滤器类的全路径名

<init-param>

---可选的可以配置多个过滤器的初始化参数可以在过滤器中通过FilterConfig对象来获取

<param-name>name1</param-name>

<param-value>value1</param-value>

</init-param>

</filter>

<filter-mapping>

---配置过滤器的拦截路径,一个<Filter>可以配置多个<filter-mappint>

<filter-name>FirstFilter</filter-name>

---为哪个过滤器进行配置

<url-pattern>/*</url-pattern>

---拦截哪个路径其中url-pattern的写法和学习Serlvet时的url-pattern的写法相同这个url-pattern可以配置多个

<servlet-name>Demo1Servlet</servlet-name>

---拦截哪个名字的Servlet可以配置多个

<dispatcher>REQUEST</dispatcher>

---配置拦截哪种类型的对资源的访问,可选的值有REQUESTFORWARD INCLUDE ERROR,如果不配置默认只拦截REQUEST方式,如果具体配置了就拦截具体配置的方式的对资源的访问,此标签可以配置多个

</filter-mapping>

简单点说就是需要配置<filter>和<filter-mapper>标签,filter标签里<filter-name>、<filter-class>是必须要的,filtermapper中<filter-name>、<url-pattern>是必须要的,其他标签都是可选的

OK,本文到此结束,希望对大家有所帮助。

java中int类型默认值是什么意思?在Java中int是什么东西俄罗斯德国 俄罗斯德国天然气项目