在tomcat启动时,会不会加载filter,启动顺序是怎样的?

在tomcat启动时,会不会加载filter,启动顺序是怎样的?,第1张

Listener的初始化最早,Filter次之。他俩的初始化都是在容器启动完成之前初始化的。

Servlet没有初始化,原因是没有匹配的请求进来。

如果想要servlet自动初始化,需要在指定的servlet中配置<load-on-startup参数,没有此标签,默认启动时servlet不进行初始化。

1.过滤器的主要功能是允许我们在request转给某个资源之前(比如:html文件,servlet,JSP文件,图片文件,excel文件等等)做一些事情,然后在response返回给客户端之前做一些事情。功能上有些类似于防火墙,对入口和出口进行严格控制。 

public class MyFilter implements Filter {  

  

//tomcat启动,或者context重新加载的时候调用init(先destroy再init)  

public void init(FilterConfig filterConfig) throws ServletException {  

  System.out.println("MyFilter init...")  

}  

  

public void doFilter(ServletRequest request, ServletResponse response,  

   FilterChain chain) throws IOException, ServletException {  

  //request到达的时候执行下面的代码  

  System.out.println("MyFilter request>>>>>>>>>>>>")  

    

  //转给过滤器链中的下一个filter,如果是最后一个filter,调用要访问的资源  

  chain.doFilter(request,response)  

    

  //要访问的资源访问完以后,response到达的时候执行下面的代码  

  System.out.println("MyFilter response>>>>>>>>>>>>")  

}  

//tomcat关闭或者context重新加载的时候调用destroy  

public void destroy() {   

  System.out.println("MyFilter destroy...")  

}  

  

}

2.filter的配置方法 

web.xml 

通过url匹配: 

<filter>  

    <filter-name>My Filter</filter-name>  

    <filter-class>MyFilter</filter-class>  

    <init-param>  

      <param-name>debug</param-name>  

      <param-value>0</param-value>  

    </init-param>  

</filter>  

  

<filter-mapping>  

    <filter-name>My Filter</filter-name>  

<!-- url匹配规则 -->  

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

<!-- filter对应的请求方式,默认是REQUEST -->  

    <dispatcher>REQUEST</dispatcher>  

    <dispatcher>INCLUDE</dispatcher>  

    <dispatcher>FORWARD</dispatcher>  

    <dispatcher>ERROR</dispatcher>  

</filter-mapping>

通过servlet名匹配: 

<filter>  

    <filter-name>My Filter</filter-name>  

    <filter-class>MyFilter</filter-class>  

    <init-param>  

      <param-name>debug</param-name>  

      <param-value>0</param-value>  

    </init-param>  

</filter>  

  

<filter-mapping>  

    <filter-name>My Filter</filter-name>  

<!-- 根据url匹配到MyServlet的时候,执行My Filter -->  

    <servlet-name>MyServlet</servlet-name>    

<!-- filter对应的请求方式,默认是REQUEST -->  

    <dispatcher>REQUEST</dispatcher>  

    <dispatcher>INCLUDE</dispatcher>  

    <dispatcher>FORWARD</dispatcher>  

    <dispatcher>ERROR</dispatcher>  

</filter-mapping>

可以看到 参数的传递 使用

<init-param>  

      <param-name>debug</param-name>  

      <param-value>0</param-value>  

    </init-param>

即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11557354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存