java web-04-filter

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

  • 处理中文乱码
  • 登录验证......

1、简单介绍

public class EncodingFilter implements Filter {

    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
    }

    //filterChain:过滤链
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        System.out.println("EncodingFilter执行前");
        chain.doFilter(request,response);
        System.out.println("EncodingFilter执行后");
    }

    //销毁
    public void destroy() {
        System.out.println("销毁");
    }
}
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello servlet!!! 你好,服务!!!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<servlet>
    <servlet-name>helloservlet</servlet-name>
    <servlet-class>com.feng.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloservlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>helloservlet</servlet-name>
    <url-pattern>/servlet/hello</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.feng.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>

分别访问发现什么区别!!!

2、例题

登录页面:

<head>
    <title>login</title>
</head>
<body>
<form action="/login" method="post">
    <input type="text" name="username">
    <input type="submit">
</form>
</body>

判断登录用户:

public class LoginServlet extends HelloServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        if (username.equals("admin")){
            req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
            resp.sendRedirect("/sys/success.jsp");
        }else {
            resp.sendRedirect("/error/error.jsp");
        }
    }

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

过滤器:

public class SysFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request1 = (HttpServletRequest) request;
        HttpServletResponse response1 = (HttpServletResponse) response;
        Object user_session = request1.getSession().getAttribute("USER_SESSION");
        if (user_session == null) {
            response1.sendRedirect("/login.jsp");
        }
        chain.doFilter(request1,response1);
    }

    public void destroy() {

    }
}

注意:过滤器写完后一定要记得到配置!!!

<head>
    <title>success</title>
</head>
<body>
<h1>登录成功,this is success</h1>
<a href="/logout">注销</a>
</body>
public class LogoutServlet extends HelloServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object user_session = req.getSession().getAttribute("USER_SESSION");
        if (user_session != null){
            req.getSession().removeAttribute("USER_SESSION");
            resp.sendRedirect("/login.jsp");
        }else {
            resp.sendRedirect("/login.jsp");
        }
    }

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

添加映射,注册过滤器。

访问测试,发现不登录访问被拦截了!

posted @ 2021-10-11 20:41  比特风  阅读(31)  评论(0)    收藏  举报