java手动注册filter,动态注册之Servlet+Filter+Listener

Java Web中的Servlet+Filter+Listener注册方式

xml文件注册

注解注册(Servlet 3.0 +)

ServletContext 动态注册

Xml文件注册

Servlet

partServlet

servlet.asyn.PartServlet

false

D:\\project\\servlet-asyn\\target\\servlet-asyn\\upload

0

db

mysql

partServlet

/ps

async-supported 表示用户对Servlet的请求是否为异步处理

multipart-config 表示servlet接收文件上传时的配置,location子元素表示文件上传的位置

load-on-startUp 表示servlet在何时初始化,Web容器启动时初始化,还是用户请求某个Servlet时对其初始化

cbe1c3174d41

Servlet_xml.png

Filter

EncodingFilter

filter.EncodingFilter

false

encoding

utf-8

EncodingFilter

/*

REQUEST

filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的

async-supported 表示用户对Filter的请求是否为异步

dispatcher 表示在过滤用户的请求时,过滤什么类型的请求?Forward,Request,Include,Error,Async

cbe1c3174d41

Filter_xml.png

Listener

listener.CustomServletContextListener

cbe1c3174d41

Listener_xml.png

注解注册(Servlet3.0+)

Servlet

@MultipartConfig(location = "D:\\project\\servlet-asyn\\target\\servlet-asyn\\upload")

@WebServlet(asyncSupported = false,

urlPatterns = {"/ps"},

loadOnStartup = 0,

name = "PartServlet",

initParams = {@WebInitParam(name="db",value="mysql")}

)

对比上述的注解配置,便可将xml配置的所有键值转化成注解的形式。

cbe1c3174d41

Servlet_annotation.png

如上述代码:

若想获取文件上传的配置MultipartConfig注解的location属性,即上传文件的存放位置。则在程序中,应该使用反射获取注解的location属性值。

String locationFile = this.getClass().getAnnotation(MultipartConfig.class).location()

Filter

@WebFilter(urlPatterns = {"/*"},

dispatcherTypes = {DispatcherType.REQUEST},

asyncSupported = false,

initParams = {@WebInitParam(name="encoding",value="utf-8")}

)

对比上述的注解配置,便可将xml配置的所有键值转化成注解的形式。

cbe1c3174d41

Filter_annotation.png

在使用Filter的时候,一定要注意Filter的顺序,在注解中,Filter的过滤顺序是按照过滤器的Class名称的首字母进行排序,而进行过滤

Listener

cbe1c3174d41

Listener_annotation.png

ServletContext 动态注册

Servlet,Listener,Filter由ServletContext去加载,无论是使用xml配置还是使用Annotation注解配置,均由Web容器进行初始化,读取其中的配置属性,然后向Web容器中进行注册。Servlet 3.0 可以由ServletContext动态进行注册,因此需在Web容器初始化的时候(即建立ServletContext对象的时候)进行动态注册。

自定义ServletContextListener

改写其方法contextInitialized,在该方法中动态注册Servlet,Filter,Listener

Servlet

需要配置Servlet的参数为:loadOnStartup,urlMapping,initParameter,asyncSupport,MultipartConfig等。

cbe1c3174d41

Servlet_Dynamic.png

在配置文件上传的属性时注意:

cbe1c3174d41

Multipart_Dynamic.png

在Servlet或者其他的业务组件中,要想获取文件的上传路径location属性,则可以在其动态注册的时候,将其放在ServletContext对象中。因此在接下的Web容器响应和请求中,只有容器开启,就可以从ServletContext中获取到改属性值。

xml中配置:

/tmp

10

10

10

注解配置:

@MultipartConfig(location = "/tmp",maxFileSize = 10,maxRequestSize = 10,fileSizeThreshold = 1024)

动态注册配置:

cbe1c3174d41

Multipart_config.png

这三者配置的原理是一样的,动态注册配置中,要想读取上传文件的location属性值,则在动态注册时候将该location值写入ServletContext上下文对象中,然后在Servlet再次进行读取。

location 将上传文件写入服务器的绝对路径

maxFileSize 允许上传单个文件的最大值,默认为-1,则表示没有限制

maxRequestFileSize 当有多个文件进行上传时,该值表示所有上传文件总的最大值。

Filter

cbe1c3174d41

Filter_dynamic.png

对Filter过滤顺序需要注意的是:

1、xml中Filter过滤顺序由Filter配置的节点顺序决定。

2、Annotation中Filter过滤顺序由Filter的类名决定的,根据类名进行排序。

3、动态注册Filter中,过滤顺序由isMatchAfter属性决定。

cbe1c3174d41

Filter_Sort.png

该方法有三个参数:

1、EnumSet dispatcherTypes 表示过滤器拦截的类型 Forward,Include,Request,Error,Async

2、boolean isMatchAfter 表示该过滤器是够放在当前web应用中已经存在的过滤器之后,true表示放在当前应用所有的过滤器之后,false表示将该过滤器放在当前应用所有的过滤器之前

3、String... urlPatterns 表示拦截的url

Listener

cbe1c3174d41

Listener_dynamic.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值