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>
即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)