JSP期末要点复习
一、JSP工作原理
1.客户端请求JSP页面:用户通过浏览器发送一个请求到服务器,请求一个特定的JSP页面。这个请求被服务器上的Web容器(如Apache Tomcat)接收。
2.JSP转换为Servlet:当JSP页面第一次被请求时,Web容器将JSP文件转换成一个Java Servlet。这个过程涉及到将JSP页面中的标记、脚本和JSP指令转换成Java代码。如果JSP页面已经被转换并编译成Servlet,且自上次修改以来没有变化,Web容器将重用已有的Servlet。
3.编译Servlet:转换生成的Java Servlet代码被编译成字节码(.class文件)。这使得Web容器可以像处理任何其他Servlet一样来处理JSP页面。
4.Servlet处理请求:一旦JSP页面对应的Servlet被编译,Web容器就会加载并执行该Servlet。Servlet执行过程中,会执行其中的Java代码,并且根据代码逻辑生成动态内容。这包括从数据库检索数据、执行业务逻辑等。
5.生成响应:Servlet执行完毕后,将生成的HTML内容(可能还包括CSS、JavaScript等)作为响应返回给客户端。这个响应是通过Servlet的response对象生成的。
6.客户端显示响应:最后,浏览器接收到从Servlet返回的响应,并渲染HTML内容,用户便可以看到生成的页面。
二、锚点链接实现
目录使用href="#xxx"
跳转目标使用id="xxx"
<!DOCTYPE html>
<html>
<head><title>锚点链接示例</title>
</head>
<body><!-- 创建指向锚点的链接 -->
<a href="#section1">跳转到第一节</a> |
<a href="#section2">跳转到第二节</a><!-- 页面内容 -->
<h2 id="section1">第一节</h2>
<p>这是第一节的内容。</p><h2 id="section2">第二节</h2>
<p>这是第二节的内容。</p></body>
</html>
三、JSP注释
1.普通注释
<% //普通注释 %>
<% /*普通注释*/ %>
2.隐式注释
<%-- 隐式注释 --%>
普通注释用户可以通过网页源码查看到注释,而隐式注释用户不可查看。当JSP页面被转换和编译成Servlet时,这些隐式注释会被完全忽略,不会出现在生成的HTML中,客户端不可见。
四、 JSP指令元素
1.include指令
include指令的作用是在一个页面中导入其他JSP页面。
<%@ include file="header.jsp" %>
2.page指令
page指令用于定义有关JSP页面的各种属性。
language:声明用于JSP页面的脚本语言。默认值为"java"。
extends:指定JSP页面应继承的类。通常不需要用到,因为JSP页面默认继承自javax.servlet.jsp.HttpJspPage。
import:导入JSP页面中使用的Java类或包。多个包或类之间用逗号分隔。
session:指定JSP页面是否可以访问HTTP会话(session)。默认值为"true"。
contentType:设置响应的MIME类型和字符编码。默认值为"text/html; charset=ISO-8859-1"。
......
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*,java.io.*" %>
3.taglib指令
taglib指令用于引入一些特定的标记库以简化JSP页面的开发。
<%@ taglib uri="uri" prefix="prefix" %>
例如从JSP标准标记库的core库引入前缀为c的标记:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
综合案例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %> <!-- include指令将header.jsp的内容包含进来 -->
<%@ page import="java.util.*, java.text.*" %> <!-- page指令用于导入Java类 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!-- taglib指令用于导入JSTL核心标签库 --><!DOCTYPE html>
<html>
<head><title>Sample Page with Directives</title>
</head>
<body><!-- 使用taglib指令定义的JSTL核心标签库输出当前日期 -->
<p>The current date and time: <c:out value="${now}" /></p><!-- include指令包含footer.jsp -->
<%@ include file="footer.jsp" %></body>
</html>
五、JSP动作元素
1.<jsp:include>动作
<jsp:include>动作允许在请求的时间内,在JSP页面中包含静态或动态的资源。
<jsp:include page="relativeURL" />
2.<jsp:forward>动作
将一个JSP的内容传到page指定的另一个JSP中。
<jsp:forward page="relativeURL" />
3.<jsp:plugin>动作
在JSP页面中嵌入JavaBean或脚本。
<jsp:plugin type="bean | applet"code="..."codebase="..."archive="..."width="..."height="..."align="..."jreversion="..."><jsp:params><jsp:param name="..." value="..."/><!-- 更多参数 --></jsp:params><jsp:fallback><!-- 在插件不可用时显示的内容 --></jsp:fallback>
</jsp:plugin>
type:指定插件的类型,可以是applet或bean。
code:applet的类名或bean的对象序列化表示。
codebase:applet类文件或bean对象存放的基本URL。
archive:包含applet或bean的JAR文件名称。
width和height:指定插件在页面上的显示尺寸。
align:插件在页面中的对齐方式。
jreversion:指定运行applet或bean所需的Java插件版本。
<jsp:params>和<jsp:param>:用于传递参数到applet或bean。
<jsp:fallback>:当插件不可用(如浏览器不支持插件或未安装相应的Java插件)时,在页面上显示的备用内容。
4.<jsp:param>动作
<jsp:param>元素用于向其他JSP元素(如<jsp:forward>、<jsp:include>和<jsp:plugin>)传递参数,通过这种方法可以将数据从一个JSP页面传递到另一个页面或组件。
<jsp:param name="parameterName" value="parameterValue" />
六、JSP脚本元素
1.变量声明
<%!int count = 0;String message = "Hello, World!";%>
2.方法声明
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>Method Declaration in JSP</title>
</head>
<body>
<%! // 方法声明public String toUpperCase(String input) {if (input != null) {return input.toUpperCase();}return "";}
%><%// 方法调用String message = "Hello, World!";String upperMessage = toUpperCase(message);
%><p>Original Message: <%= message %></p>
<p>Upper Case Message: <%= upperMessage %></p></body>
</html>
3.表达式元素
JSP表达式元素用于直接在JSP页面中输出Java表达式的值。表达式元素由 <%= 开始,由 %>结束。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>表达式使用案例</title>
</head>
<body><p>Current time: <%= new java.util.Date() %></p><p>10 + 20 = <%= 10 + 20 %></p></body>
</html>
七、JSP隐含对象和有效范围
request:代表客户端的请求信息。通过这个对象可以获取到客户端的请求参数、头信息等。
response:代表对客户端的响应。可以通过这个对象设置响应头、发送错误等。
pageContext:包含了与JSP页面相关的上下文信息。可以用来获取其他隐含对象、分享数据等。
session:代表用户会话,可以用来在不同的请求之间保持信息。
application:代表整个Web应用的上下文环境,可以用来在整个应用范围内共享信息。
config:代表Servlet配置的信息,可以用来获取初始化参数。
out:代表输出流,用于将内容输出到客户端。
page:代表当前的JSP页面本身,相当于在Servlet中的this关键字。
exception:代表JSP页面在执行过程中抛出的异常对象(仅在错误页面中可用)。
1.隐含对象的有效范围
页内有效(pageContext):对象创建后只能在当前JSP页面内被访问。所有页内有效对象的引用存储在页面上下文对象(pageContext)中,使用pageContext的setAttribute()和getAttribute()方法传递数据。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>页面有效案例</title>
</head>
<body>
<%// 使用pageContext设置一个属性pageContext.setAttribute("attribute_name", "attribute_value");// 现在,使用 pageContext 得到属性值String message = (String) pageContext.getAttribute("attribute_name");
%><!-- 在页面输出属性值 --><p><%= message %></p>
</body>
</html>
请求有效(request) ,请求有效的对象在同一请求不同JSP页面内都可以访问。如果请求转向到同一运行时的其他资源,这些对象依然有效。请求有效的对象在请求处理结束时就会失效。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>请求有效案例</title>
</head>
<body>
<%// 获取请求参数“用户名”String username = request.getParameter("username");
%><p>Welcome, <%= username %></p>
</body>
</html>
会话有效(session),会话是指客户端和服务器之间持续连接的一段时间。在这段时间内,当需要多次和服务器交互信息时,可以将有关信息存入session对象中,这些信息是会话有效的。在与服务器断线后,就会失效。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>会话有效案例</title>
</head>
<body>
<%//检查session是否已经具有属性“user”if(session.getAttribute("user") == null) {// 如果没有,设置一个属性session.setAttribute("user", "John Doe");}// 从会话中得到属性“user”String user = (String) session.getAttribute("user");
%><h1>Welcome, <%= user %></h1>
</body>
</html>
应用有效(application),应用的作用范围是从Web应用服务器一开始执行服务一直到结束服务为止。应用有效范围最大、影响最长。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>应用有效案例</title>
</head>
<body>
<%// 检查应用有效范围是否已经具有属性“counter”if(application.getAttribute("counter") == null) {// If not, initialize the counterapplication.setAttribute("counter", 0);}// 获取counter的属性值Integer counter = (Integer) application.getAttribute("counter");// counter+1counter++;// 设置+1后的counter属性值为当前属性值application.setAttribute("counter", counter);
%><h1>Page visits: <%= counter %></h1>
</body>
</html>
在JSP页面中,作用范围的对象分别为page、request、session、application,它们之间的关系如图所示。
2.response、out隐含对象
response对象, response对象和request对象功能恰好相反,request 对象封装的是客户端提交的信息,而response对象封装的是返回客户端的信息。通过 response 对象,你可以控制向客户端发送的响应的各个方面,包括设置响应头、发送错误、重定向到另一个页面等。
使用 response.setHeader(String name, String value) 方法来设置响应头,设置内容类型为JSON:
<%response.setHeader("Content-Type", "application/json");
%>
使用 response.sendRedirect(String location) 方法可以将用户重定向到另一个URL:
<%response.sendRedirect("anotherPage.jsp");
%>
使用 response.sendError(int sc, String msg) 方法向客户端发送一个错误响应:
<%response.sendError(response.SC_NOT_FOUND, "请求资源不可用");
%>
out对象,用于向客户发送内容的输出,通过out对象可以在在JSP页面中动态生成HTML、文本或其他类型的内容。
<%@ page contentType="text/html;charset=GBK" %>
<%out.println("hello");out.newLine();out.write("hello");
%>
<%="hello"%>
<%out.close();
%>
3.getAttribute()和getParameter()的区别
getAttribute()是用于从请求(request)或会话(session)等作用域中通过setAttribute()设置的属性获取属性值。
getParameter()是获取客户端中由用户提供的,比如用户在表单中输入的数据。
八、JSP使用数据库
1.连接数据库步骤及主要代码
(1)加载数据库驱动:这是连接数据库的第一步,需要加载相应的JDBC驱动。
(2)建立连接:使用 DriverManager.getConnection() 方法建立数据库连接。
(3)创建Statement:通过数据库连接对象创建 Statement 或 PreparedStatement 对象,用于执行SQL语句。
(4)执行查询:使用 executeQuery() 方法执行SQL查询,或使用 executeUpdate() 方法执行更新(如INSERT、UPDATE或DELETE)操作。
(5)处理结果:对于查询操作,处理返回的 ResultSet。
(6)关闭连接:完成所有的数据库操作后,关闭 ResultSet,Statement 和 Connection 对象。
<%@ page import="java.sql.*" %><%// Step 1: 加载JDBC驱动Class.forName("com.mysql.jdbc.Driver");// Step 2: 与数据库建立connectionConnection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");try {// Step 3: 创建一个 statementStatement statement = connection.createStatement();// Step 4: 执行查询/更新ResultSet resultSet = statement.executeQuery("SELECT * FROM mytable");/*int result = stmt.executeUpdate("UPDATE 表名 SET 列名 = 值 WHERE 条件");System.out.println("影响的行数:" + result);*/// Step 5: 输出查询结果while (resultSet.next()) {out.println(resultSet.getString("mycolumn") + "<br>");}} finally {// Step 6: 关闭连接if (connection != null) {connection.close();}}
%>
2.PreparedStatement连接数据库并操作
try {// 加载JDBC驱动Class.forName("com.mysql.jdbc.Driver");// 使用 DriverManager 建立连接。Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "pass");// 编写sql语句String sql = "INSERT INTO Users (username, password, email) VALUES (?, ?, ?)";//创建 PreparedStatement对象PreparedStatement pstmt = conn.prepareStatement(sql);// 执行sql语句pstmt.setString(1, "testUser");pstmt.setString(2, "password123");pstmt.setString(3, "test@example.com");// 输出结果int affectedRows = pstmt.executeUpdate();System.out.println("Inserted rows: " + affectedRows);pstmt.close();conn.close();
} catch (Exception e) {e.printStackTrace();
}
3. sql标签连接数据库并操作
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html>
<html>
<head><title>SQL Tag Example</title>
</head>
<body><sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/myDatabase" user="root" password="password"/><sql:update dataSource="${dataSource}" var="insertCount">INSERT INTO users (id, name) VALUES (1, 'John Doe')
</sql:update><sql:query dataSource="${dataSource}" var="result">SELECT * FROM users
</sql:query><c:forEach var="row" items="${result.rows}">ID: ${row.id}, Name: ${row.name}<br/>
</c:forEach></body>
</html>
九、在JSP中使用JavaBean
public class ManagerForm {private int id = 0; //定义int类型的简单属性idprivate String manager = ""; //定义String类型的简单属性managerprivate String pwd = ""; //定义String类型的简单属性pwdpublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getManager() {return manager;}public void setManager(String manager) {this.manager = manager;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}
}
编写一个关于图书的JavaBean,假设包名为Books,类名为book,该类含有两个属性bnum和bname,包含一个方法,该方法实现:输出“我是一本图书”。(15分)
import java.io.Serializable;public class Book implements Serializable {// 定义属性private String bnum;private String bname;// 无参构造器public Book() {}// bnum的getter和setter方法public String getBnum() {return bnum;}public void setBnum(String bnum) {this.bnum = bnum;}// bname的getter和setter方法public String getBname() {return bname;}public void setBname(String bname) {this.bname = bname;}// 一个简单的方法,输出"I am a Book"public void showBook() {System.out.println("我是一本图书。");}}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>User Info</title>
</head>
<body><jsp:useBean id="user" class="UserBean" scope="request"/>
<jsp:setProperty name="user" property="name" value="John Doe"/>
<jsp:setProperty name="user" property="email" value="john.doe@example.com"/><h2>User Information</h2>
<p>Name: <jsp:getProperty name="user" property="name"/></p>
<p>Email: <jsp:getProperty name="user" property="email"/></p></body>
</html>
十、Servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SimpleServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置响应内容类型为 HTMLresponse.setContentType("text/html");// 获取响应的 PrintWriter 对象PrintWriter out = response.getWriter();try {// 输出 HTML 页面的头部out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head>");out.println("<title>Simple Servlet</title>");out.println("</head>");out.println("<body>");// 输出当前日期和时间out.println("<h2>The current date and time is: " + new Date() + "</h2>");// 输出 HTML 页面的尾部out.println("</body>");out.println("</html>");} finally {// 关闭 PrintWriterout.close();}}
}
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>SimpleServlet</servlet-name><servlet-class>SimpleServlet</servlet-class></servlet><servlet-mapping><servlet-name>SimpleServlet</servlet-name><url-pattern>/simple</url-pattern></servlet-mapping></web-app>
十一、EL表达式
1.JSP的EL(Expression Language)表达式主要用于简化对Java代码的访问,特别是在JSP页面中获取和显示数据时。
2.基本语法:EL表达式开始与 ${ 并以 } 结束。例如:${expression}
3.EL表达式可以访问以下范围的对象:
pageScope:当前页面的属性
requestScope:与请求相关的属性
sessionScope:与会话相关的属性
applicationScope:与整个应用程序相关的属性
例如,要访问存储在请求范围内的属性 user,可以使用:${requestScope.user}、${user}
4.访问JavaBean的属性:
如果 user 是一个包含属性 name 的JavaBean,可以使用点操作符来访问这个属性:${user.name}
5.操作和表达式
EL提供了一系列的操作符来进行逻辑、关系和算术操作:
算术操作:+, -, *, / (或 div), % (或 mod)
逻辑操作:and, &&, or, ||, not, !
关系操作:==, !=, <, >, <=, >=
条件操作:? :
例如:
${num1 + num2}
${user.age >= 18}
${flag ? "Yes" : "No"}
下面是一个使用EL表达式的简单JSP页面案例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Quick Start JSP EL</title>
</head>
<body><%-- 假设在请求范围有一个名为 "user" 的属性 --%><p>Name: ${user.name}</p><p>Age: ${user.age}</p><%-- 条件表达式 --%><p>Status: ${user.age >= 18 ? 'Adult' : 'Minor'}</p><%-- 遍历列表 --%><ul><%-- 假设在请求范围有一个名为 "users" 的列表 --%><c:forEach var="user" items="${users}"><li>${user.name} - ${user.age}</li></c:forEach></ul>
</body>
</html>
相关文章:

JSP期末要点复习
一、JSP工作原理 1.客户端请求JSP页面:用户通过浏览器发送一个请求到服务器,请求一个特定的JSP页面。这个请求被服务器上的Web容器(如Apache Tomcat)接收。 2.JSP转换为Servlet:当JSP页面第一次被请求时࿰…...
AJAX(JavaScript版本)
目录 一.AJAX简介 二.XMLHttpRequests对象 2.1XMLHttpRequests对象简介 2.2创建XMLHttpRequests对象 2.3定义回调函数 2.4发送请求 2.5XMLHttpRequests对象方法介绍 2.6XMLHttpRequests对象属性 三.向服务器发送请求 3.1发送请求 3.2使用GET还是POST 3.3使用GET来发…...

框架学习之SpringMVC学习笔记(一)
一、SpringMVC简介 1-介绍 Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。 在控制层…...

数据集005:螺丝螺母目标检测数据集(含数据集下载链接)
数据集简介 背景干净的目标检测数据集。 里面仅仅包含螺丝和螺母两种类别的目标,背景为干净的培养皿。图片数量约420张,train.txt 文件描述每个图片中的目标,label_list 文件描述类别 另附一个验证集合,有10张图片,e…...

Swift 类和结构体
类和结构体 一、结构体和类对比1、类型定义的语法2、结构体和类的实例3、属性访问4、结构体类型的成员逐一构造器 二、结构体和枚举是值类型三、类是引用类型1、恒等运算符2、指针 结构体和类作为一种通用而又灵活的结构,成为了人们构建代码的基础。你可以使用定义常…...
网络安全相关面试题(hw)
网络安全面试题 报错注入有哪些函数 updatexml注入 载荷注入 insert注入 updata注入 delete注入 extractvalue()注入 注入防御方法 涵数过滤 直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面 PDO预处理,从PHP 5.1开始&…...

前端开发攻略---三种方法解决Vue3图片动态引入问题
目录 1、将图片放入public文件夹中 2、使用 /src/.... 路径开头 3、生成图片的完整URL地址(推荐) 1、将图片放入public文件夹中 使用图片:路径为 /public 开头 <template><div><img :src"/public/${flag ? 01 : 02}.jp…...

零售EDI:Target DVS EDI项目案例
Target塔吉特是美国一家巨型折扣零售百货集团,与全球供应商建立长远深入的合作关系,目前国内越来越多的零售产品供应商计划入驻Target。完成入驻资格审查之后,Target会向供应商提出EDI对接邀请,企业需要根据指示完成供应商EDI信息…...
AWS安全性身份和合规性之AWS Firewall Manager
AWS Firewall Manager是一项安全管理服务,可让您在AWS Organizations中跨账户和应用程序集中配置和管理防火墙规则。在创建新应用程序时,您可以借助Firewall Manager实施一套通用的安全规则,更轻松地让新应用程序和资源从一开始就达到合规要求…...

R实验 随机变量及其分布
实验目的: 掌握常见几种离散性随机变量及其分布在R语言中对应的函数用法;掌握常见几种连续性随机变量及其分布在R语言中对应的函数用法;掌握统计量的定义及统计三大抽样分布在R语言中对应的函数用法。 实验内容: (习题…...

rapidssl泛域名https600元一年
泛域名https证书也可以称之为通配符https证书,指的是可以用一张https证书为多个网站(主域名以及主域名下的所有子域名网站)传输数据加密,并且提供身份认证服务的数字证书产品。RapidSSL旗下的泛域名https证书性价比高,申请速度快,…...

月薪5万是怎样谈的?
知识星球(星球名:芯片制造与封测技术社区,星球号:63559049)里的学员问:目前是晶圆厂的PE,但是想跳槽谈了几次薪水,都没法有大幅度的增长,该怎么办?“学得文武…...

linux下宝塔负载100%解决方法
今天发现服务器宝塔面板负载居然是100% 但是cpu 和内存其实并不高 通过命令查看主机 uptime 中load average 居然高达18.23 看来负载是真的高了 通过vmstat 看看具体问题 procs: r 表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数…...

【C++】STL快速入门基础
文章目录 STL(Standard Template Library)1、一般介绍2、STL的六大组件2.1、STL容器2.2、STL迭代器2.3、相关容器的函数vectorpairstringqueuepriority_queuestackdequeset, map, multiset, multimapunordered_set, unordered_map, unordered_multiset, …...

面向对象编程的魅力与实战:以坦克飞机大战为例
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、面向对象编程的引言 二、理解面向对象编程与面向过程编程的差异 三、创建类与对象&…...

二叉树——堆的实现
一.前言 前面我们讲解了二叉树的概念以及二叉树的存储结构:https://blog.csdn.net/yiqingaa/article/details/139224974?spm1001.2014.3001.5502 今天我们主要讲讲二叉树的存储结构,以及堆的实现。 二.正文 1.二叉树的顺序结构及实现 1.1二叉树的顺序…...
【Spring】DynamicDataSourceHolder 动态数据源切换
【Spring】DynamicDataSourceHolder 动态数据源切换 常见场景常见工具一、AbstractRoutingDataSource1.1、 定义 DynamicDataSourceHolder1.2、 配置动态数据源1.3、 在Spring配置中定义数据源1.4、在业务代码中切换数据源 二、Dynamic Datasource for Spring Boot2.1. 添加依赖…...
LeeCode 3165 线段树
题意 传送门 LeeCode 3165 不包含相邻元素的子序列的最大和 题解 考虑不含相邻子序列的最大和,在不带修改的情况下容易想到,以最后一个元素是否被选取为状态进行DP。从线性递推的角度难以处理待修改的情况。 从分治的角度考虑,使用线段树…...

修改元组元素
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 场景模拟:伊米咖啡馆,由于麝香猫咖啡需求量较大,库存不足,店长想把它换成拿铁咖啡。 实例08 将麝香猫…...

【模版方法设计模式】
文章目录 模板方法设计模式模板方法的设计原则模板方法设计模式组成部分代码实现抽象类实现具体实现类执行 模板方法设计模式 模版方法设计模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...