JSP

news2024/11/21 1:47:24

文章目录

  • JSP
    • 1. 快速入门
    • 2. page 指令
    • 3. 三种常用脚本
      • 声明脚本
      • 表达式脚本
      • 代码脚本
    • 4. 注释
    • 5. 内置对象
    • 6. 域对象
    • 7. 请求转发标签
    • 8. EL 表达式
      • 快速入门
      • EL运算操作
      • EL的11个隐含对象
      • 四个特定域变量
    • 9. JSTL
      • 快速入门
      • <c:set />
      • <c:if />
      • \<c:choose> \<c:when> \<c:otherwise>
      • <c:forEach />

JSP

JSP 全称是 Java Server Pages,Java 的服务器页面,JSP 这门技术的最大的特点在于,写 JSP 就像在写 HTML。

相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码,为用户提供动态数据。

相比 Servlet 而言,Servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产 生动态数据的同时,也很容易对数据进行排版。

1. 快速入门

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>hello, jsp</title>
    </head>
    <body>
        <h1>JSP, 计算器</h1>
        <%
        int i = 20;
        int j = 70;
        int res = i + j;
        out.println(i + " + " + j + " = " + res); 
        %>
    </body>
</html>

jsp 页面不能像 HTML 页面, 直接用浏览器运行。只能通过浏览器访问 Tomcat 来访问jsp 页面。

jsp 页面本质是一个 Servlet 程序, 其性能是和 java 关联的。

第 1 次访问 jsp 页面的时候。Tomcat 服务器会把 jsp 页面解析成为一个 java 源文件。并 且 对 它 进 行 编 译 成 为 .class 字 节 码 程 序 。

2. page 指令

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

1)language 表示 jsp 翻译后是什么语言文件, 只支持 java

2)contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值

3)pageEncoding 属性 表示当前 jsp 页面文件本身的字符集

4)import 属性 跟 java 源代码中一样。用于导包,导类

3. 三种常用脚本

声明脚本

声明脚本的格式是: <%! 声明 java 代码 %>

作用:定义 jsp 的需要属性、方法、静态代码块和内部类等

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>
<%!
    private String name = "tom";
    private int age = 19;
    private static String company;

    static{
        company = "csdn";
    }

    public String getName(){
        return name;
    }
%>
</body>
</html>

表达式脚本

表达式脚本的格式是:<%=表达式%>

表达式脚本的作用是:在 jsp 页面上输出数据

表达式脚本中的表达式不能以分号结束

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>
<%!
    private String name = "tom";
    private int age = 19;
    private static String company;

    static{
        company = "csdn";
    }

    public String getName(){
        return name;
    }
%>
name = <%=name%><br/>
age = <%=age%>
</body>
</html>

代码脚本

代码脚本的语法是:<% java 代码%>

代码脚本的作用是:可以在 jsp 页面中,编写我们需要的功能(使用 java )

可以由多个代码脚本块组合完成一个完整的 java 语句

代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据

public class Monster {
    private Integer id;
    private String name;
    private String skill;
    public Monster(Integer id, String name, String skill) {
        this.id = id;
        this.name = name;
        this.skill = skill;
    }
    public Integer getId() {
        return id;}
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
}
<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>
<%
    ArrayList<Monster> list = new ArrayList<>();
    list.add(new Monster(1, "牛魔王", "芭蕉扇"));
    list.add(new Monster(2, "蜘蛛精", "吐口水"));
%>
<table bgcolor="#f0f8ff" border="1px" width="500px">
    <tr>
        <td>id</td>
        <td>name</td>
        <td>skill</td>
    </tr>
    <%
        for (int i = 0; i < list.size(); i++) {
            Monster monster = list.get(i);
    %>
    <tr>
        <td><%=monster.getId()%>
        </td>
        <td><%=monster.getName()%>
        </td>
        <td><%=monster.getSkill()%>
        </td>
    </tr>
    <%
        }
    %>
</table>
</body>
</html>

4. 注释

<%--这是一行注释--%>

5. 内置对象

JSP 内置对象(已经创建好的对象, 可以直接使用),是指 Tomcat 在翻译 jsp 页面成为Servlet 后,内部提供的九大对象,叫内置对象

在JSP中,有9大内置对象可以在页面中直接使用,它们分别是:

1)request:代表客户端的请求,可以通过它获取请求参数、请求头信息等。

2)response:代表服务器对客户端的响应,可以通过它设置响应头、写入响应内容等。

3)pageContext:代表JSP页面的上下文,可以通过它获取其他内置对象、页面作用域中的属性等。

4)session:代表用户的会话,可以通过它在不同页面之间共享数据。

5)application:代表整个应用程序的上下文,可以通过它在不同用户之间共享数据。

6)out:代表输出流,可以通过它向客户端输出内容。

7)config:代表当前JSP页面的配置信息,可以通过它获取初始化参数等。

8)page:代表当前JSP页面本身,可以通过它调用页面的方法。

9)exception:代表在JSP页面中发生的异常,可以通过它获取异常信息。

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>hello, jsp</title>
    </head>
    <body>
        <%
        //jsp 中可以使用的内置对象:不用创建,直接使用
        out.println("out 对象..");
        
        String age = request.getParameter("age");
        
        //response.sendRedirect("http://www.baidu.com");
        
        session.setAttribute("name", "jack");
        
        //application 等价 servlet 的 servletContext
        application.setAttribute("company", "csdn");
        
        //本页面有效
        pageContext.setAttribute("num1", 900);
        
        //page
        out.println("page= " + page);
        
        //使用 config
        String pwd = config.getInitParameter("pwd");
        %>
    </body>
</html>

6. 域对象

在JSP中,有四大域对象,它们分别是:page、request、session和application域。这些域对象可以用来在不同作用域中存储和共享数据,以便在整个应用程序中传递数据。

1)page域对象:page域对象是指当前JSP页面的作用域,即当前页面有效。在page域中存储的数据只能在当前页面中访问,其他页面无法访问。可以使用pageContext对象的setAttribute()和getAttribute()方法来存储和获取数据。

2)request域对象:request域对象是指客户端发起的请求的作用域,即在同一个请求周期内有效。在request域中存储的数据可以在同一个请求中的不同页面中共享和访问。可以使用request对象的setAttribute()和getAttribute()方法来存储和获取数据。

3)session域对象:session域对象是指用户会话的作用域,即在用户会话期间有效。在session域中存储的数据可以在同一个用户的不同请求中共享和访问。可以使用session对象的setAttribute()和getAttribute()方法来存储和获取数据。

4)application域对象:application域对象是指整个应用程序的作用域,即在整个应用程序生命周期内有效。在application域中存储的数据可以在整个应用程序中共享和访问。可以使用application对象的setAttribute()和getAttribute()方法来存储和获取数据。

请添加图片描述

域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存储范围

存储范围(作用域范围) pageContext < request < session < application

7. 请求转发标签

在JSP中,可以使用请求转发标签 <jsp:forward> 来将请求转发到另一个资源,比如另一个JSP页面、Servlet等。请求转发是在服务器端完成的,客户端浏览器不知道请求被转发到了另一个资源。

index.jsp 页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>首页</title>
</head>
<body>
    <h1>这是首页</h1>
    <jsp:forward page="target.jsp"/>
</body>
</html>

target.jsp 页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>目标页面</title>
</head>
<body>
    <h1>这是目标页面</h1>
</body>
</html>

8. EL 表达式

EL 表达式全称:Expression Language,是表达式语言,主要用于代替 jsp 页面的表达式脚本<%=request.getAttribute(“xx”)%>

EL 表达式基本语法: ·${key1}

快速入门

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<%
    request.setAttribute("key", "value");
%>
key = ${key}
</body>
</html>

EL 表达式在输出 null 时,输出的是 “”

jsp 表达式脚本输出 null 的时,输出的是 “null” 字符串

获取对象信息:

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<%
    Monster monster = new Monster(1, "牛魔王", "芭蕉扇");
    pageContext.setAttribute("monster", monster);
%>
monster = ${monster}
id = ${monster.id}
name = ${monster.name}
skill = ${monster.skill}
</body>
</html>

EL运算操作

基本语法语法:${ 运算表达式 }

关系运算:

请添加图片描述

逻辑运算:

请添加图片描述

算术运算:

请添加图片描述

empty运算:empty 运算可以判断一个数据是否为空,如果为空,返回 true,否则返回 false

以下几种情况为空:

  • 值为 null
  • 值为空串的时
  • 值是 Object 类型数组,长度为零
  • list 集合,元素个数为零
  • map 集合,元素个数为零

三元运算:表达式 1?表达式 2: 表达式 3(与java相同)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<%
    request.setAttribute("k1", null);
    request.setAttribute("k2", "");
    request.setAttribute("k3", new Object[]{});
    request.setAttribute("k4", new ArrayList<String>());
    request.setAttribute("k5", new HashMap<String, Object>());
%>
k1 是否为空= ${empty k1}<br/>
k2 是否为空= ${empty k2}<br/>
k3 是否为空= ${empty k3}<br/>
k4 是否为空= ${empty k4}<br/>
k5 是否为空= ${empty k5}<br/>
<%
    request.setAttribute("score", 90);
%>
你的成绩为: ${score >= 60 ? "及格": "不及格"}
</body>
</html>

EL的11个隐含对象

请添加图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<h1>pageContext 对象的使用</h1>
<%--
//通过 request 对象来获取和 HTTP 协议相关的数据
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器 ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET 或 POST)
request.getRemoteHost() 获取客户端的 ip 地址
session.getId() 获取会话的唯一标识
--%>
<hr/>
协议: ${ pageContext.request.scheme }<br>
服务器 ip:${ pageContext.request.serverName }<br>
服务器端口:${ pageContext.request.serverPort }<br>
工程路径:${ pageContext.request.contextPath }<br>
请求方法:${ pageContext.request.method }<br>
客户端 ip 地址:${ pageContext.request.remoteHost }<br>
会话 id :${ pageContext.session.id }<br>
<h1>使用 jsp 表达式脚本获取如上信息</h1>
ip 地址: <%=request.getRemoteHost() %> <br>
<h1>使用 el 表达式形式获取信息</h1>
<%
    pageContext.setAttribute("req", request);
%>
ip 地址: ${req.remoteHost} <br>
获取请求方法: ${req.method} <br>
</body>
</html>

四个特定域变量

请添加图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<h1>EL 获取四个特定域中的属性</h1>
<%
    pageContext.setAttribute("key1", "pageContext_key1 的值");
    pageContext.setAttribute("key2", "pageContext_key2 的值");
    request.setAttribute("key1", "request_key1 的值");
    session.setAttribute("key1", "session_key1 的值");
    application.setAttribute("key1", "application_key1 的值");
%>
<hr/>
application 的 key1: ${applicationScope.key1 }<br/>
pageContext 的 key1: ${pageScope.key1 }<br/>
session 的 key1: ${sessionScope.key1 }<br/>
request 的 key1: ${requestScope.key1 }<br/>
</body>
</html>

9. JSTL

JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库

EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面变得更佳简洁

快速入门

相关依赖:

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<h1>JSTL 快速入门</h1>
<c:if test="${ 10 > 2 }">
    <h1>10 > 2 为真</h1>
</c:if>
</body>
</html>

<c:set />

<c:set> 标签用于在JSP中设置一个变量或属性的值。它可以用来创建新的变量、重写现有变量或者设置作用域范围内的变量。等价 域对象.setAttribute(key,value);

scope 属性设置保存到哪个域

  • page 表示 PageContext 域(默认值)
  • request 表示 Request 域
  • session 表示 Session 域
  • application 表示 ServletContext 域

var 属性设置 key 是什么,value 属性设置值

<c:set scope="request" var="username" value="lxg"/>

<c:if />

<c:if />用来做 if 判断

test 属性表示判断的条件(用 EL 表达式输出)

<c:if test="${ 10 > 2 }">
	<h1>10 > 2 为真</h1>
</c:if>

<c:choose> <c:when> <c:otherwise>

多路判断。跟 switch … case … default 非常接近

<% request.setAttribute("money", 1000); %>
<c:choose>
    <c:when test="${ requestScope.money > 20000 }">
        有钱人
    </c:when>
    <c:when test="${ requestScope.money > 10000 }">
        比较有钱
    </c:when>
    <c:when test="${ requestScope.money > 5000 }">
        没啥钱
    </c:when>
    <c:otherwise>吃了饭,没钱租房了</c:otherwise>
</c:choose>

<c:forEach />

c:forEach 标签 用来遍历输出, 主要有 4 种形式:

  • 普通遍历输出 i 到 j

  • 遍历数组

  • 遍历 Map

  • 遍历 List

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>hello, jsp</title>
</head>
<body>

<h1>c:forEach 标签</h1>
<hr/>
<h1>第 1 种遍历方式从 i 到 j</h1>
<c:forEach var="num" begin="1" end="10">
    ${num}
</c:forEach>
<hr/>

<h1>第 2 种遍历方式:遍历数组</h1>
<%
    request.setAttribute("sports", new String[]{"打篮球", "乒乓球"});
%>
<c:forEach var="element" items="${sports}">
    ${element}
</c:forEach>
<hr/>

<h1>第 3 种遍历方式:遍历 Map</h1>
<%
    Map<String, Object> map = new HashMap<>();
    map.put("key1", "北京");
    map.put("key2", "上海");
    map.put("key3", "天津");
    request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${requestScope.map}">
    Key: ${entry.key}, Value: ${entry.value}
</c:forEach>
<hr/>

<h1>第 4 种遍历方式:遍历 List</h1>
<%
    List<Monster> monsters = new ArrayList<>();
    monsters.add(new Monster(100, "小妖怪", "巡山的"));
    monsters.add(new Monster(200, "大妖怪", "做饭的"));
    monsters.add(new Monster(300, "老妖怪", "打扫位置的"));
    request.setAttribute("monsters", monsters);
%>
<c:forEach var="monster" items="${requestScope.monsters}">
    ID: ${monster.id}, Name: ${monster.name}, Skill: ${monster.skill}
</c:forEach>
</body>
</html>
</body>
</html>

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

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

相关文章

【微服务】------核心组件架构选型

1.微服务简介 微服务架构&#xff08;Microservice Architecture&#xff09;是一种架构概念&#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦&#xff0c;从而降低系统的耦合性&#xff0c;并提供更加灵活的服务支持。 2.微服务技术选型 区域内容…

爬虫学习第一天

爬虫-1 爬虫学习第一天1、什么是爬虫2、爬虫的工作原理3、爬虫核心4、爬虫的合法性5、爬虫框架6、爬虫的挑战7、难点8、反爬手段8.1、Robots协议8.2、检查 User-Agent8.3、ip限制8.4、SESSION访问限制8.5、验证码8.6、数据动态加载8.7、数据加密-使用加密算法 9、用python学习爬…

汽车疲劳测试试验平台技术要求(北重厂家)

汽车疲劳测试试验平台技术要求通常包括以下几个方面&#xff1a; 车辆加载能力&#xff1a;测试平台需要具备足够的承载能力&#xff0c;能够同时测试多种车型和不同重量的车辆。 动力系统&#xff1a;测试平台需要具备稳定可靠的动力系统&#xff0c;能够提供足够的力和速度来…

C++ 指针与数组

指针与数组名都是地址&#xff0c;可以混合使用访问数组元素。 用指针访问数组&#xff0c;计算数组元素之和。 总结 如图所示&#xff0c;获取数组起始地址的方法有两种&#xff0c; 其一为数组名&#xff0c; 其二为通过数组的首元素地址。指针变量p是通过数组名获得指向…

通用开发技能系列:SQL基础学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 通用开发技能系列 文章&#xff0c;主要对编程通用技能 SQL基础 进行学习 1.数据库简介 1.1.数据库中的一些名称 DataBase&#xff1a;数据库 程序员只负责怎么维护存取数据&#xff0c;不管数据库是什么 DBA…

Deep Unsupervised Learning using Nonequilibrium Thermodynamics

就直接从算法部分开始了&#xff1a; 2 算法 我们的目标是定义一个前向&#xff08;或者推理&#xff09;扩散过程&#xff0c;这个过程能够转换任意的复杂数据分部到一个简单、tractable、分布&#xff0c;并且学习有限时间扩散过程的反转 从而 定义我们的生成模型分布。我们…

“人性化设计”技术概要

本文是由《埃森哲技术愿景 2024&#xff1a;“人性化设计”技术将通过提高生产力和创造力来重塑行业并重新定义领导者》这个文章来翻译解读的。原文地址如下&#xff0c;大家可以自行下载&#xff1a; 下载地址 其实看到这篇文章的时候&#xff0c;联想到这些年机器人的市场发展…

使用 HTMX 和 Bun 进行全栈 Web 开发

将 HTMX 放在前端&#xff0c;Bun 放在后端&#xff0c;然后将它们与 Elysia 和 MongoDB 连接起来&#xff0c;形成快速便捷的技术栈&#xff0c;使开发 Web 应用程序变得轻而易举。 Bun 和 HTMX 是目前软件领域最有趣的两个事情。 Bun 是一个速度极快的一体化服务器端 JavaSc…

SpringBoot快速入门笔记(3)

文章目录 一、MybatisPlus1、ORM2、添加依赖3、全局配置4、Navicat5、UserController6、CRUD操作7、BaseMapper8、两个注解 二、多表查询1、模拟用户订单2、通过用户查相关订单3、UserMapperNew4、查询订单和所属用户5、OrderMapper6、OrderController 三、条件查询四、分页查询…

爬虫 新闻网站 并存储到CSV文件 以红网为例 V2.0 (控制台版)升级自定义查询关键词、时间段,详细注释

爬虫&#xff1a;红网网站&#xff0c; 获取指定关键词与指定时间范围内的新闻&#xff0c;并存储到CSV文件 V2.0&#xff08;控制台版&#xff09; 爬取目的&#xff1a;为了获取某一地区更全面的在红网已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 对比V1.0升级的…

瑞吉外卖实战学习--14、菜品上传

添加菜品接口 前言效果图1、菜品分类查询接口2、上传图片和下载图片3、创建接收数据的Dto4、创建提交的方法 前言 本项目gitee位置&#xff1a;gitee网址 本篇文章是学习了添加菜品的总结&#xff0c;其中包括菜品分类的接口&#xff0c;图片上传接口&#xff0c;数据整体上传…

【Spring篇】Spring IoC DI

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring系列】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 前言一、IoC二、…

语义分割——自动驾驶鱼眼数据集

一、重要性及意义 环境感知&#xff1a;语义分割技术能够精确识别道路、车辆、行人、障碍物、交通标志和信号等各种交通场景元素。这为自动驾驶系统提供了丰富的环境信息&#xff0c;有助于车辆准确理解周围环境的结构和动态变化。决策规划&#xff1a;基于语义分割的结果&…

AI Kimi:帮助教师做好试卷命题

原文&#xff1a;https://www.toutiao.com/article/7353661304307778083/?log_fromcfd0a50014034_1712243146922 最近&#xff0c;Kimichat工具很火。这款软件不仅仅是一个聊天和阅读工具&#xff0c;还是一个强大的教学辅助工具。作为一位教师&#xff0c;尝试使用Kimichat&…

【React】useState为何返回数组而非对象

useState的正确语法如下 const [count, setCount] useState(0)通过打印可以看到useState返回一个数组&#xff0c;那么为何不返回对象呢 涉及到数组与对象间解构方式的差异 数组的解构&#xff1a;根据索引 const [a,,b] [1,2,3] console.log(a) // 1 console.log(b) // 3…

蓝桥集训之垒骰子

蓝桥集训之垒骰子 核心思想&#xff1a;矩阵乘法 f[i]存顶面数值 构造a矩阵 使得*f[i] f[i-1]a 则f[i] f[1] * an 快速幂优化 #include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int N 6,m…

xilinx AXI CAN驱动开发

CAN收发方案有很多&#xff0c;常见的解决方案通过是采用CAN收发芯片&#xff0c;例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现&#xff0c;AXI CAN是其中一种&#xff1b; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…

Unity:2D SpriteShape

1.1 简介 Sprite Shape 可以很灵活的更改sprite的轮廓。比如&#xff1a; 它由两部分组成&#xff1a;Sprite Shape Profile、Sprite Shape Controller&#xff0c;需要导入2D Sprite Shape Package. 1.1.1 Sprite导入要求 Texture Type - ‘Sprite (2D and UI)’.Sprite Mo…

【动手学深度学习】深入浅出深度学习之RMSProp算法的设计与实现

目录 &#x1f31e;一、实验目的 &#x1f31e;二、实验准备 &#x1f31e;三、实验内容 &#x1f33c;1. 认识RMSProp算法 &#x1f33c;2. 在optimizer_compare_naive.py中加入RMSProp &#x1f33c;3. 在optimizer_compare_mnist.py中加入RMSProp &#x1f33c;4. 问…

C#/WPF Inno Setup打包程序

Inno Setup介绍 Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年&#xff0c;现在已经更新到Inno Setup 6了。Inno Setup是一个十分简单实用的打包小工具&#xff0c;可以按照我们自己的意愿设置功能&#xff0c;稳定性也很好。 官方网址&#xff1…