Filter life cycle
filter and Servlet similar.
1.filter is created and initialized when the application starts.
2.filter is a singleton multi-threaded.
3.filter destroyed when the application is stopped.
4.doFilter (): Either one thread to access, as long as the filter by filtration, then the filter will perform dofilter method of,
and is a method will be executed once dofilter per filter.
5. Since the filter is a single multi-threaded to ensure the security thread, is generally not filter add member variables can be modified.
创建filter的步骤
1.创建自己的filter实现Filter接口(java.servletx.*)
package com.javaweb.filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SomeFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("执行SomeFilter");
//放行操作,过滤请求后,把请求发送到服务器
chain.doFilter(request, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("filter销毁");
}
@Override
public void init(FilterConfig filterConfig ) throws ServletException {
// TODO Auto-generated method stub
System.out.println("filter初始化");
}
}
2.注册filter,和servlet相似的注册方式
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>com.javaweb.filters.SomeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<!--过滤所有请求-->
<url-pattern>/*</url-pattern>
</filter-mapping>
FilterConfig
FilterConfig: filter configuration objects. And servletConfig objects, you can get the content configuration information
package com.javaweb.filters;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SomeFilter implements Filter {
private FilterConfig filterConfig;
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
String filterName = filterConfig.getFilterName();
System.out.println("filterName="+filterName);
Enumeration<String> names = filterConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
String value = filterConfig.getInitParameter(name);
System.out.println(name+"="+value);
}
ServletContext servletContext = filterConfig.getServletContext();
System.out.println("ServletContext="+servletContext);
chain.doFilter(request, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("filter销毁");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = filterConfig;
}
}
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>com.javaweb.filters.SomeFilter</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>流行</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>14</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-parrtern
The first configuration: <url-pattern>/*</url-pattern>
intercepts all requests.
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>com.javaweb.filters.SomeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
The second configuration: <servlet-name>SomeServlet</servlet-name>
the request specified access the servlet to intercept
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>com.javaweb.filters.SomeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<servlet-name>SomeServlet</servlet-name>
</filter-mapping>
dispathcher
dispatcher values:
1.REQUEST Default: For any general requests to intercept, but unless the request to forward the forward and include.
2.INCLUDE: When accessing a servlet, which will only include the way the request was forwarded (getRequestDispatcher () incldue (). ) Intercept. Any other requests will not be intercepted, including the servlet request.
3.FOEWARD: When accessing a servlet, for which the only way forward the request forwarded (getRequestDispatcher () forward (). ) Intercept. Any other requests will not be intercepted, including the servlet request.
4.ERROR: When a jump to the error handling page, this request to intercept.
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>com.javaweb.filters.SomeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<servlet-name>SomeServlet</servlet-name>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>