JavaWeb学习、过滤器、ajax异步请求、json、jquery-api文档
一、过滤器:
按照过滤规则筛选出想要的资源。 为什么使用过滤器?
1. 很多地方都需要判断是否登录。如果我们在每个资源出进行判断,非常麻烦。我们可以使用过滤器在访问这些资源前进行判断。
(这样就不用在主界面,修改,删除界面加判断语句了
<c:if test="${sessionScope.user==null}"><c:redirect url="/login.jsp"/></c:if>--%>)
2.如何定义过滤器:
创建一个类并实现Filter接口重写方法:
案例01
如果不登录无法访问其他资源
package com.zyl.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/**
* @className: MyFilter
* @author: Zyl
* @date: 2024/12/9
* @Version: 1.0
* @description:
*/
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
@Override
//初始化过滤器
public void init(FilterConfig filterConfig) throws ServletException {
// Filter.super.init(filterConfig);
System.out.println("过滤器的初始方法,只会调用一次");
}@Override
//过滤器过滤方法
//Httpservlet是ServletRequest的子接口,儿子接口功能更多,强制转换
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// System.out.println("过滤器的过滤方法,会调用多次");
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//获取请求资源的路径
String path = req.getServletPath();
//打印
System.out.println(path);
//判断该路径是否为白名单
if("/login.jsp".equals(path)||"/register.jsp".equals(path)||"/user".equals(path)||path.startsWith("/images")){
//如果是,就放行
filterChain.doFilter(servletRequest,servletResponse);
}else{
//不是就判断是否登录,登录就放行,否则就跳转回登录页面
Object user = req.getSession().getAttribute("user");
if(user!=null){
filterChain.doFilter(servletRequest,servletResponse);
}else{
response.sendRedirect("/login.jsp");
}
}
}@Override
//销毁过滤器
public void destroy() {
// Filter.super.destroy();
System.out.println("过滤器销毁时调用该方法,当服务器重启或关闭时");
}
}
注册过滤器--类似servlet
<!--注册过滤器-->
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.zyl.Filter.MyFilter</filter-class>
</filter>
<!--定义资格规则-->
<filter-mapping>
<filter-name>MyFilter</filter-name>
<!--/*:表示所有资源
/views/*: 访问/views下的资源时
*.do: 访问.do结尾的资源时
-->
<url-pattern>/*</url-pattern>
</filter-mapping>
基于注解:
二、 ajax异步请求
1.ajax使用场景
2. 如何实现异步操作
自己通过js代码向后台发送异步请求. [非常复杂]
使用第三方封装好的js代码--【jquery axios结合vue使用更加完美】
我们现在使用jquery
jquery就是对我们js的进一步封装,使操作js更加方便的一个前端插件。
1. 第一步引入jquery的插件
jquery下载所有版本(实时更新)
<%--引入jquery文件--%><script src="/js/jquery-3.5.1.min.js"></script>
2.点击事件
3. 服务器响应的数据类型
我们刚才服务器响应的数据类型都是文本类型。服务器响应的数据类型有三种:
文本类型。 基本数据类型的值,字符串类型的值
xml格式类型. 不建议使用了。人工智能数据
<name>张三</name> <age>18</age>
json格式的数据。--就是这种数据格式
三、什么是json
JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON
是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。
JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。
json对象:
{k1:v1,k2:v2,k3:v3....}
json对象集合:
[
{k:v,k:v},
{k:v,k:v},
{k:v,k:v}
]
规则如下:
1)映射用冒号(“:”)表示。名称:值
2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
4) 并列数据的集合(数组)用方括号(“[]”)表示。
[
{名称1:值,名称2:值2},
{名称1:值,名称2:值2}
]
5 元素值可具有的类型:string, number, object, array, true, false, null
6. 调用json对象中数据: 对象名.key
1. 使用封装的jar完成json的转换
第三方公司就封装一个jar。该jar中提供了很多类完成java转换成json对象。
public static void main(String[] args) {
User user=new User("闫四安",19);
String s = JSON.toJSONString(user);//把一个java对象转换为json对象
System.out.println(s); //版本太高List<User> list=new ArrayList<>();
list.add(new User("李佳琪",18));
list.add(new User("戴柏辛",18));
list.add(new User("左怀甫",18)); //[{"name":"李佳琪","age":18},{},{}]String s1 = JSON.toJSONString(list);
System.out.println(s1);
}
综合案例
Ajax请求所有用户数据,把服务器响应的数据以表格的形式展示
ajax2.jsp:
<%--
Created by IntelliJ IDEA.
User: ldh
Date: 2024/9/25
Time: 15:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="/js/jquery.min.js"></script>
</head>
<%--onload:表示页面加载完毕后执行的js函数. onclick点击事件 onblur失焦事件 onload页面加载事件--%>
<body οnlοad="loadUser()"><table border="1" cellspacing="0" cellpadding="0" width="500" align="center" >
<tr>
<th>编号</th>
<th>账号</th>
<th>密码</th>
<th>姓名</th>
<th>操作</th>
</tr>
<tbody id="userTable"></tbody>
</table>
</body>
<script>
function loadUser() {
// 使用jQuery的get方法发送GET请求到"/UserServlet",回调函数处理返回的结果
$.get("/UserServlet", function (result) {
// 获取页面上id为"userTable"的表格元素
var userTable = document.getElementById("userTable");
// 用于动态生成表格内容的字符串变量
var str = "";
// 遍历结果集,生成表格的每一行内容
for (let i = 0; i < result.length; i++) {
// 开始拼接一个表格行
str += "<tr>";
// 拼接用户ID单元格
str += "<td>" + result[i].id + "</td>";
// 拼接用户名单元格
str += "<td>" + result[i].username + "</td>";
// 拼接用户密码单元格
str += "<td>" + result[i].password + "</td>";
// 拼接用户真实姓名单元格
str += "<td>" + result[i].realname + "</td>";
// 拼接包含删除按钮的单元格
str += "<td><button οnclick=''>删除</button></td>";
// 完成一个表格行的拼接
str += "</tr>";
}
// 将拼接好的字符串设置为表格的innerHTML,动态更新表格内容
userTable.innerHTML=str;
}, "json"); // 指定返回数据类型为json
}
</script>
</html>
UserServlet:
private void selectAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<User> users = userDao.selectAll();//获取数据库中所有的用户
//把java集合对象转换为json集合对象
String json = JSON.toJSONString(users);
//获取输出对象
PrintWriter out = resp.getWriter();
out.println(json);//刷新输出对象
out.flush();
//关闭输出对象
out.close();
}
相关文章:

JavaWeb学习、过滤器、ajax异步请求、json、jquery-api文档
一、过滤器: 按照过滤规则筛选出想要的资源。 为什么使用过滤器? 1. 很多地方都需要判断是否登录。如果我们在每个资源出进行判断,非常麻烦。我们可以使用过滤器在访问这些资源前进行判断。 (这样就不用在主界面,修改…...

深入探索 JVM:原理、机制与实战
一、JVM 概述 JVM(Java Virtual Machine)是 Java 程序运行的核心组件,它提供了一个独立于硬件和操作系统的执行环境,使得 Java 程序能够在不同平台上具有跨平台的特性。 JVM 主要由以下几部分组成: 类装载器…...

JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))
目录 一、Servlet详细。 (1)基本介绍。 (2)基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 (1)实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…...

支付宝租赁小程序助力便捷生活新方式
内容概要 支付宝租赁小程序为现代人带来了许多惊喜,它不仅仅是一个简单的租赁平台,更是生活中不可或缺的好帮手。想象一下,无论你缺少什么,从工具到家居用品,只需轻轻一点,便能轻松找到需要的物品。这个小…...

Linux-ubuntu环境配置
一,安装VWware,里面导入镜像文件 这些都是文件夹里面有的,然后对着正点原子视频安装就行,虚拟机的破解码,去百度搜一个能用就行,中间遇见俩问题。①乌班图里面不能上网,②插入U盘后,…...

深入解析下oracle的number底层存储格式
oracle数据库中,number数据类型用来存储数值数据,它既可以存储负数数值,也可以存储正数数值。相对于其他类型数据,number格式的数据底层存储格式要复杂得多。今天我们就详细探究下oracle的number底层存储格式。 一、环境搭建 1.…...
nginx代理rabbitmq和配置 Nginx 代理达梦数据库
在 Nginx 中使用 stream 模块进行 TCP 代理时,可以将 TCP 或 UDP 流量转发到指定的后端服务器。你给出的配置是一个用于代理 RabbitMQ 的示例,具体是在 TCP 层上代理 5672 端口的流量。 只能在nginx.conf配置上代理 stream {# 定义 upstream,…...
汉语唤醒词的模糊判断(Python)
汉语唤醒词的模糊判断【Python】 说明安装库代码Demo其他 说明 这是一个简单的汉语模糊唤醒词的判断器,汉语发音中前后舌以及声母韵母的区别,如果进行精准判断,很容易误判。需要一个模糊判断的逻辑! 安装库 pip install pypinyin代码Demo …...

Redis篇-2--原理篇1--I/O多路复用机制(5种I/O模型,I/O多路复用)
I/O多路复用机制: Redis 是通过I/O多路复用机制来管理大量客户端连接。这使得redis可以实现通过单线程来处理多个客户端连接的请求,避免了为每个客户端创建独立的线程,从而减少了上下文切换的开销,提高了系统的并发性和性能。 理解…...

Knowledge Graph Studio:让知识图谱构建更简单、更智能
一、前言 上周和研究院的同事讨论 2025 年大模型产品规划时,让我产生了一些疑惑和不解,因为从大家交流的规划方向来看,更多的还是集中在Prompt提示词工程(包括提示词的管理、测试、评估、调优)这一块规划的确实挺细&a…...

vue 中实现音视频播放进度条(可拖拽,满足常见开发需求)
由于开发需要,作者封装了一个音视频播放进度条的组件,支持 vue2 及 vue3 ,有需要的朋友后台私信作者获取组件源码哦(工作日每天都在线),下面是对该款组件的介绍。 组件默认样式👇(组…...

[免费]SpringBoot+Vue企业OA自动化办公管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue企业OA自动化办公管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue企业OA自动化办公管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入…...
笔记:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景
一、目的:在WPF中BitmapSource都有哪些派生类,他们主要功能,使用方法,使用场景 BitmapSource 是 WPF 中图像处理的基类,提供了许多派生类来处理不同类型的图像源。以下是一些常见的 BitmapSource 派生类、它们的主要功…...
JAVA基础学习笔记_多线程
文章目录 多线程并发和并行多线程的实现方式Thread类实现Runnable接口方式实现callable接口和Future接口实现 常用的成员方法线程的生命周期线程的安全问题同步代码块同步方法lock锁死锁 生产者和消费者(等待唤醒机制)阻塞队列实现等待唤醒机制线程的6种状态线程池自定义线程池…...
什么是自动化办公
自动化办公是指使用技术工具或软件,通过预设流程或脚本,自动执行日常办公任务,从而提升效率、减少错误、节约时间的办公模式。它适用于需要重复性、规则明确的工作流程,让员工将精力集中在更具创造性和战略性的工作上。 自动化办公…...

数据库系统
数据库模式 3个阶段以及各自的产物: 1、需求分析(数据流图、数据字典、需求说明书); 2、概念结构设计(ER模型); 3、逻辑结构设计(关系模式)); 关…...

文件系统--底层架构(图文详解)
一、文件系统的底层存储与寻址 当我们谈到文件系统的底层结构时,最关键的问题是:文件的数据与元数据(属性)如何存储在磁盘上,以及系统是如何定位这些数据的?在谈及文件系统之前,我们要先对储存…...

【OCR】——端到端文字识别GOT-OCR2.0不香嘛?
代码:https://github.com/Ucas-HaoranWei/GOT-OCR2.0?tabreadme-ov-file 在线demo:https://huggingface.co/spaces/stepfun-ai/GOT_official_online_demo 0.前言 最早做ocr的时候,就在想如何能做一个端到端的模型,就不用先检测再…...

SkyWalking 和 ELK 链路追踪实战
一、背景 最近在给项目搭建日志平台的时候,采用的方案是 SkyWalking ELK 日志平台,但发现 ELK 日志平台中的日志没有 Trace ID,导致无法追踪代码报错的整体链路。 空哥提示:Trace ID 是分布式追踪中用来唯一标识一个服务请求或事…...

ETCD的封装和测试
etcd是存储键值数据的服务器 客户端通过长连接watch实时更新数据 场景: 当主机A给服务器存储 name: 小王 主机B从服务器中查name ,得到name-小王 当主机A更改name 小李 服务器实时通知主机B name 已经被更改成小李了。 应用:服务注册与发…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...

C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14
什么是 Pattern Matching(模式匹配) ❝ 模式匹配就是一种“描述式”的写法,不需要你手动判断、提取数据,而是直接描述你希望的数据结构是什么样子,系统自动判断并提取。❞ 你给的定义拆解: ✴ Instead of …...