栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

过滤器(Filter)、监听器(Listener)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

过滤器(Filter)、监听器(Listener)

1、Filter

Filter:过滤器 ,用来过滤网站数据。 常用于处理中文乱码

import javax.servlet.*;                          在这个包中,别导错了

写一段文字,在浏览器

public class souchar 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);
    }
}

设置过滤器,设置编码格式 

public class CharacterFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //过滤器初始化,web服务器启动时初始化
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset = utf-8");
        filterChain.doFilter(servletRequest,servletResponse);

    //FilterChain必须转交req、resp
    }

    @Override
    public void destroy() {
        //过滤器销毁
    }
}

配置需要过滤的 

    
        servlet_char
        com.jia.servlet.souchar
    
    
        servlet_char
        /show
    

    
        charFilter
        com.jia.CharacterFilter
    
    
        charFilter
       /*
    
2、Listener

在线人数监听

实现监听器接口

public class countonlinePeople implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlineNumber = (Integer) servletContext.getAttribute("onlineNumber");
        if(onlineNumber==null){
            onlineNumber  = 1;
        }
        else {
           onlineNumber++;
        }
        servletContext.setAttribute("onlineNumber",onlineNumber);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlineNumber = (Integer) servletContext.getAttribute("onlineNumber");
        if(onlineNumber==null){
            onlineNumber  = 0;
        }
        else {
            onlineNumber--;
        }
        servletContext.setAttribute("onlineNumber",onlineNumber);
    }
}

注册监听器


    com.jia.countOnlinePeople

应用:使用过滤器实现登录

1、登录页面



    Title



    

2、登录页面的servlet(配好servlet的映射)

public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if(req.getParameter("username").equals("1") && req.getParameter("pwd").equals("1")){
            req.getSession().setAttribute("user_success",req.getSession().getId());
//把req的sessionid保存下来,表示该浏览器已经登录,注销则把保存的sessionid移除
            resp.sendRedirect("success/success.jsp");
        }
        else {
            resp.sendRedirect("login.jsp");//重写登录
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 3、注销登录

public class logout extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //开发中一般不销毁
        Object user_session = req.getSession().getAttribute("user_success");
        if(user_session!=null){
            req.getSession().removeAttribute("user_success");
            resp.sendRedirect("login.jsp");
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4、过滤访问success文件夹的servlet

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //servletRequest没有session
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse reps = (HttpServletResponse) servletResponse;
        if(req.getSession().getAttribute("user_success")==null){
            reps.sendRedirect("/test/login.jsp");
        }
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {

    }
}

5.需要配置的映射

    
        LoginFilter
        com.jia.LoginFilter
    
    
        LoginFilter
        /success/*
    
    
        logina
        com.jia.servlet.Login
    
    
        logina
        /login
    

    
        logout
        com.jia.servlet.logout
    
    
        logout
        /logout
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号