过滤器:Filter

Filter:过滤器:用来过滤网站的数据

  • 处理网页乱码
  • 登录验证

过滤器:Filter_第1张图片

chain:链

1.过滤器中的所有代码,在过滤特定的请求的时候都会执行
2.必须要让过滤器继续同行:
filterChain.doFilter(servletRequest,servletResponse);

第一步,导包
第二步,编写过滤器:

package filter;

import javax.servlet.*;
import java.io.IOException;

public class Filter implements javax.servlet.Filter {
     
@Override//初始化
public void init(FilterConfig filterConfig) throws ServletException {
     
System.out.println("Filter已经初始化");
}
/*
chain:链

1.过滤器中的所有代码,在过滤特定的请求的时候都会执行
2.必须要让过滤器继续同行:
filterChain.doFilter(servletRequest,servletResponse);
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");

System.out.println("Filter执行前");
//让请求继续走,如果不写这行,那么程序将被拦截
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("Filter执行后");
}

@Override//销毁
public void destroy() {
     
System.out.println("Fileter已经销毁");
}
}

然后创建一个Servlet试验一下能否用过滤器解决乱码问题:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class DemoServlet extends HttpServlet {
     

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
resp.getWriter().write("你好世界");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
doGet(req, resp);
}
}

在web.xml中注册servlet和filter:
创建两个url:分别为经过过滤器和不经过过滤器的

<servlet>
<servlet-name>servletservlet-name>
<servlet-class>servlet.DemoServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>servletservlet-name>
<url-pattern>/servlet/demourl-pattern>
servlet-mapping>
<servlet>
<servlet-name>servlet1servlet-name>
<servlet-class>servlet.DemoServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>servlet1servlet-name>
<url-pattern>/demourl-pattern>
servlet-mapping>

<filter>
<filter-name>filterfilter-name>
<filter-class>filter.Filterfilter-class>
filter>
<filter-mapping>
<filter-name>filterfilter-name>

<url-pattern>/servlet/*url-pattern>
filter-mapping>

开启tomcat:
首先访问没有经过过滤器的/demo发现是乱码

过滤器:Filter_第2张图片

这样就创建了一个解决网页乱码的过滤器。

一般可以在过滤器里实现权限拦截:就是说如果没登录就不能进入需要登录才能看到的界面。在过滤器里查看用户session,如果session为空,就说明没登录,那么就将用户输入的url重定向到“没有权限“界面,如果session不为空,那么就说明已经登录有权限查看界面,那么就直接访问用户输入的url。vip等级查看界面功能也是如此实现,先查session然后根据session中的数据来对url重定向达到不同vip等级访问不同页面的功能

你可能感兴趣的:(filter)