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的一些概念,但提供了更多的原生平台集成和改进的…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...