ciclo de vida útil del filtro
filtro y Servlet similar.
1.filter se crea y se inicializa cuando se inicia la aplicación.
2.filter es un singleton roscado multi-.
3.filter destruido cuando se detiene la aplicación.
4.doFilter (): O bien un hilo de acceso, siempre que el filtro por filtración, a continuación, el filtro se realice doFilter método de,
y es un método se ejecutará una vez doFilter por filtro.
5. Dado que el filtro es un único multi-roscado para asegurar el hilo de seguridad, es en general no variables miembro Añadir filtro pueden ser modificados.
创建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: objetos de configuración del filtro. Y los objetos ServletConfig, puede obtener la información de configuración de contenido
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
La primera configuración: <url-pattern>/*</url-pattern>
intercepta todas las peticiones.
<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>
La segunda configuración: <servlet-name>SomeServlet</servlet-name>
la petición especificada acceso al servlet de intercepción
<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
Los valores despachador:
1.Solicitud defecto: Para cualquier petición generales para interceptar, pero menos que la petición para reenviar el delantero e incluyen.
2.Incluir: Al acceder a un servlet, que sólo incluirá la forma en que la solicitud se reenvía (getRequestDispatcher () incldue (). ) De intercepción. Otros pedidos no serán interceptados, incluyendo la petición de servlet.
3.FOEWARD: (. GetRequestDispatcher () hacia adelante () Cuando se accede a un servlet, para el que el único camino posible la solicitud remitida ) Intercepción. Otros pedidos no serán interceptados, incluyendo la petición de servlet.
4.ERROR: Cuando un salto a la página de gestión de errores, esta solicitud a la intercepción.
<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>