JavaEE 的相关知识点(一)
一、过滤器
过滤器(Filter)是一个用于对请求和响应进行预处理的组件。过滤器可以在 Java Servlet 规范中使用,通常用于执行一些通用的任务
1、过滤器的作用
过滤器是一种javaEE规范中定义的一种技术,可以让请求达到目标servlet之前,先进入过滤器进行一些拦截处理
当处理完成后,可以机洗向后执行,到达目标servlet。如果配置了多个过滤器,也可以进入到下一个过滤器
2、过滤器的使用场景
(1)统一编码过滤
统一编码过滤器确保所有进入的请求和所有返回的响应都使用统一的字符编码(如 UTF-8)
一般所有的请求和响应都需要通过此过滤器,所以建议在配置时配置为全部域可以进入到此过滤器
(2)权限验证
权限验证过滤器用于检查用户是否有权限访问特定的资源。这对于确保安全性非常重要
(3)跨域过滤
一般情况下浏览器不允许跨域。所谓跨域,就是指在不同服务之间进行访问,在访问时,只要请求协议、域名、端口其中之一不同,就属于跨域访问,在后端通过跨域过滤器响应时,过滤器告知本次响应安全,可以正常接收,从而解决跨域问题
3、过滤器的搭建
(1)统一编码过滤器的搭建
跨域过滤器功能组件(类)
package com.wbc.dormServer.filter;import javax.servlet.*;
import java.io.IOException;public class EncodingFilter implements Filter {String reqencod="";String respencod="";@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("初始化过滤器");reqencod=filterConfig.getInitParameter("reqencod");respencod=filterConfig.getInitParameter("respencod");}@Overridepublic void destroy() {System.out.println("过滤器销毁时执行");}//执行过滤操作的方法@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("编码过滤器");//设置请求编码集servletRequest.setCharacterEncoding(reqencod);//设置响应编码集servletResponse.setContentType(respencod);//让请求离开过滤器,继续向下执行,下一个可能是过滤器,也可能是目标访问的servletfilterChain.doFilter(servletRequest, servletResponse);}
}
过滤器的配置(配置于webapp/WEB-INF/web.xml)
<!-- 注册编码过滤器--><filter><filter-name>encoding</filter-name><filter-class>com.wbc.dormServer.filter.EncodingFilter</filter-class><init-param><param-name>reqencod</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>respencod</param-name><param-value>text/html;charset=utf-8</param-value></init-param></filter>
<!-- 配置那些地址可以进入到过滤器--><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern><!--/*表示所有向后端发送的请求都要进入编码过滤器--></filter-mapping>
此处将例如reqencod(utf-8)、respencod(text/html;charset-utf-8)等参数配置于web.xml是便于打jar包后修改此参数
打包后,web.xml可以直接进行修改,而java文件不可以(因为已经编译为class文件)。特在此说明
(2)跨域过滤器
跨域过滤器功能组件(类)
package com.wbc.dormServer.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebFilter(urlPatterns = "/*")
public class CorsFilter implements Filter {public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;//允许携带Cookie时不能设置为* 否则前端报错//httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域httpResponse.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8848");//允许已知安全可靠的另一个服务的请求跨域httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookiefilterChain.doFilter(servletRequest, servletResponse);}
}
此处通过@WebFilter(urlPatterns = "/*") 在类中配置,便不需要在web.xml文件中配置
说明:
@WebFilter(urlPatterns = "/供外界访问的地址") 是 Java EE(现在的 Jakarta EE)中一种注解配置方式,用于定义一个 Servlet 过滤器。它通过使用注解来简化配置,避免了修改web.xml 文件的需要。
相应的,配置servlet是也可以通过类似方法进行配置,如此时需要配置一个检查类,可以通过注释@WebServlet(urlPatterns = "/check",name = "check", loadOnStartup = 1)来简化配置
二、前后端交互、发送请求
前后端交互发送请求一般分为两种,一种是同步请求(已淘汰),另一种是异步请求
1、同步请求
(1)同步
简单来说,同步就是一次只能做一件事
(2)同步请求
知道了同步,同步请求就很好理解了,当前端像后端发送请求时,此时客户端一切操作都会终止,服务器相应回来的内容会覆盖当前网页的内容。一次只能做一件事,与服务器交互时其他事情不能再继续。例如在表单、超链接发送请求时,都是同步请求,其相应会覆盖当前的网页内容
示例:
以一个简单的登录html为例
在同步请求时,后端反馈的登录成功会覆盖掉之前的网页,十分的不简便不美观
前端代码
<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title></head><body><form action="http://127.0.0.1:8182/dormServer/login" method="post">账号:<input type="text" name="account" value=""/><br />密码:<input type="password" name="password" value=""/><br /><input type="submit" value="登录"/></form></body>
</html>
服务器响应类
package com.wbc.dormServer.web;import com.wbc.dormServer.dao.LoginDao;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;public class LoginServlet extends HttpServlet {/*处理get请求*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doGet()");String name = req.getParameter("name");String age = req.getParameter("age");System.out.println(name);System.out.println(Integer.parseInt(age));}/*处理post请求*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doPost()");//设置请求内容解码的编码//req.setCharacterEncoding("utf-8");String account = req.getParameter("account");String password = req.getParameter("password");System.out.println(account+" "+password);//调用jdbcLoginDao loginDao = new LoginDao();boolean res = false;//resp.setContentType("text/html;charset=utf-8");//设置相应内容的编码PrintWriter printWriter = resp.getWriter();//获得一个打印输出流try {res = loginDao.login(account, password);if (res){//向前做出相应printWriter.write("<h2>登陆成功</h2>");}else if (!res){//向前做出相应printWriter.write("<h2>账号不存在</h2>");}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();printWriter.write("<h2>网络异常404</h2>");}}}
JDBC 与数据库交互
package com.wbc.dormServer.dao;import java.sql.*;public class LoginDao {public boolean login(String username, String password) throws ClassNotFoundException, SQLException {Class.forName("com.mysql.cj.jdbc.Driver");String url ="jdbc:mysql://127.0.0.1:3306/chatdb?serverTimezone=Asia/Shanghai";//定义连接sql所需的urlString users ="root";//用户名String passwords ="Wbc11280";//密码//建立连接Connection connection = DriverManager.getConnection(url,users,passwords);//建立连接//预编译PreparedStatement preparedStatement =connection.prepareStatement("select account from user where account = ? and password = ?");//传入数据preparedStatement.setObject(1, username);preparedStatement.setObject(2, password);//查询操作ResultSet resultSet = preparedStatement.executeQuery();//将查询结构封装到ResultSet类型的对象中 需要将数据封装到指定类型的对象中/*preparedStatement.close();connection.close();*/return resultSet.next();}
}
2、异步请求
(1)异步
异步与同步相反,简单来说,异步就是同时可以做多件事
(2)异步请求
当客户端与服务器交互时,不影响客户端页面的其他操作,同时做多件事情
服务器相应回来的内容不会覆盖整个页面,现在的前后端交互都是异步的,由于页面不用覆盖,体验感更好
实现发送异步请求
实现发送异步请求有两种方法,一种是较为原始的在前端用一个js对象 XMLhttpRequest 发送请求、接收响应的方式;另一种是通过异步框架来实现,但底层逻辑也是通过XMLhttpRequest来实现
(1)在前端用一个js对象 XMLhttpRequest 发送请求、接收响应
前端代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script>function checkAccount(account){//location.href = "http://127.0.0.1:8182/dormServer/check?account="+account;/* 跨域访问问题在8848的服务访问8182后端服务默认浏览器不允许接收来自另一个服务的相应内容认为相应回来的数据时来自另一个服务,可能不安全*///1、创造请求对象var httpObj= new XMLHttpRequest();httpObj.open("get","http://127.0.0.1:8182/dormServer/check?account="+account,true)//封装请求httpObj.send(null);//发送请求//2、执行回调函数,接收响应结果httpObj.onreadystatechange=function(){document.getElementById("msg").innerHTML=httpObj.responseText;}}</script></head><body><input type="text" name="account" onblur="checkAccount(this.value)"/><span id="msg"></span><br/><input type="password" /></body>
</html>
后端响应
package com.wbc.dormServer.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(urlPatterns = "/check",name = "check", loadOnStartup = 1)
public class CheckAccountServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String account = req.getParameter("account");if (account.equals("aaaa")) {resp.getWriter().write("账号已存在");}else {resp.getWriter().write("账号未注册");}}
}
实现效果 :输入账户结束鼠标指针移开后给出提示,不覆盖当前页面
(2)通过异步请求框架,这里以axios框架为例
axios中文网|axios API 中文文档 | axios (axios-js.com)axios框架官网:axios中文网|axios API 中文文档 | axios (axios-js.com)
在官网下载好js文件后导入到文件夹
此处以发送get请求为例,通过axios对异步请求的封装,使得在写代码时更加的方便高效。现在普遍在项目开发中使用异步请求框架。
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/axios.min.js"></script><script >function checkAccount(account){/* axios框架对异步请求的封装 */axios.get("http://127.0.0.1:8182/dormServer/check?account="+account).then((resp)=>{ console.log("msg");document.getElementById("msg").innerHTML=resp.data;//取出后端相应的内容});}</script></head><body><input type="text" name="account" onblur="checkAccount(this.value)"/><span id="msg"></span><br/><input type="password" /></body>
</html>
需要注意的是,当你的应用可能会遇到跨域请求时,配置适当的跨域过滤器是必要的,无论请求是同步请求还是异步请求。
三、json以及后端响应json数据
当后端向前端响应数据时,总是希望可以通过对象进行封装。而不同语言之间是无法直接传输对象的。js想要接收到java的数据只能通过字符串来传输。而无论对于前端程序员还是后端程序员来说,拼接和分离字符串都是一件令人头疼的事件。并且在拼接和分离字符串中也需要明确的规则来进行操作,否则可能会出现数据丢失或其他不必要的麻烦,因此json孕育而生。
1、json的概述
json(Java javaScript object Notation)javaScript对象表示法,是一种js对象表示方式的字符串。目前json格式已成为公认的前后端交互的数据标准格式
2、json的作用
后端向前端响应更多的数据,后端一般情况下将数据封装到对象中,但是js不认识java对象。java中toString将对象转为字符串,js接到后却无法用面向对象的方法直接使用。为了是js更方便的进行操作,在java中将对象转为json格式的字符串,传递给前端js
3、json的运用(示例)
我们以查询一个学生信息为例
v1.0
前端代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/axios.min.js"></script><script>function search(){var name = document.getElementById("name").value;axios.get("http://127.0.0.1:8182/dormServer/search?name="+name).then((resp)=>{console.log(resp.data);document.getElementById("numid").innerHTML=resp.data.num;document.getElementById("nameid").innerHTML=resp.data.name;document.getElementById("genderid").innerHTML=resp.data.gender;document.getElementById("ageid").innerHTML=resp.data.age;});}</script></head><body><input type="text" id="name"/><input type="button" value="搜素" onclick="search()"/><div>学号:<span id="numid"></span><br />姓名:<span id = "nameid"></span><br />性别:<span id = "genderid"></span><br />年龄:<span id = "ageid"></span><br /></div></body>
</html>
学生模组
package com.wbc.dormServer.model;public class Student {private int num;private String name;private int age;private String gender;public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "Student{" +"num=" + num +", name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}
后端相应
package com.wbc.dormServer.web;import com.fasterxml.jackson.databind.ObjectMapper;
import com.wbc.dormServer.model.Student;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(urlPatterns = "/search",name = "search", loadOnStartup = 1)
public class SearchServlet_1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name = req.getParameter("name");//模拟从数据库查询学生信息,并封装到一个学生对象中Student student = new Student();student.setNum(100);student.setName(name);student.setAge(20);student.setGender("男");/** json Java javaScript object Notation javaScript对象表示法 {name=aaa,age=20}* json 是一种公认的 js识别的对象表示方式 对于java来说就是一种特殊的固定格式的字符串** 对象:{键:值,键:值,...}* 集合:[{键:值,键:值,...},{键:值,键:值,...},...]* *///String s = "{name:'"+student.getName()+"',age:"+student.getAge()+"}";//打印响应一个学生对象PrintWriter writer = resp.getWriter();ObjectMapper objectMapper = new ObjectMapper();//通过json组件将java对象转为json格式的字符串String jsonString = objectMapper.writeValueAsString(student);writer.print(jsonString);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}}
在正规项目中,一般打包发送状态码code,提示信息message,以及数据data。因此我们在此将上方代码规范化
v2.0
添加一个标准的响应模型封装类
package com.wbc.dormServer.model;
//标准的响应模型封装类
public class Result {private int code;private String message;private Object data;public Result(int code, String message, Object data) {this.code = code;this.message = message;this.data = data;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}
}
修改服务器响应类,改为发送标准响应模型封装类,并做异常处理
package com.wbc.dormServer.web;import com.fasterxml.jackson.databind.ObjectMapper;
import com.wbc.dormServer.model.Result;
import com.wbc.dormServer.model.Student;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(urlPatterns = "/search",name = "search", loadOnStartup = 1)
public class SearchServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {PrintWriter writer = resp.getWriter();Result result = null;ObjectMapper objectMapper = new ObjectMapper();try {String name = req.getParameter("name");//模拟从数据库查询学生信息,并封装到一个学生对象中Student student = new Student();student.setNum(100);student.setName(name);student.setAge(20);student.setGender("男");result= new Result(200, "查询成功", student);}catch (Exception e) {result = new Result(500, "查询失败",null );}//通过json组件将java对象转为json格式的字符串String jsonString = objectMapper.writeValueAsString(result);writer.print(jsonString);/**//** json Java javaScript object Notation javaScript对象表示法 {name=aaa,age=20}* json 是一种公认的 js识别的对象表示方式 对于java来说就是一种特殊的固定格式的字符串** 对象:{键:值,键:值,...}* 集合:[{键:值,键:值,...},{键:值,键:值,...},...]* *//*//String s = "{name:'"+student.getName()+"',age:"+student.getAge()+"}";//打印响应一个学生对象PrintWriter writer = resp.getWriter();ObjectMapper objectMapper = new ObjectMapper();//通过json组件将java对象转为json格式的字符串String jsonString = objectMapper.writeValueAsString(student);writer.print(jsonString);*/}}
相应的修改前端代码,以匹配后端响应代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script src="js/axios.min.js"></script><script>function search(){var name = document.getElementById("name").value;axios.get("http://127.0.0.1:8182/dormServer/search?name="+name).then((resp)=>{console.log(resp.data);if(resp.data.code==200){document.getElementById("numid").innerHTML=resp.data.data.num;document.getElementById("nameid").innerHTML=resp.data.data.name;document.getElementById("genderid").innerHTML=resp.data.data.gender;document.getElementById("ageid").innerHTML=resp.data.data.age;document.getElementById("showMsg").innerHTML=resp.data.message;}else if(resp.data.code==500){document.getElementById("showMsg").innerHTML=resp.data.message;}});}</script></head><body><input type="text" id="name"/><input type="button" value="搜素" onclick="search()"/><div><div id = "showMsg"></div>学号:<span id="numid"></span><br />姓名:<span id = "nameid"></span><br />性别:<span id = "genderid"></span><br />年龄:<span id = "ageid"></span><br /></div></body>
</html>
效果:
相关文章:

JavaEE 的相关知识点(一)
一、过滤器 过滤器(Filter)是一个用于对请求和响应进行预处理的组件。过滤器可以在 Java Servlet 规范中使用,通常用于执行一些通用的任务 1、过滤器的作用 过滤器是一种javaEE规范中定义的一种技术,可以让请求达到目标servlet之…...

使用Python实现深度学习模型:智能医疗影像识别与诊断
介绍 智能医疗影像识别与诊断是现代医疗技术的重要应用,通过深度学习模型,可以自动分析和识别医疗影像,提高诊断的准确性和效率。本文将介绍如何使用Python和深度学习技术来实现智能医疗影像识别与诊断。 环境准备 首先,我们需要安装一些必要的Python库: pip install …...

24.给定一个链表,实现一个算法交换每两个相邻节点并返回其头部。要求不能修改列表节点中的值,只能更改节点本身。
24. Swap Nodes in Pairs 题目 给定一个链表,交换每两个相邻节点并返回其头部。要求不能修改列表节点中的值,只能更改节点本身。 Example: Given 1->2->3->4, you should return the list as 2->1->4->3....

Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息 在网络编程中,UDP(用户数据报协议)是一种常用的传输协议。与TCP不同,UDP是无连接的,并且不保证数据包的顺序、完整性及交付。尽管如此,UDP因其较低的延迟和开销而被广泛应…...

微服务设计原则——高性能:批量
能批量就不要并发。 如果调用方需要调用我们接口多次才能进行一个完整的操作,那么这个接口设计就可能有问题。 比如获取数据的接口,如果仅仅提供getData(int id)接口,那么使用方如果要一次性获取 20 个数据,它就需要循环遍历调用…...

C:指针学习-指针变量—学习笔记
今日伊雷娜: 目录 前言: 1、字符指针变量 1.1 使用字符指针存放字符 1.2 使用字符指针变量存放字符串 2、数组指针变量 2.1 什么是数组指针变量? 2.2 数组指针变量初始化 2.3 关于数组指针类型的解析 3、函数指针变量 3.1 函数地址 …...

【MySQL 07】表的增删查改 (带思维导图)
文章目录 🌈 一、insert 添加数据⭐ 1. 单行数据 全列插入⭐ 2. 多行数据 指定列插入⭐ 3. 插入否则更新⭐4. 插入否则替换 🌈 二、select 查询数据⭐ 1. select 列🌙 1.1 全列查询🌙 1.2 指定列查询🌙 1.3 查询字段…...

快速上手Git
Git相关概念 Git是一个开源的分布式版本控制系统,由Linus Torvalds在2005年创建,用于有效、高速地处理从小到大的项目版本管理。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流行的版本控制系统之一。 git的工…...

RTC时钟测试
1. 基础知识 Linux 的系统时间有时跟硬件时间是不同步的。 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIO…...

大数据技术——实战项目:广告数仓(第六部分)报表数据导出至clickhouse
目录 第11章 报表数据导出 11.1 Clickhouse安装 11.2 Clickhouse建表 11.2.1 创建database 11.2.2 创建table 11.3 Hive数据导出至Clickhouse 第11章 报表数据导出 由于本项目最终要出的报表,要求具备交互功能,以及进行自助分析的能力,…...

Android studio模拟制作-简易的订餐交易小案例
一、最终呈现效果 订餐支付小案例效果 二、布局设计activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xml…...

消防隐患在线小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,消防隐患举报管理,消防隐患分类管理,统计分类管理,处理结果管理,系统管理 微信端账号功能包括:系统首页,我…...

【Vue3】路由Params传参
【Vue3】路由Params传参 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…...

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限
CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件,同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾,快速释放磁盘内存,缓解卡顿现象,保障系统顺畅地运行。 全磁盘访问权限,就好比机场内进行的安全检查。…...

Ubuntu/18.04 LTS下编译 BoringSSL 库
1、准备一个 Ubuntu/18.04 LTS 系统的设备 2、安装软件 GIT、GCC、CMAKE、G、Golang:1.16 及以上版本 3、克隆仓库源 git clone https://boringssl.googlesource.com/boringssl cd boringssl 4、使用特定版本 git checkout 9fc1c33e9c21439ce5f87855a6591a9324e569fd 5、编…...

【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)
多功能智能家居室内灯光控制系统设计与实现 目录: 目录: 前言: 一、项目背景与目标 二、国内外研究现状: 2.1 国内研究现状: 2.2 国外研究现状: 2.3 发展趋势 三、硬件电路设计 3.1 总体概述 3.2 硬件连接总…...

xss靶场详解
目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 8.第八题 1.第一题 在源码script标签里边,innerhtml是用于访问或修改 HTML 元素内的 HTML 内容的,这里是访问spaghet这个元素的,并通过括号里面的东西搜索当前…...

华为的流程管理
华为建设流程体系始于2000年,那时华为公司面临着快速扩张和全球化发展的挑战,意识到传统的管理模式已经无法满足业务发展的需求。为了提高公司的管理效率和竞争优势,华为决定启动流程体系的建设。在建设过程中,华为借鉴了业界最佳…...

操作系统Linux
1.Linux命令 ls:查看当前目录下所有目录和文件ps:查看所有正在运行的进程top:显示当前系统中占用资源最多的一些进程,shiftm按照内存查看大小netstat:查看端口的命令vi:查看文件的命令rm:删除文…...

1、.Net UI框架:MAUI - .Net宣传系列文章
.NET MAUI(Multi-platform App UI)是一个跨平台的UI框架,它是.NET统一应用模型的一部分,允许开发者使用C#和.NET来创建适用于iOS、Android、macOS和Windows的应用程序。MAUI继承了Xamarin.Forms的一些概念,但提供了更多的原生平台集成和改进的…...

Spring boot 使用 jSerialComm 对串口使用发送信息并接收
什么是 jSerialComm? jSerialComm 是一个 Java 库,旨在提供一种独立于平台的方式来访问标准串行端口,而无需外部库、本机代码或任何其他工具。它旨在替代 RxTx 和(已弃用的)Java Communications API,具有更…...

江协科技STM32学习笔记(第10章 SPI通信)
第10章 SPI通信 10.1 SPI通信协议 10.1.1 SPI通信 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线; 串行外设接口; I2C无论是软件还是软件电路,设计的都还是比较复杂的,硬件…...

力扣热题100_回溯_22_括号生成
文章目录 题目链接解题思路解题代码 题目链接 22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:[“((()))”,“(()())”,“(())()…...

【k8s】ubuntu24.04 containerd 手动从1.7.15 换为1.7.20
24.04的这个应该是apt 安装的1.7.20-1 root@k8s-master-pfsrv:~# sudo apt update && sudo apt install containerd.io -y 命中:1 http://mirrors.aliyun.com/docker-ce/linux/ubuntu noble InRelease 命中:2 https://dl.google.com/linux/chrome/deb stable InRelease…...

Java二十三种设计模式-备忘录模式(19/23)
本文深入探讨了备忘录模式,从定义、组成、实现到使用场景、优缺点、与其他模式的比较,以及最佳实践和替代方案,全面解析了如何在软件开发中有效地保存和恢复对象状态,以支持复杂的撤销操作和历史状态管理。 备忘录模式:…...

js一些杂乱理解
js 的值类型和引用类型 引用类型:object,array,function值类型:诸如number,stringboolean,null,Undefined,Symbol js使用变量访问对象属性示例 var myDog "Hunter"; var dogs { Fido: "Mutt", Hunter: "Doberman", Snoopie: "Beagle&q…...

机器学习 之 线性回归算法
目录 线性回归:理解与应用 什么是线性回归? 一元线性回归 正态分布的重要性 多元线性回归 实例讲解 数据准备 数据分析 构建模型 训练模型 验证模型 应用模型 代码实现 线性回归:理解与应用 线性回归是一种广泛使用的统计方法&…...

ThreadLoad如何防止内存溢出
优质博文:IT-BLOG-CN 从 ThreadLocalMap看 ThreadLocal使用不当的内存泄漏问题 【1】基础概念 : 首先我们先看看ThreadLocalMap的类图,我们知道 ThreadLocal只是一个工具类,他为用户提供get、set、remove接口操作实际存放本地变…...

2024.8.19 学习记录 —— 作业
一、TCP机械臂测试 #include <myhead.h>#define SER_PORT 8888 // 与服务器保持一致 #define SER_IP "192.168.0.114" // 服务器ip地址int main(int argc, const char *argv[]) {// 创建文件描述符打开键盘文件int fd open("/dev/input/event1…...

Java 阿里云视频直播开发流程
首先来看一下直播效果 推流工具有很多种(例如OBS、阿里云直播Demo推流、等等,我用的是芯象导播)阿里播放器地址 一、直播基础服务概述 官方文档说明 二、直播域名配置需要两个域名(推流域名、播流域名) 官方文档说…...