Filter base

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>
Published 114 original articles · won praise 8 · views 5475

Guess you like

Origin blog.csdn.net/OVO_LQ_Start/article/details/104990319
Recommended