首页 > 其他分享 >day107-过滤器与监听器

day107-过滤器与监听器

时间:2023-05-26 16:22:12浏览次数:35  
标签:day107 public 监听器 过滤器 Integer servlet onlineCount CharacterEncodingFilter

过滤器

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

  • 处理中文乱码

  • 登陆验证

  • ......

导入maven包

 <dependencies>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>3.1.0</version>
     </dependency>
 ​
     <dependency>
         <groupId>javax.servlet.jsp</groupId>
         <artifactId>jsp-api</artifactId>
         <version>2.3.3</version>
     </dependency>
 ​
     <dependency>
         <groupId>javax.servlet.jsp.jstl</groupId>
         <artifactId>jstl-api</artifactId>
         <version>1.2</version>
     </dependency>
 ​
     <dependency>
         <groupId>taglibs</groupId>
         <artifactId>standard</artifactId>
         <version>1.1.2</version>
     </dependency>
 ​
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.31</version>
     </dependency>
 </dependencies>

 

编写过滤器

 public class CharacterEncodingFilter implements Filter {
     @Override
     public void init(FilterConfig filterConfig) throws ServletException {
         //初始化:启动web服务器的时候初始化
         System.out.println("CharacterEncodingFilter初始化");
     }
 ​
     @Override
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
         /*
          1. 过滤器中的所有代码,再过滤特定的请求时都会执行
          2. 必须要让过滤器持续执行
          */
         servletRequest.setCharacterEncoding("utf-8");
         servletResponse.setCharacterEncoding("utf-8");
         servletResponse.setContentType("text/html;charset=UTF-8");
 ​
         System.out.println("before CharacterEncodingFilter");
         filterChain.doFilter(servletRequest,servletResponse);
         System.out.println("after CharacterEncodingFilter");
     }
 ​
     @Override
     public void destroy() {
         //销毁:关闭web服务器的时候,过滤会销毁
         System.out.println("CharacterEncodingFilter销毁");
     }
 }

 

编写servlet

 public class showServlet 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 {
         super.doPost(req, resp);
     }
 }

 

配置servlet和过滤器

 <servlet>
     <servlet-name>ShowServlet</servlet-name>
     <servlet-class>com.gu.servlet.showServlet</servlet-class>
 </servlet>
 <servlet-mapping>
     <servlet-name>ShowServlet</servlet-name>
     <url-pattern>/servlet/show</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
     <servlet-name>ShowServlet</servlet-name>
     <url-pattern>/show</url-pattern>
 </servlet-mapping>
 ​
 <filter>
     <filter-name>CharacterEncodingFilter</filter-name>
     <filter-class>com.gu.filter.CharacterEncodingFilter</filter-class>
 </filter>
 <filter-mapping>
     <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/servlet/*</url-pattern>
 </filter-mapping>

 

在配置时,对servlet设置两个路径/servlet/show和/show

而过滤器只过滤/servlet/*下的内容

结果

在/servlet/show可以成功转义成中文,而/show还是乱码

监听器

 
//统计网站在线人数,统计session
 public class OnlineListener implements HttpSessionListener {
 ​
     @Override
     public void sessionCreated(HttpSessionEvent httpSessionEvent) {
         //创建session监听
         //一旦创建一个session,会触发一次这个事件
         ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
 ​
         System.out.println(httpSessionEvent.getSession().getId());
 ​
         Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
 ​
         if (onlineCount == null){
             onlineCount = new Integer(1);
         }else {
             int count = onlineCount.intValue();
 ​
             onlineCount = new Integer(count+1);
         }
         servletContext.setAttribute("OnlineCount",onlineCount);
     }
 ​
     @Override
     public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
         //销毁session监听
         ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
         Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
 ​
         if (onlineCount == null){
             onlineCount = new Integer(1);
         }else {
             int count = onlineCount.intValue();
 ​
             onlineCount = new Integer(count-1);
         }
         servletContext.setAttribute("OnlineCount",onlineCount);
 ​
     }
 }

 

展示:

 <body>
 <h1>当前有 <span style="color: cornflowerblue"><%=request.getSession().getAttribute("onlineCount")%></span>在线</h1>
 </body>

 

over

标签:day107,public,监听器,过滤器,Integer,servlet,onlineCount,CharacterEncodingFilter
From: https://www.cnblogs.com/GUGUZIZI/p/17435042.html

相关文章

  • Java Web三大组件之Filter过滤器
    JavaWeb三大组件(Servlet、Filter、Listener)1、Filter过滤器概念生活中的过滤器:净水器,空气净化器,大山里的土匪等JavaWeb中的过滤器:当浏览器访问服务器资源时,过滤器就会拦截浏览器发过来的请求,实现一些特别的功能作用:一般用于完成通用的操作,如登录验证,身份验证,统一字符编码和敏感字......
  • pytest + yaml 框架 -29.模板过滤器语法与自定义过滤器使用
    前言v1.2.6版本支持模板过滤器语法的使用,并且可以自定义过滤器了。针对有同学提到上个接口返回一个id值,下个接口引用变量的时候需要根据这个值做一些运算,比如在引用的结果加1.jinja2是可以支持模板过滤器语法的,本篇介绍下模板过滤器的相关使用.v1.2.6版本主要更新以下几点1......
  • Revit二次开发实战04(元素搜集过滤器FilteredElementCollector)
    Revit二次开发实战 FilteredElementCollector元素搜集过滤器1、创建搜集器FilteredElementCollector(Document);搜集文档中所有元素;FilteredElementCollector(Document,List<ElementId>);在指定id集合中搜集;FilteredElementCollector(Document,ElementIdviewId);在......
  • spring security授权过滤器FilterSecurityInterceptor学习
    目录一、springsecurity资源访问权限配置1.1使用ExpressionUrlAuthorizationConfigurer1.2使用UrlAuthorizationConfigurer二、FilterSecurityInterceptor的处理流程2.1ConfigAttribute的获取2.2决策管理器AccessDecisionManager2.3AccessDecisionVoter投票器三、FilterSec......
  • STM32 CAN过滤器配置详解
     STM32CAN过滤器配置详解_stm32can配置_路过的小熊~的博客-CSDN博客路过的小熊~已于 2022-07-3123:09:16 修改 1前言STM32F10X的bxCAN是基本扩展CAN(BasicExtendedCAN)的缩写,它支持CAN协议2.0A和2.0B。在CAN协议里,报文的标识符不代表节点的地址,而是和......
  • Java 拦截器和过滤器
    1.java后端基于过滤器或拦截器处理跨域请求 Java中的过滤器和拦截器的区别Java中的拦截器和过滤器有什么区别 springmvc执行流程? Action就是用于处理一次用户请求的对象。什么是Servlet容器? Servlet 容器只不过是一个Java程序。 ......
  • Filter过滤和Listener监听器
    过滤器Filter简介Filter也称之为过滤器,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet,静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能处理编码。它主要......
  • Filter过滤和Listener监听器
    过滤器Filter简介Filter也称之为过滤器,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet,静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能处理编码。它主要......
  • Vue过滤器-filter
    1.局部定义过滤器<!--*@Descripttion:vue过滤器-filter*@version:*@Author:zhangfan*@email:[email protected]*@Date:2020-07-0309:10:28*@LastEditors:zhangfan*@LastEditTime:2020-07-1414:13:56--><template><divclass="......
  • SpringBoot配置过滤器、拦截器
    拦截器概述SpringBoot提供了一种简单且强大的方式来定义和使用拦截器(Interceptor)。SpringBoot的拦截器基于Spring框架的拦截器机制,可以在请求的处理过程中插入自定义的逻辑。SpringBoot的拦截器主要用于在请求处理的不同阶段执行额外的逻辑操作,比如在请求进入控制器方法之前......