Filter & AJAX & JSON

过滤器 & 监听器 & AJAX

Fileter

  • Fileter 表示过滤器,是 JavaWeb 三大组件( Servlet、Filter、Listener)之一。
  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能
  • 过滤器一般完成一些通用的操作,eg:权限控制、统一编码处理、敏感字符处理等等。。。

Filter 快速入门

  1. 定义类,实现Filter 接口,并重写所有方法

  2. 配置 Filter 拦截资源的路径:在类上定义 @WebFilter 注解

  3. 在 doFilter 方法中输出一句话,并放行

    • 创建出来应该是这个样子
    @WebFilter("/*")
    public class FilterDemo implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            
        }
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("doFilter....");
            //放行
            filterChain.doFilter(servletRequest,servletResponse);
        }
        @Override
        public void destroy() {
    
        }
    
    • 其中 @WebFilter(“/*”) 代表都拦截,可以自己设置要拦截哪些资源

Filter 执行流程

  • 问题思考

      1. 放行后访问对于资源,资源访问完成后,还会回到 Filter 中吗?

      2. 如果会,那么是重新开始执行还是只执行放行后的逻辑呢?

        执行放行后的逻辑

  • 流程

    • 执行放行前逻辑 ==》 放行 ==》访问资源 ==》 执行放行后逻辑
    • 放行前对 request 进行处理,放行后对 response 进行处理
Filter 使用细节
  • **Filter 拦截路径配置 **  (有两种方式):

    • 在 web.xml 文件中配置

      在 web.xml 文件中,可以使用 标签为 Filter 配置拦截路径。示例如下所示:

      xmlCopy Code解释<filter>
          <filter-name>MyFilter</filter-name>
          <filter-class>com.example.MyFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>MyFilter</filter-name>
          <url-pattern>/path/*</url-pattern>
      </filter-mapping>
      

      上述示例中, 标签用于指定 Filter 拦截的路径,可以使用通配符 “*” 进行模糊匹配。

    • 使用注解配置

      在 Servlet 3.0 及以上版本的 Java Web 应用程序中,可以使用注解来配置 Filter 的拦截路径。示例如下所示:

      javaCopy Code解释@WebFilter("/path/*")
      public class MyFilter implements Filter {
          // Filter 的实现代码
      }
      

      使用 @WebFilter 注解可以直接在 Filter 类上指定拦截路径,更加简洁和方便。

  • 过滤器链

    • 一个 Web 应用,可以配置多个过滤器,这多个过滤器称为过滤器链
    • 过滤器自然排序

Listener

  • 在 Java Web 应用程序中,Listener(监听器)是一种特殊的组件,用于监听 Web 应用程序中的事件,并在特定事件发生时执行相应的逻辑。Java Web 应用程序的 Listener 主要分为以下几种类型:

    1. ServletContext 监听器:用于监听 ServletContext 对象的创建和销毁事件。常见的 ServletContext 监听器接口包括 ServletContextListener 和 ServletContextAttributeListener。
    2. HttpSession 监听器:用于监听 HttpSession 对象的创建和销毁事件,以及 HttpSession 属性的变化事件。常见的 HttpSession 监听器接口包括 HttpSessionListener 和 HttpSessionAttributeListener。
    3. ServletRequest 监听器:用于监听 ServletRequest 对象的创建和销毁事件,以及 ServletRequest 属性的变化事件。常见的 ServletRequest 监听器接口包括 ServletRequestListener 和 ServletRequestAttributeListener。

    通过实现这些监听器接口,可以在 Web 应用程序中监听到相应的事件,并编写处理逻辑。通常在监听器的回调方法中可以执行一些初始化、资源清理、日志记录等操作。

    另外,Java Web 应用程序还可以使用监听器来响应 ServletContextAttribute 和 HttpSessionAttribute 的变化,这样就可以实现对 Web 应用程序全局范围内的属性变化进行监听和处理。

    在实际开发中,Listener 可以用于很多方面,比如在 ServletContextListener 中进行应用程序的初始化工作,或者在 HttpSessionListener 中进行用户在线状态的管理,以及在 ServletRequestListener 中记录请求日志等。

AJAX

AJAX 作用

  • 概念:AJAX :异步的 JavaScript 和 XML
      1. 与服务器进行数据交换:通过AJAX 可以给服务器发送请求,并获取服务器响应的数据
        1. 使用了AJAX 和服务器进行通信,就可以使用 HTML+AJAX 来替换JSP 页面了
      2. 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术 eg:搜索

同步异步

在 Java Web 应用程序中,同步和异步是用来描述请求处理方式的两种模式。下面简要介绍一下它们的区别:

  1. 同步
    • 同步处理是指请求在服务器端被一个线程依次处理,直到该请求处理完成并响应给客户端后,线程才会释放。
    • 在传统的 Java Web 应用程序中,默认情况下是同步处理方式。当客户端发送请求后,服务器接收到请求并为其分配一个线程进行处理,直至请求处理完成返回响应。
    • 同步处理的优点是简单直观,适用于大多数场景,但可能会导致性能瓶颈,特别是在需要等待外部资源或处理时间较长的情况下。
  2. 异步
    • 异步处理是指请求在服务器端可以在不同的线程中处理,允许一个请求分配给一个线程后,该线程可以立即释放,而不必等待请求处理完成。
    • 在 Java Web 应用程序中,可以利用 Servlet 3.0 引入的异步特性实现异步处理。通过将请求标记为异步,可以在处理请求时释放线程,而不必阻塞等待结果。
    • 异步处理适用于需要处理大量并发请求、请求涉及到耗时操作或需要等待外部资源的情况。通过异步处理可以提高系统的吞吐量和性能。

AJAX快速入门

Axios 异步框架

  • Axios 对原生的AJAX 进行封装,简化书写
  • Axios (axios-http.com) 官方文档
      1. 引入 axios 的 js 文件
      2. 使用 axios 发送请求,并获取响应结果

JSON

  • JavaScript 对象表示法
  • 语法简单,层次结构分明,多用于作为数据载体,在网络中进行数据传输

JSON 基础语法

  1. 数据类型

    • JSON 支持以下数据类型:
      • 字符串(String):使用双引号括起来的文本。
      • 数字(Number):整数或浮点数。
      • 布尔值(Boolean):true 或 false。
      • 对象(Object):使用花括号 {} 包裹的键值对集合。键和值之间使用冒号 : 分隔,多个键值对之间使用逗号 , 分隔。
      • 数组(Array):使用方括号 [] 包裹的值的有序集合。多个值之间使用逗号 , 分隔。
  2. 示例: 下面是一个 JSON 示例,展示了不同数据类型的使用:

    jsonCopy Code解释{
        "name": "John",
        "age": 30,
        "isStudent": false,
        "address": {
            "street": "123 Main St",
            "city": "New York"
        },
        "hobbies": ["reading", "sports", "traveling"]
    }
    

    上述示例中,name 是一个字符串,age 是一个数字,isStudent 是一个布尔值,address 是一个对象,hobbies 是一个数组。

  3. 访问数据

    • 在使用 JSON 数据时,可以通过键来访问对应的值。例如,要访问上述示例中的 name,可以使用 data.name 的方式进行访问。
    • 如果对应的值是对象或数组,可以使用点号 . 或方括号 [] 进行多级访问。例如,要访问示例中的 address 的 city,可以使用 data.address.city 的方式进行访问。
  4. JSON 解析和生成

    • 在 Java 中,可以使用第三方库(如 Jackson、Gson)来解析和生成 JSON 数据。

    • 解析 JSON:将 JSON 字符串转换为 Java 对象,可以通过库提供的 API 来实现。

      •   //将JSON 字符串转为JS对象
          var jsObject = JSON.parse(jsonStr);
        
          alert(jsObject.name)
        
    • 生成 JSON:将 Java 对象转换为 JSON 字符串,同样可以通过库提供的 API 来实现。

    • //将 JS 对象转成 JSON 字符串
       var s = JSON.stringify(jsObject);
        alert(s)
      

JSON 的基础语法就是这样,它简洁明了,易于理解和使用,因此广泛应用于各种应用程序和数据交换场景。

  • JSON 数据和 Java 对象转换

    • JSON 库 =》 Fastjson

    •         //1.将Java 对象转换成 JSON字符串
              user user = new user();
              user.setName("wdc");
              user.setPassword("123");
      
              String jsonString = JSON.toJSONString(user);
              System.out.println(jsonString);  //{"name":"wdc","password":"123"}
      
      
              //2.将JSON 对象转换为Java 对象
              com.wdc.json.user user1 = JSON.parseObject("{\"name\":\"wdc\",\"password\":\"123\"}", com.wdc.json.user.class);
              System.out.println(user1);
      
  • 31
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值