当前位置: 首页 > news >正文

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 的相关知识点(一)

一、过滤器 过滤器&#xff08;Filter&#xff09;是一个用于对请求和响应进行预处理的组件。过滤器可以在 Java Servlet 规范中使用&#xff0c;通常用于执行一些通用的任务 1、过滤器的作用 过滤器是一种javaEE规范中定义的一种技术&#xff0c;可以让请求达到目标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的信息 在网络编程中&#xff0c;UDP&#xff08;用户数据报协议&#xff09;是一种常用的传输协议。与TCP不同&#xff0c;UDP是无连接的&#xff0c;并且不保证数据包的顺序、完整性及交付。尽管如此&#xff0c;UDP因其较低的延迟和开销而被广泛应…...

微服务设计原则——高性能:批量

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

C:指针学习-指针变量—学习笔记

今日伊雷娜&#xff1a; 目录 前言&#xff1a; 1、字符指针变量 1.1 使用字符指针存放字符 1.2 使用字符指针变量存放字符串 2、数组指针变量 2.1 什么是数组指针变量&#xff1f; 2.2 数组指针变量初始化 2.3 关于数组指针类型的解析 3、函数指针变量 3.1 函数地址 …...

【MySQL 07】表的增删查改 (带思维导图)

文章目录 &#x1f308; 一、insert 添加数据⭐ 1. 单行数据 全列插入⭐ 2. 多行数据 指定列插入⭐ 3. 插入否则更新⭐4. 插入否则替换 &#x1f308; 二、select 查询数据⭐ 1. select 列&#x1f319; 1.1 全列查询&#x1f319; 1.2 指定列查询&#x1f319; 1.3 查询字段…...

快速上手Git

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

RTC时钟测试

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

大数据技术——实战项目:广告数仓(第六部分)报表数据导出至clickhouse

目录 第11章 报表数据导出 11.1 Clickhouse安装 11.2 Clickhouse建表 11.2.1 创建database 11.2.2 创建table 11.3 Hive数据导出至Clickhouse 第11章 报表数据导出 由于本项目最终要出的报表&#xff0c;要求具备交互功能&#xff0c;以及进行自助分析的能力&#xff0c;…...

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…...

消防隐患在线小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;消防隐患举报管理&#xff0c;消防隐患分类管理&#xff0c;统计分类管理&#xff0c;处理结果管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我…...

【Vue3】路由Params传参

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

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

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

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项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)

多功能智能家居室内灯光控制系统设计与实现 目录&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、项目背景与目标 二、国内外研究现状&#xff1a; 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; 2.3 发展趋势 三、硬件电路设计 3.1 总体概述 3.2 硬件连接总…...

xss靶场详解

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

华为的流程管理

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

操作系统Linux

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

1、.Net UI框架:MAUI - .Net宣传系列文章

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

Spring boot 使用 jSerialComm 对串口使用发送信息并接收

什么是 jSerialComm&#xff1f; jSerialComm 是一个 Java 库&#xff0c;旨在提供一种独立于平台的方式来访问标准串行端口&#xff0c;而无需外部库、本机代码或任何其他工具。它旨在替代 RxTx 和&#xff08;已弃用的&#xff09;Java Communications API&#xff0c;具有更…...

江协科技STM32学习笔记(第10章 SPI通信)

第10章 SPI通信 10.1 SPI通信协议 10.1.1 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线&#xff1b; 串行外设接口&#xff1b; I2C无论是软件还是软件电路&#xff0c;设计的都还是比较复杂的&#xff0c;硬件…...

力扣热题100_回溯_22_括号生成

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

【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)

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

js一些杂乱理解

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

机器学习 之 线性回归算法

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

ThreadLoad如何防止内存溢出

优质博文&#xff1a;IT-BLOG-CN 从 ThreadLocalMap看 ThreadLocal使用不当的内存泄漏问题 【1】基础概念 &#xff1a; 首先我们先看看ThreadLocalMap的类图&#xff0c;我们知道 ThreadLocal只是一个工具类&#xff0c;他为用户提供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 阿里云视频直播开发流程

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

SQLite 轻量级的嵌入式关系型数据库的替代软件

SQLite 是一个轻量级的嵌入式关系型数据库&#xff0c;由于其简单易用和跨平台的特性&#xff0c;被广泛应用于各种应用程序中。以下是一些可作为SQLite替代品的数据库软件或可视化管理工具&#xff1a; 1. **SQLiteStudio**&#xff1a;这是一个免费、开源的跨平台SQLite数据…...

Flutter-自适用高度PageView

需求 在 Flutter 中&#xff0c;PageView 是一个非常常用的组件&#xff0c;能够实现多个页面的滑动切换。然而&#xff0c;默认的 PageView 高度是固定的&#xff0c;这在展示不同高度的页面时&#xff0c;可能会导致不必要的空白或内容裁剪问题。为了使 PageView 能够根据每…...

群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...

TypeScript 构建工具之 webpack

在实际开发中&#xff0c;直接使用TypeScript 编译器的情况不多。 在项目中&#xff0c;需要使用构建工具对代码进行打包&#xff0c;不可能脱离项目使用TypeScript 编译器单独打包TypeScript 。 那如何将 webpack 和 TypeScript 进行集成&#xff1f; 参考文档&#xff1a; w…...

conda环境下在pycharm中调试scrapy项目

前提条件 已经创建好了conda环境已经安装好了scrapy框架项目初始化完成 编写一个爬虫脚本 import scrapyclass StackOverflowSpider(scrapy.Spider):name stackoverflowstart_urls [http://stackoverflow.com/questions?sortvotes]def parse(self, response):print("…...

contenteditable=“true“的标签限制字数的时候修改光标位置

contenteditable"true"的标签限制字数的时候修改光标位置 有时候input和textarea并不能完全满足ui需求&#xff0c;这个时候我们就用contenteditable"true"来将别的标签修改为可编辑状态&#xff0c;但当我们通过js修改了内容之后光标的位置就是一个问题&…...

51单片机-LED灯蜂鸣器数码管按键DS18B20温度传感器

LDE灯的相关程序 LED灯闪烁 LED流水灯 方法1 方法二&#xff1a; 因为P1口可以直接控制P1^0~P1^7的8个led灯&#xff0c;利用一个8位的二进制数字来进行控制即可。如果要点亮P1^0 只需要给P1口传递 1111 1110即可。 蜂鸣器的使用 什么是蜂鸣器&#xff1f; 蜂鸣器是一种一…...

笔记本一线品牌有哪些

笔记本电脑的一线品牌通常指的是在市场上具有较高市场份额、良好口碑、较强的技术实力和服务能力的品牌。根据目前的信息&#xff0c;笔记本电脑市场的一线品牌主要包括以下几个&#xff1a; 联想 (Lenovo)&#xff1a;联想在全球笔记本市场上的占有率较高&#xff0c;其产品线…...

mysql聚合函数和分组

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

ubuntu20.04+RealSenseD455

ubuntu20.04安装驱动双目相机RealSenseD455 安装环境安装RealSense SDK 2.0ROS包安装启动Realsense摄像头存在的 bugD455标定安装环境 系统:Ubuntu20.04 ROS:Noetic 视觉传感器:Intel RealSense D455 安装RealSense SDK 2.0 该安装有两种方式,一个是用命令安装,另一个是…...

WAF绕过技巧

WAF绕过技巧 WAF&#xff08;Web Application Firewall&#xff09;是一种安全系统&#xff0c;旨在监控和控制网络流量&#xff0c;以防止攻击&#xff0c;如SQL 注入、跨站脚本&#xff08;XSS&#xff09;和拒绝服务&#xff08;DoS&#xff09;。 WAF 可以通过多种方式绕过…...

HarmonyOS应用三之组件生命周期和参数传递

目录&#xff1a; 1、生命周期的执行顺序2、页面数据传递3、图片的读取4、数据的备份和恢复5、轮播图6、页面布局图 1、生命周期的执行顺序 /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* yo…...

[Qt][Qt 网络][上]详细讲解

目录 0.概述1.UDP Socket1.核心API概览2.回显服务器3.回显客户端 0.概述 要使用Qt中有关网络编程的API&#xff0c;需要添加network模块 1.UDP Socket 1.核心API概览 主要的类有两个&#xff1a;QUdpSocket和QNetworkDatagramQUdpSocket表⽰⼀个UDP的socket⽂件 bind(const …...

读零信任网络:在不可信网络中构建安全系统21读后总结与感想兼导读

1. 基本信息 零信任网络&#xff1a;在不可信网络中构建安全系统 道格巴斯&#xff08;Doug Barth&#xff09; 著 人民邮电出版社,2019年8月出版 1.1. 读薄率 书籍总字数252千字&#xff0c;笔记总字数73194字。 读薄率73194252000≈29.5% 这个读薄率是最高的吧&#x…...

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…...

Redis未授权访问漏洞利用合集

一、基本信息 靶机&#xff1a;IP:192.168.100.40 攻击机&#xff1a;IP:192.168.100.60 二、漏洞 & 过程 Redis 未授权访问漏洞利用无口令远程登录靶机 靶机 cd redis-4.0.8/src./redis-server ../redis.conf 攻击机 ./redis-cli -h 192.168.100.40 Redis 未授权访问…...

基于asp.net的在线考试系统、基于c#的在线考试管理系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个…...

将 hugo 博客搬迁到服务器

1. 说明 在 Ubuntu 22.04 上使用 root 账号&#xff0c;创建普通账号&#xff0c;并赋予 root 权限。 演示站点&#xff1a;https://woniu336.github.io/ 魔改hugo主题: https://github.com/woniu336/hugo-magic 2. 服务器配置 建立 git 用户 adduser git安装 git sudo apt …...

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署 什么是RAG&#xff1a; 我能把这个过程理解为Kimi.ai每次都能列出的一大堆网页参考资料吗&#xff1f;Kimi学了这些资料以后&#xff0c;根据这里面的信息综…...

CTF密码学小结

感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套&#xff08;密码学上过课都会&#xff09;&#xff0c;其他的就是数论的一些技巧 似乎格密码也很流行&#xff0c;以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质&#xff1a…...