Web.xml 中的过滤器映射
什么是 JSP 过滤器?
- web.xml 中的过滤器用于 Java Web 应用程序的过滤功能。
- 在客户端尝试访问资源之前,它们会拦截来自客户端的请求
- 它们会操纵来自服务器的响应,然后将其发送给客户端。
JSP 中过滤器的类型
- 身份验证过滤器
- 数据压缩过滤器
- 加密过滤器
- MIME 链过滤器
- 日志过滤器
- 令牌化过滤器
过滤器在 web.xml 中定义,它们被映射到 servlet 或 JSP。当 JSP 容器随 Web 应用程序启动时,它会创建 web.xml 中已在部署描述符中声明的每个过滤器的实例。
JSP 过滤器方法
以下是过滤器方法
public void doFilter(ServletRequest, ServletResponse, FilterChain)
每当客户端从某个资源请求时,此方法都会被调用。
public void init(FilterConfig)
这表明 JSP 中的过滤器已投入使用
public void destroy()
这表明过滤器已从服务中移除。
示例
在此示例中,我们创建了过滤器并将其映射到了 Java web.xml 过滤器中
Gurufilter.java
package demotest; import java.io.IOException; import java.util.Date; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import Javax.servlet.http.HttpServletRequest; public class GuruFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, Filterchain chain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest req = (HttpServletRequest) request; String ipAddress = req.getRemoteAddr(); System.out.println("IP Address "+ipAddress + ", Time is" + new Date().toString()); // pass the request along the filter chain chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { String guruparam = fConfig.getInitParameter("guru-param"); //Print the init parameter System.out.println("Test Param: " + guruparam); } }
Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> test</display-name> <filter> <description> </description> <display-name> GuruFilter</display-name> <filter-name>GuruFilter</filter-name> <filter-class>demotest.GuruFilter</filter-class> <init-param> <param-name>guru-param</param-name> <param-value>This is guru paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>GuruFilter</filter-name> <url-pattern>/GuruFilter</url-pattern> </filter-mapping>
代码解释
Gurufilter.java
代码第 17-32 行:在此我们使用了“doFilter”方法,其中我们获取了请求对象(在我们的例子中,请求对象是 req(HttpServletRequest 对象)),获取客户端的远程地址并在控制台打印,同时也在控制台打印日期和时间。
代码第 33-37 行:在此我们使用了 init 方法,其中我们获取了 init 参数并在控制台打印 init 参数。
Web.xml
代码第 10-11 行: Web.xml 中的过滤器映射,用于 GuruFilter,类名为 GuruFilter.java,其中 filter-name 为 GuruFilter,filter class 为 GuruFilter 类的目录路径。
代码第 13-15 行: 映射名为 guru-param 的 init 参数,并获取其值,该值位于 filter 标签下,因此此 init-param 已为 gurufilter 定义。
输出
当您执行上述代码时,您会得到以下输出
- 输出为 init 参数的 Test Param
- 并获取其 IP 地址、日期和时间。