巩固基础之-javaweb

巩固基础之-javaweb,第1张

巩固基础之-javaweb Filter 过滤器 1.作用

在web服务器和servlet之间,实现功能增强。以设置返回值编码格式为例

2.实现过程 1.首先要有一个Servlet

书写Servlet类

public class ShowServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        resp.setCharacterEncoding("utf-8");
        resp.getWriter().write("你好,世界!");
    }

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

配置web.xml,设置两个路径绑定一个Servlet,便于测试


        ShowServlet
        com.zhang.servlet.ShowServlet
    
    
        ShowServlet
        /servlet/show
    
    
        ShowServlet
        /show
    
2.编写Filter类

实现Filter接口,并实现接口中的三个方法。

****
public class CharacterEncodingFilter implements Filter {

    **//初始化:web服务器启动,就一起初始化了,随时等待过滤对象出现!**
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter,初始化完成!");
    }

    
    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");

        System.out.println("CharacterEncodingFilter,执行前");
        //让我们的请求继续往下走,如果不写,则程序到这里就被拦截停止了
        **filterChain.doFilter(servletRequest,servletResponse);**
        System.out.println("CharacterEncodingFilter,执行后");

    }

    //销毁:web服务器关闭的时候,过滤器会销毁
    public void destroy() {
        System.out.println("CharacterEncodingFilter,销毁完成!");
    }
}

web.xml中配置要过滤哪个路径


        CharacterEncodingFilter
        com.zhang.failter.CharacterEncodingFilter
    
    
        CharacterEncodingFilter

        /servlet/*
    
3.运行结果

访问 /show 时,界面输出乱码。
访问 /servlet/show时,界面输出正常中文。

3.注意事项
  • 由于可能不止一个过滤器,所以
    filterChain.doFilter(servletRequest,servletResponse);
    这行代码必须要写,告知我们的请求继续往下走,如果不写,则程序到这里就被拦截停止了

  • init() 方法;web服务器启动,就一起初始化了,随时等待过滤对象出现!

  • destroy()方法;web服务器关闭的时候,过滤器会销毁

Listener 监听器 实现一个监听器接口;(有很多种) 1.编写一个监听器

实现一个监听器,统计网站在线人数;

//统计网站在线人数: 统计session
public class OnlineCountListener implements HttpSessionListener {

    //创建session监听,观察你的一举一动
    //一旦创建Session就会触发一次这个事件!
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext sc = se.getSession().getServletContext();
        System.out.println(se.getSession().getId());
        Integer onlineCount = (Integer) sc.getAttribute("OnlineCount");
        if (onlineCount == null){
            onlineCount = new Integer(1);
        }else {
            int count = onlineCount.intValue() + 1;
            onlineCount = new Integer(count);
        }

        sc.setAttribute("OnlineCount",onlineCount);
    }

    //销毁session监听
    //一旦销毁Session就会触发一次这个事件!
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext sc = se.getSession().getServletContext();
        Integer onlineCount = (Integer) sc.getAttribute("OnlineCount");
        if (onlineCount == null){
            onlineCount = new Integer(0);
        }else {
            int count = onlineCount.intValue() - 1;
            onlineCount = new Integer(count);
        }

        sc.setAttribute("OnlineCount",onlineCount);
    }
}

2.web.xml中注册监听器
    
        com.zhang.listener.OnlineCountListener
    
3.看情况是否使用!(几乎不用)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4675822.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-07
下一篇2022-11-06

发表评论

登录后才能评论

评论列表(0条)

    保存