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)中,使用pageContextsetAttribute()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页面中,作用范围的对象分别为pagerequestsessionapplication它们之间的关系如图所示。

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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE 字符串String及相关API StringBuilder StringJoiner 底层原理 详解

字符串和相关API java不会字符串即凉一半 学好字符串很重要 API 为应用程序编程接口 获得字符串对象 1.直接赋值 空参构造 string s1“abc”; s1 记录的是串池里的地址 2.用new的方式 string s2new string&#xff08;&#xff09;; new&#xff08;在堆内存里开辟空…

数据安全革命:Web3带来的隐私保护创新

随着数字化时代的发展&#xff0c;数据安全和隐私保护问题日益突出。传统的中心化数据存储和管理方式已经无法满足日益增长的数据安全需求&#xff0c;而Web3作为下一代互联网的新兴力量&#xff0c;正以其去中心化、加密安全的特性&#xff0c;引领着一场数据安全革命。本文将…

pyinstaller打包提示“文件所在的卷已被外部更改,因此打开的文件不再有效。”

环境 anaconda : 24.1.2python : 3.7.13pyinstaller : 5.13.0 问题描述 之前使用pyintaller执行spec文件打包都是能成功&#xff0c;今天打包报了“文件所在的卷已被外部更改&#xff0c;因此打开的文件不再有效。”的错误 Traceback (most recent call last):File "C…

想提升,应该学PMP还是NPDP?

NPDP&#xff08;新产品开发专业认证&#xff09;是由美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的国际认证&#xff0c;涵盖新产品开发的理论、方法和实践&#xff0c;为公司提供全方位的知识体系支持。通过考试获得NPDP认证证书&#xff0c;能够提升个人工作能…

粒子爱心特效||轻松实现浪漫效果||完整代码

关注微信公众号「ClassmateJie」有完整代码以及更多惊喜等待你的发现。 简介/效果展示 你是否曾经想过&#xff0c;在特殊的日子里给你的爱人一个惊喜&#xff1f;或者在朋友的生日派对上&#xff0c;给他们展示一个充满爱意的特效&#xff1f;今天&#xff0c;我要分享一个我…

VUE3-form表单保存附件与基本信息

element-ui代码 <el-dialog :title"上传附件" v-model"dialogAdds.visible" width"500px" append-to-body> <el-form-item label"唯一标识"> <dict-tag v-if"form.groupId" :options"unique_identifica…

性能怪兽!香橙派 Kunpeng Pro 开发板深度测评,带你解锁无限可能

性能怪兽&#xff01;香橙派 Kunpeng Pro 开发板深度测评&#xff0c;带你解锁无限可能 文章目录 性能怪兽&#xff01;香橙派 Kunpeng Pro 开发板深度测评&#xff0c;带你解锁无限可能一、背景二、香橙派 Kunpeng Pro 硬件规格概述三、使用准备与系统安装1️⃣、系统安装步骤…

【C++】浅论(cin和cout)的解锁、缓冲区的理解、CC++输入方法汇总和详解

一、cin,cout解锁 1.1&#xff1a;cin,cout解锁以及why 首先cin和cout是在c中为了提供类型安全和易用性设计的&#xff0c;它兼容了c语言的输入和输出&#xff0c;以上几点导致它在性能行&#xff08;读取和输出速度)远不如传统c语言的输入和输出。 在看到一些代码里面&…

Python 脚本化 Git 操作:简单、高效、无压力

前言 如何判定此次测试是否达标&#xff0c;代码覆盖率是衡量的标准之一。前段时间&#xff0c;利用fastapi框架重写了覆盖率统计服务&#xff0c;核心其实就是先获取全量代码覆盖率&#xff0c;然后通过diff操作统计增量代码覆盖率&#xff0c;当然要使用diff操作&#xff0c…

Java中Stack的使用详解

Stack是一种运算受限的线性表&#xff0c;其特点在于仅允许在表的一端&#xff08;即表尾&#xff09;进行插入和删除操作。这一端被称为栈顶&#xff0c;而相对的另一端则称为栈底。向一个栈插入新元素的操作称为进栈或入栈&#xff0c;它将新元素放到栈顶元素的上面&#xff…

从杂乱无章到井井有条——五款笔记软件,重塑工作与生活

记得刚入职场那会&#xff0c;我总是被各种繁杂的信息和任务搞得焦头烂额。会议记录、项目计划、灵感闪现……这些都需要我随时记录和整理。 然而&#xff0c;我的桌面总是堆满了便签纸和草稿本&#xff0c;手机相册里充斥着各种截图和备忘录&#xff0c;每次需要查找资料都像…

【数据结构】红黑树——领略天才的想法

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 目录 二叉搜索树 AVL树 红黑树概述 性质详解 效率对比 旋转操作 元素操作 代码实现 二叉搜索树 【数据结构】二叉搜索树-CSDN博客 AVL树 【数据结构】AVL树——平衡二叉搜索…

深度学习实战-yolox训练ExDark数据集(附全过程代码,超详细教程,无坑!)

跳转:数据集获取以及前期准备工作 本人在深度学习实战-yolov5训练ExDark数据集(附全过程代码,超详细教程,无坑!)的数据基础上实现yolox的训练,所以先跳转到该文章下去获取数据集,再继续接下来操作过程。 一、VOC格式数据集制作 1.前期工作 2.转变成voc格式 在datase…

Latex:newcommand

参考文献&#xff1a; latex中自定义的命令———\newcommand-CSDN博客LaTeX技巧924&#xff1a;详解newcommand的参数和默认值 - LaTeX工作室 (latexstudio.net) 文章目录 (re)newcommand自定义的一些命令 (re)newcommand ”定义命令“ 的定义&#xff1a; \newcommand{<…

[每周一更]-(第98期):PHP版本的升级历程

文章目录 大致历程PHP/FI (PHP 1.0)PHP 2.0PHP 3.0PHP 4.0PHP 5.0PHP 5.3 - 5.6PHP 7.0PHP 7.1 - 7.4PHP 8.0PHP 8.1 - 8.2 参考 PHP&#xff0c;即“超文本预处理器”&#xff08;Hypertext Preprocessor&#xff09;&#xff0c;是广泛应用于web开发的服务器端脚本语言。自19…

什么是独特摆动交易策略?fpmarkets1分钟讲清楚

摆动交易策略想必各位投资者都已经接触过了&#xff0c;但是什么是独特摆动交易策略&#xff1f;各位投资者知道吗&#xff1f;其实很简单&#xff0c;这是一种基于斐波纳契工具的独特摆动交易策略。下面fpmarkets1分钟讲清楚&#xff0c;趋势总会经历调整&#xff0c;而这些调…

【机器学习】Python中的决策树算法探索

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Python中的决策树算法探索引言1. 决策树基础理论1.1 算法概述1.2 构建过程 2. P…

数据集003:猫类识别-12种猫分类数据集 (含数据集下载链接)

数据集简介&#xff1a; 训练集共有2160张猫的图片, 分为12类. train_list.txt是其标注文件 测试集共有240张猫的图片. 不含标注信息. 训练集图像&#xff08;部分&#xff09; 验证集图像&#xff08;部分&#xff09; 标签 部分代码&#xff1a; # 定义训练数据集 class T…

eNSP华为模拟器-DHCP配置

拓扑图 要求 PC1通过DHCP获取192.168.1.1地址PC2和PC3通过DHCP接口地址池方式获取IP地址配置静态路由使其ping通 配置 配置主机名及接口IP地址 # AR1 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sys AR1 [AR1]int g0/0/0 [AR1-Gigabit…

去重复记录和排序——kettle开发09

一、去除重复记录 去除重复记录&#xff0c;就是将数据流中的数据进行字段比较&#xff0c;从而去掉重复值的过程。去除重复记录的前提是需要将数据流中的数据进行排序&#xff0c;然后再进行去重操作。 去除重复记录的逻辑是&#xff0c;如下图&#xff0c;我们将需要比较的…