Filter、Listener、AJAX

news2024/9/23 22:43:03

 Filter

        概念:Filter 表示过滤器,是JavaWeb三大组件(Servlet、Filter、 Listener)之一。

        过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。

        过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等...

快速入门

  1. 定义类,实现Filter接口, 并重写其所有方法
  2. 配置Filter拦截资源的路径:在类上定义@WebFilter注解
  3. 在doFilter方法中输出一句话,并放行
WebFilter("/*") // "/*"表示拦截所有资源路径
ublic class StudyFilter 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("file");
       System.out.println("file");
       //放行(放行前一般会对request进行处理)
       filterChain.doFilter(servletRequest,servletResponse);
       //放行后一般会对response数据进行处理
   }
   @Override
   public void destroy() {
   }

执行流程

        放行后访问对应资源,资源访问完成后,还会回到Filter中继续执行放行后的逻辑 

 

使用细节

拦截路径配置

        Filter可以根据需求,配置不同的拦截资源路径

拦截具体的资源:/index.jsp  只有访问index.jsp时才会被拦截。

目录拦截:/user:/*  访问/user下的所有资源,都会被拦截

后缀名拦截:*.jsp  访问后缀名为jsp的资源,都会被拦截

拦截所有:/*  访问所有资源,都会被拦截

过滤器链

        一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链

        注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序

Listener

        概念:Listener 表示监听器,是JavaWeb三大组件(Servlet、Filter、 Listener)之一 。

        监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件

Listener分类: JavaWeb中提供 了8个监听器

监听器分类监听器名称作用
ServletContext监听ServletContextListener用于对ServletContext对象进行监听(创建、销毁)
ServletContextAttributeListener对ServletContext对象中属性的监听(增删改属性)
Session监听HttpSessionListener对Session对象的整体状态的监听(创建、销毁)
HttpSessionAttributeListener对Session对象中的属性监听(增删改属性)
HttpSessionBindingListener监听对象于Session的绑定和解除
HttpSessionActivationListener对Session数据的钝化和活化的监听
Request监听ServletRequestListener对Request对象进行监听(创建、销毁)
ServletRequestAttributeListener对Request对象中属性的监听(增删改属性)

ServletContextListener使用

  1. 定义类,实现ServletContextListener接口
  2. 在类上添加@WebListener注解
@WebListener
public class StudyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //加载资源
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        //释放资源
    }
}

AJAX

概述 

         概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML

AJAX作用: 

        1.与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据(使用了AJAX和服务器进行通信,就可以使用HTML+ AJAX来替换JSP页面了 )

         2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用校验,等等...

*同步和异步

快速入门

1.编写AjaxServlet,并使用response输出字符串

public class StudyAjax extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //相应数据
        resp.getWriter().write("hello");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

2.创建XMLHttpRequest对象:用于和服务器交换数据

var xhttp;
if (window.XMLHttpRequest){
    //新版浏览器
    xhttp = new XMLHttpRequest();
}else {
    //旧版浏览器
    xhttp = new ActiveXObject("Microsoft.XMLHTTP")
}

3.向服务器发送请求

方法描述
open(methodurlasync)

规定请求的类型

        method:请求的类型:GET 还是 POST

        url:服务器(文件)位置

        async:true(异步)或 false(同步),默认为true

send()向服务器发送请求(用于 GET)
send(string)向服务器发送请求(用于 POST)
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();

4.获取服务器响应数据

xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        alert(this.responseText);
    }
};
属性描述
onreadystatechange定义了当 readyState 属性发生改变时所调用的函数。
readyState

保存了 XMLHttpRequest 的状态。

        0: 请求未初始化

        1: 服务器连接已建立

        2: 请求已接收

        3: 正在处理请求

        4: 请求已完成且响应已就绪

status

200: "OK"

403: "Forbidden"

404: "Page not found"

statusText返回状态文本(例如 "OK" 或 "Not Found")

 

Axios异步框架

        Axios对原生的AJAX进行封装,简化书写

        官网:https://www.axios-http.cn

快速入门

        1.引入axios的js文件

<script src="js/axios-0.18.0.js">

        2.使用axios发送请求,并获取响应结果

//get请求方式
axios({
    method:"get",
    url:"http://localhost:8080/studyServlet/Ajax?username=glaty"
})then(function (resp) {
    alert(resp.data);
})

//post请求方式
axios({
    method:"get",
    url:"http://localhost:8080/studyServlet/Ajax",
    data:"username=glaty"
})then(function (resp) {
    alert(resp.data);
})

Axios请求方式别名

        为了方便起见,Axios 已经为所有支持的请求方法提供了别名。

方法名作用
get(url)发起GET方式请求
post(url,请求参数)发起POST方式请求

//发送get请求
axios.get("url")
    .then(function (resp){
        alert(resp.data);
});

//发送post请求
axios.post("url","参数")
    .then(function (resp){
        alert(resp.data);
});

JSON

        概念:JavaScript Object Notation。JavaScript 对象表示法

        由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输

基础语法

        value的数据类型为:

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或false)

数组(在方括号中)

对象(在花括号中)

null

        定义:

var变量名= {"key1": value1,

                    "key2": value2,

                    ...

                    };

var json = {
    "name": "zhangsan",
    "age": 23,
    "addr": ["北京","上海", "西安"]
};

        获取数据:

变量名key

json.name

JSON数据和Java对象转换

        请求数据:JSON字符串转为Java对象

        响应数据:Java对象转为JSON字符串

        Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。

使用:

        1.导入坐标

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

        2.Java对象转JSON

Thing thing = new Thing();
thing.setId(132);
thing.setName("name");

String jsonString = JSON.toJSONString(thing);

        3.JSON字符串转Java对象

Thing thing1 = JSON.parseObject("{\"id\":132,\"name\":\"name\"}", Thing.class);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1545128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac 装 虚拟机 vmware、centos7等

vmware&#xff1a; https://www.vmware.com/products/fusion.html centos7 清华镜像&#xff1a; 暂时没有官方的 m1 arm架构镜像 centos7 链接: https://pan.baidu.com/s/1oZw1cLyl6Uo3lAD2_FqfEw?pwdzjt4 提取码: zjt4 复制这段内容后打开百度网盘手机App&#xff0c;操…

【Python】Scrapy整合FastAPI实现爬虫API 附大量示例

文章目录 前言1. 网页分析入门1.1 基本原理1.2 Scrapy 原理 2. 创建项目2.1 创建Scrapy项目2.2.1 创建Scrapy项目2.2.2 创建Spider2.2.3 执行Demo 2.2 引入FastAPI 2. 获取Cookie3. 数据建模3.1 Scrapy 数据建模3.2 SQLAlchemy 创建实体类 3. 分析网页3.1 xpath 分析3.2 css 分…

计算机进制转换:二进制、八进制、十进制、十六进制。原码、补码、反码。

一、什么是进制 在生活中&#xff0c;我们通常都是使用阿拉伯数字计数的&#xff0c;也就是10进制&#xff0c;以10为单位&#xff0c;遇10进一&#xff0c;所以是由0&#xff0c;1&#xff0c;2、3、4、5、6、7、8、9组成的&#xff1b;而在计算机中&#xff0c;计算机是无法…

AI工具排行榜:最全工具汇总

如今,人工智能技术正在快速崛起,AI助手、语音识别、机器翻译等工具深深渗透到我们的工作和生活中。这些智能工具极大地提高了我们的工作效率,使我们能更加专注于创造性的任务。 本文将为读者推荐一些实用的AI神器,只要掌握其中一个,就能极大地提升你的工作能力,事半功倍。这些…

YOLOv9代码解读[01] readme解读

文章目录 YOLOv9COCO数据集上指标&#xff1a;环境安装训练验证重参数化 Re-parameterization推断相关链接 YOLOv9 paper: YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information github: https://github.com/WongKinYiu/yolov9 COCO数据集上指…

如何使用Python进行网络安全与密码学【第149篇—密码学】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 用Python进行网络安全与密码学&#xff1a;技术实践指南 随着互联网的普及&#xff0c;网络…

CSS(四)

一、CSS浮动 1.1 传统网页布局的三种方式 网页布局的本质——用 CSS 来摆放盒子。 把盒子摆放到相应位置. CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序)&#xff1a; 普通流&#xff08;标准流&#xff09; 浮动 定位 1.2 标准流&#xff08;普通流/文档…

【C++】哈希应用之位图

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.位图的概念 2.位…

基于React的低代码平台开发实践

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;在线地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

day07-缓存商品、购物车

1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 结果&#xff1a; 系统响应慢、用户体验差 1.2 实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓…

Java 在PDF中插入页眉、页脚

在处理PDF文档时&#xff0c;有时需要为文档中的每一页添加页眉和页脚&#xff0c;以包含一些有用的信息&#xff0c;如文档标题、章节名称、日期、页码等。对于需要自动化处理的场景&#xff0c;或者需要在大量文档中添加一致的页眉和页脚&#xff0c;可以通过编程的方式来实现…

java Web餐馆订单管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 餐馆订单管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

【超图 SuperMap3D】【基础API使用示例】51、超图SuperMap3D - 绘制圆|椭圆形面标注并将视角定位过去

前言 引擎下载地址&#xff1a;[添加链接描述](http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id2524) 绘制圆形或者椭圆形效果 核心代码 entity viewer.entities.add({// 圆中心点position: { x: -1405746.5243351874, y: 4988274.8462937465, z: 370…

git reset版本回退后悔药(图文例子)

目录 版本回退前期测试样例准备git reset --soft 不撤销add,撤销commit,保留修改git reset --mixed 或 git reset () 撤销add,撤销commit,保存修改git reset --hard 撤销add,撤销commit,不保存修改git reset --merge 取消合并git reset --keep 不撤销add,撤销commit,根据情况判…

数据可视化-ECharts Html项目实战(7)

在之前的文章中&#xff0c;我们学习了如何设置漏斗图、仪表盘。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢 数据可视化-ECharts Html项目实战&#xff08;6…

Spring Boot 3核心技术介紹集应用实例

文章目录 核心技术1. **配置管理**&#xff1a;2. **Starter依赖**&#xff1a;3. **自动配置**&#xff1a;4. **启动过程与扩展应用**&#xff1a;5. **日志管理**&#xff1a;6. **数据访问**&#xff1a;7. **计划任务**&#xff1a;8. **缓存**&#xff1a;9. **消息队列*…

RSTP环路避免实验(思科)

华为设备参考&#xff1a;RSTP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 RSTP (Rapid Spanning Tree Protocol) 是从STP发展而来 • RSTP标准版本为IEEE802.1w • RSTP具备STP的所有功能&#xff0c;可以兼容STP运行 • RSTP和STP有所不同 减少了…

拥抱C++的深度和复杂性,挖掘更多可能 !——《C++20高级编程(第5版)》

&#xff0c;C难以掌握&#xff0c;但其广泛的功能使其成为游戏和商业软件应用程序中最常用的语言。即使是有经验的用户通常也不熟悉许多高级特性&#xff0c;但C20的发布提供了探索该语言全部功能的绝佳机会。《C20高级编程(第5版)》为C的必要内容提供了一个代码密集型、面向解…

蓝桥杯学习笔记(贪心)

在很久很久以前&#xff0c;有几个部落居住在平原上&#xff0c;依次编号为1到n。第之个部落的人数为 t 有一年发生了灾荒&#xff0c;年轻的政治家小蓝想要说服所有部落一同应对灾荒&#xff0c;他能通过谈判来说服部落进行联台。 每次谈判&#xff0c;小蓝只能邀请两个部落参…

【软考高项】十九、项目管理概论之价值驱动的项目管理知识体系

1、项目管理知识体系概述 重点记忆项目管理涉及内容&#xff1a;12项项目管理原则-10大知识领域&#xff08;10大管理&#xff09;-8大绩效域-5类过程组-4项生命周期-价值交付系统-组织战略和目标实现 2、项目管理原则 勤勉、尊重和关心他人 ①关注组织内部和外部的职责; ②坚…