【精选】JSP技术知识点大合集

JSP简介

在这里插入图片描述

JSP介绍

JSP(全称Java Server Pages)Java服务端页面技术,是JavaEE平台下的技术规范。它允许使用特定的标签在HTML网页中插入Java代码,实现动态页面处理,所以JSP就是HTML与Java代码的复合体。JSP技术可以快速的实现一个页面的开发,相比在Servlet中实现页面开发将变得更加容易。

常见的视图层技术

HTML、JSP、Thymeleaf等。

前后端分离开发方式

在前后端分离的项目中真正可以做到“术业有专攻”(开发人员分离) 。前后端分离开发方式中前端页面由专业团队完成页面的开发,并通过请求调用后端的api接口进行数据交互。在开发前端页面的团队中更多关注的技术如:html、CSS、jQuery、Vue、Nodejs等前端技术。前端追求的是:页面表现,速度流畅,兼容性,用户体验等等。而后端团队则更多的是业务的具体实现。在后端开发的团队中更多关注的技术如:==设计模式、分布式架构、微服务架构、数据库的操作、Java的性能优化以及数据库优化等技术。==前后端分离已成为互联网项目开发的业界标准使用方式,特别是为大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。

JSP运行原理

在这里插入图片描述

JSP技术特点

JSP和Servlet是本质相同的技术。当一个JSP文件第一次被请求时,JSP引擎会将该JSP编译成一个Servlet,并执行这个Servlet。如果JSP文件被修改了,那么JSP引擎会重新编译这个JSP。

JSP引擎对JSP编译时会生成两个文件分别是.java的源文件以及编译后的.class文件,并放到Tomcat的work目录的Catalina对应的虚拟主机目录中的org\apache\jsp目录中。两个文件的名称会使用JSP的名称加”_jsp”表示。如:index_jsp.java、index_jsp.class

JSP与Servlet区别

  • JSP以源文件形式部署到容器中。而Servlet需要编译成class文件后部署到容器中

  • JSP部署到web项目的根目录下或根目录下的其他子目录和静态同资源位于相同位置。而Servlet需要部署到WEB-INF/classes目录中。

  • JSP中的HTML代码会被JSP引擎放入到Servlet的out.write()方法中。而在Servlet中我们需要自己通过对字符流输出流的操作生成响应的页面。

  • JSP更擅长表现于页面显示,Servlet更擅长于逻辑控制。

JSP标签的使用

原始标签

JSP的三种原始标签

JSP的原始标签在JSP的任何版本中都可以使用。

<%! %> 声明标签

声明标签用于在JSP中定义成员变量方法的定义。标签中的内容会出现在JSP被编译后的Servlet的class的**{ }**中。

   //<%! %>声明标签
   <%!
   int a =10;
   int add(int a,int b){
     return a+b;
   }
   %>

<% %>脚本标签

脚本标签用于在JSP中编写业务逻辑。标签中的内容会出现在JSP被编译后的Servlet的_jspService方法体中。

   //脚本标签
   <%
   int b=10;
 	%>

<%= %>赋值标签

赋值标签用于在JSP中做内容输出。标签中的内容会出现在_jspService方法的out.print()方法的参数中。注意我们在使用赋值标签时不需要在代码中添加 ”;”。

  	//赋值标签
  	<%=a%>
  	<%=b%>
JSP原始标签的使用

需求:以20%概率显示你中奖了。

<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Title</title>
</head>
<body>
   <%
       int flag = new Random().nextInt(100);
       if(flag<=20){
   %>
   中奖了<%=flag%>
   <%}else {%>
   没中奖<%=flag%>
   <%}%>
</body>
</html>

JSP的指令标签

JSP指令标签的作用是声明JSP页面的一些属性和动作。

<%@指令名称 属性=“值” 属性=“值1,值2…”%>

JSP指令标签分类
Page指令标签

contentType

设置响应类型和编码。

pageEncoding

设置页面的编码。

import

导入所需要的包。

language

当前JSP页面里面可以嵌套的语言。

session

设置JSP页面是否获取session内置对象。

buffer

设置JSP页面的流的缓冲区的大小。

autoFlush

是否自动刷新。

exends

声明当前JSP的页面继承于那个类.必须继承的是httpservlet 及其子类。

isELIgnored

是否忽略el表达式。

errorPage

当前JSP页面出现异常的时候要跳转到的JSP页面。

isErrorPage

当前JSP页面是否是一个错误页面。若值为true,可以使用JSP页面的一个内置对象 exception。

Include指令标签

静态包含,可以将其他页面内容包含进来,一起进行编译运行.生成一个java文件.

<%@include file=“被包含JSP的相对路径” %>

Taglib指令标签

导入标签库。

<%@taglib prefix=“前缀名” uri=“名称空间” %>

JSP的内置对象

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception。

request对象

request 对象是 HttpServletRequest类型的对象。

response对象

response 对象是 HttpServletResponse类型的对象。

session对象

session 对象是HttpSession类型的对象。只有在包含 session=“true” 的页面中才可以被使用。

application对象

application 对象是ServletContext类型的对象。

config 对象

config 对象是ServletConfig类型的对象。

out 对象

out 对象是JspWriter类型的对象。

pageContext 对象

是JSP的上下文对象,pageContext 对象是PageContext类型的对象。作用是取得任何范围的参数,==通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。==pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

page 对象

page 对象代表JSP本身。

exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用。

请求转发

什么是请求转发

请求转发是服务端的一种请求方式,相当于在服务端中直接请求某个资源。

RequestDispatcher dispatcher = request.getRequestDispatcher("/test.jsp");

dispatcher.forward(request,response);

简写方式:

request.getRequestDispatcher("/test.jsp").forword(request,response);

请求转发与重定向的区别

  1. 请求转发对于客户端浏览器而言是在一次请求与响应中完成,而重定向是在两次请求两次响应中完成。
  2. 请求转发并不会改变客户端浏览器的地址栏中的内容。而重定向会改变客户端浏览器地址栏中的内容。
  3. 请求转发可以使用request对象传递数据,而重定向不能使用request对象传递数据。
  4. 如果是处理的DML操作,建议使用重定向方式为客户端浏览器产生响应,可以解决表单重复提交现象。

## JSP中的四大作用域对象

作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效。

| 对象名称    | 作用范围         |
| ----------- | ---------------- |
| application | 整个应用都有效   |
| session     | 在当前会话中有效 |
| request     | 在当前请求中有效 |
| page        | 在当前页面有效   |

## JSTL标签库

### 什么是JSTL标签库

JSTL(Java server pages standard tag library,即JSP标准标签库)JSTL标签是基于JSP页面的。这些标签可以插入在JSP代码中,本质上JSTL也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL的目标是使JSP页面的可读性更强、简化JSP页面的设计、实现了代码复用、提高效率。

在JSP2.0版本后开始支持JSTL标签库。在使用JSTL标签库时需要在JSP中添加对应的taglib指令标签。

```jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSTL标签分类

根据JSTL标签所提供的功能,可以将其分为5个类别。

核心标签

最常用、最重要,也是最基本的标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
XML标签

JSTL XML标签库提供了创建和操作XML文档的标签。

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

EL表达式

什么是EL表达式

EL(Expression Language)是一种表达式语言。是为了使JSP写起来更加简单,减少java代码,可以使得获取存储在Java对象中的数据变得非常简单。在JSP2.0版本后开始支持EL表达式。

语法结构

${表达式}

${对象.属性名}

EL表达式中的操作符

操作符描述
( )优先级
+
-减或负
*
/ 或div
% 或 mod取模
== 或 eq测试是否相等
!= 或 ne测试是否不等
< 或 lt测试是否小于
> 或gt测试是否大于
<= or le测试是否小于等于
>= 或 ge测试是否大于等于
&& 或 and测试逻辑与
|| 或 or测试逻辑或
! 或not测试取反
empty测试是否空值

EL表达式的隐含对象

隐含对象描述
pageScopepage 作用域
requestScoperequest 作用域
sessionScopesession 作用域
applicationScopeapplication 作用域
paramRequest 对象的参数,字符串
paramValuesRequest对象的参数,字符串集合
headerHTTP 信息头,字符串
headerValuesHTTP 信息头,字符串集合
initParam上下文初始化参数
cookieCookie值
pageContext当前页面的pageContext

使用EL表达式取出作用域中的值

${pageScope.name}

${requestScope.name}

${sessionScope.name}

${applicationScope.name}

获取作用域属性中的数据时,也可以只写属性名,EL表达式会按照pageScope、requestScope、sessionScope、applicationScope的顺序查找该属性的值。

${name}

JSTL标签库与EL表达式的使用

JSTL标签库的使用步骤

  1. 添加jstl.jar
  2. 在JSP页面中添加taglib指令标签。

JSTL核心标签的使用

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

< c : if >

标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
   <title>Title</title>
</head>
<body>
   <c:if test="${1==1}">
       Hello,JSTL
   </c:if>
</body>
</html>

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

< c:choose >标签与Java switch语句的功能一样,用于在众多选项中做出选择。

switch语句中有case,而< c:choose >标签中对应有< c:when >,switch语句中有default,而< c:choose >标签中有< c:otherwise >

如果有多个< c:when >条件都满足,则返回第一个< c:when >条件对应的内容,如果都不满足,则返回< c:otherwise >条件中的内容!

< c:forEach >

迭代器,用于迭代集合。

属性描述
items被迭代的集合
begin迭代器的起始因子
end迭代器的结束因子
step迭代因子的增长数
var代表当前迭代元素的变量名称
varStatus代表循环状态的变量名称
varStatus 属性
current当前这次迭代的(集合中的)项
index当前这次迭代从 0 开始的迭代索引
count当前这次迭代从 1 开始的迭代计数
first用来表明当前这轮迭代是否为第一次迭代的标志
last用来表明当前这轮迭代是否为最后一次迭代的标志
begin属性值
end属性值
step属性值
<c:forEach begin="0" end="9" step="2" varStatus="shuxin">
    forEach......${shuxin.count}  ${shuxin.first}  ${shuxin.last}  ${shuxin.index}<br/>
</c:forEach>

使用ForEach迭代List

需求:

创建Users对象,含有userid,username属性。

创建一个Servlet,在Servlet中创建多个Users对象并放到List集合中,在showUsers.jsp的页面中显示所有的Users对象的信息。

Users对象

public class Users {
    private Integer userid;
    private String username;

    public Users() {
    }

    public Users(Integer userid, String username) {
        this.userid = userid;
        this.username = username;
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

FindUsersServlet

@WebServlet("/findUser.do")
public class FindUsersServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建Users对象
        Users users1=new Users(1,"zhangsan");
        Users users2=new Users(2,"lisi");
        //实例化List容器
        List<Users> list = new ArrayList<>();
        list.add(users1);
        list.add(users2);

        //将list传入到Request对象中
        req.setAttribute("list",list);
        //通过请求转发的方式调用JSP渲染页面
        req.getRequestDispatcher("showUser.jsp").forward(req,resp);
    }
}

showUsers.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <table border="1" align="center">
        <tr>
            <th>用户ID</th>
            <th>用户名</th>
        </tr>
        <c:forEach items="${requestScope.list}" var="users">
            <tr>
                <td>${users.userid}</td>
                <td>${users.username}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

使用ForEach迭代Map

需求:

创建Users对象,含有userid,username属性。

创建一个Servlet,在Servlet中创建多个Users对象并放到Map集合中,在showUsers2.jsp的页面中显示所有的Users对象的信息。

FindUsersServlet2

@WebServlet("/findUsers2.do")
public class FindUsers2Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建Users对象
        Users users1=new Users(1,"zhangsan");
        Users users2=new Users(2,"lisi");
        //实例化Map容器
        Map<String,Users> map = new HashMap<>();
        map.put("users1",users1);
        map.put("users2",users2);

        //将Map传入到Request对象中
        req.setAttribute("map",map);
        //通过请求转发的方式调用JSP渲染页面
        req.getRequestDispatcher("showUser2.jsp").forward(req,resp);
    }
}

showUsers2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1" align="center">
  <tr>
    <th>Map的key</th>
    <th>用户ID</th>
    <th>用户名</th>
  </tr>
  <c:forEach items="${requestScope.map}" var="users">
    <tr>
      <td>${users.key}</td>
      <td>${users.value.userid}</td>
      <td>${users.value.username}</td>
    </tr>
  </c:forEach>
</table>
</body>
</html>

JSTL格式化标签的使用

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

对日期的格式化处理

<fmt:formatDate value="${data}" pattern="yyyy-MM-dd"/>

对数字格的式化处理

<fmt:formatNumber value="${balance}" type="currency"/>
@WebServlet("/format.do")
public class FormatServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("date",new Date());
        req.setAttribute("number",18613453.4868);
        req.getRequestDispatcher("format.jsp").forward(req,resp);
    }
}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  ${requestScope.date}
  <hr/>
  <fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd" />
  <hr/>
<fmt:formatNumber value="${requestScope.number}" type="currency"/>

</body>
</html>

MVC模式

什么是MVC模式

MVC模式:Model、View、Controller即模型、视图、控制器。是软件的一种架构模式(Architecture pattern)。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。

View(视图):用户的操作界面。如:html、jsp。

Model(模型):具体的业务模型与数据模型。如:service、dao、pojo。

Controller(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet。

MVC模式与应用程序分层的区别

MVC模式是一种软件的架构方式,而应用程序分层这是一种代码的组织方式。MVC模式与应用程序分层的目标都是一致的:为了解耦和、提高代码复用性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法编程题4

删除线性表中值在s与t之间的元素&#xff08;s<t&#xff09;&#xff0c;s和t不合理或者顺序表为空则显示出错信息并退出运行。 #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct…

2023年中国稀土精密加工分类、市场规模及发展趋势分析[图]

稀土精密加工行业是指通过精密加工技术对稀土材料进行加工、制造和加工成品的一种行业。稀土精密加工行业主要包括稀土材料的提取、分离、纯化、加工和制造等环节&#xff0c;其中加工和制造是该行业的核心环节。稀土材料是指具有特殊物理、化学和磁性等性质的一类元素&#xf…

2023年中国吞咽神经和肌肉电刺激仪市场发展趋势分析:产品需求持续增长[图]

吞咽神经和肌肉电刺激仪是通过输出特定的低频脉冲电流对吞咽及构音功能相关的神经和肌肉进行电刺激&#xff0c;改善吞咽、构音肌群的收缩运动功能&#xff0c;缓解神经元麻痹&#xff0c;促进吞咽反射弧的重建与恢复&#xff0c;进而提高患者的吞咽及语言能力。 吞咽神经和肌…

RocketMQ运维工具

生产环境的RocketMQ集群&#xff0c;需要持续运行并且要有较高的稳定性&#xff0c;运维是件重要但有时候很繁琐的事&#xff0c;本节介绍运维工具的相关内容。 1.开源版本运维工具功能介绍 第1章介绍过如何启动运维页面&#xff0c;运维页面打开后&#xff0c;从左至右有7个…

查询药物的药效和机制

PubChem (nih.gov) XL765: Uses, Interactions, Mechanism of Action | DrugBank Online 基础信息查询 如&#xff1a;Paclitaxel紫杉醇的查询 Pharmacodynamics Paclitaxel is a taxoid antineoplastic agent indicated as first-line and subsequent therapy for the trea…

2023年中国全自动烘干机产业链、产能及发展趋势分析[图]

全自动烘干机设备是工业化生产制造过程中不可缺少的一种机械设备设备&#xff0c;它广泛应用于工业化工原料加工中药材烘干、农副产品加工等&#xff0c;因此制造了多种干燥设备&#xff0c;目前有多层网带干燥机、热泵干燥机、微波干燥机和冷冻干燥机四种自动干燥机&#xff0…

2023年中国地产SaaS分类、产业链及市场规模分析[图]

SaaS是一种基于云计算技术&#xff0c;通过订阅的方式向互联网向客户提供访问权限以获取计算资源的一项软件即服务。地产SaaS则是SaaS的具体应用&#xff0c;提供了一个线上平台&#xff0c;用于协助房地产供应商与购房者、建筑承建商、材料供应商及房地产资产管理公司之间的协…

小红书为什么没人看,小红书爆款标题怎么写?

作为快节奏的社会&#xff0c;人们追求的是不仅仅是高价值更是高性价比&#xff0c;和吸引度。而标题类似于门面&#xff0c;吸引程度自然作为重中之重。今天我们和大家分享下小红书为什么没人看&#xff0c;小红书爆款标题怎么写&#xff1f; 以母婴类型为例子&#xff0c;母婴…

MR素数测试及 pycryptodome库下 已知MR伪素数以及强伪证 生成指定伪随机数生成器绕过素性检测

MR素数测试在密码学库中应用广泛&#xff0c;通常作为BSPW的一部分来进行素数测试&#xff0c;由于在其算法中&#xff0c;有随机数的使用&#xff08;选择一个随机的base&#xff09;&#xff0c;若一个MR伪素数 n n n&#xff0c;已知其在某一个强伪证 a a a&#xff08;随机…

数据仓库高级面试题

数仓高内聚低耦合是怎么做的 定义 高内聚&#xff1a;强调模块内部的相对独立性&#xff0c;要求模块内部的元素尽可能的完成一个功能&#xff0c;不混杂其他功能&#xff0c;从而使模块保持简洁&#xff0c;易于理解和管理。 低耦合&#xff1a;模块之间的耦合度要尽可能的…

Linux编辑器-gcc/g++使用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练使用gcc/g编译器 > 毒鸡汤&#xff1a;真正…

【Dynamic-datasource】Springboot多数据源整合

引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 整体pom文件&#xff1a; <?xml versi…

ruoyi-vue前后端分离版本验证码实现思路

序 时隔三个月&#xff0c;再次拿起我的键盘。 前言 ruoyi-vue是若依前后端分离版本的快速开发框架&#xff0c;适合用于项目开始搭建后台管理系统。本篇文章主要介绍其验证码实现的思路。 一、实现思路简介 1、后端会生成一个表达式&#xff0c;比如1 2 ? 3&#xff0…

Cannot find proj.db

原因 编译GDAL完成后&#xff0c;我打了个包(包括.so)移动到了另外同环境的机器上。 应用gdal ogr2ogr时候提示找不到proj.db 解决办法&#xff1a; 把proj的share拷贝到另外环境上。 #gdal新建othershare&#xff0c;proj的share复制过去 mkdir -p /usr/local/gdal-3.6.2…

bhosts 显示节点 “unreach“ 状态

4.1、bhosts简单使用 查看各节点情况&#xff0c;包括状态和正在运行的 Job 情况等 STATUS列展示节点状态 OK&#xff1a;可用——可接受新的作业的正常状态 unavail&#xff1a;不可用 可能原因&#xff1a;主机关闭&#xff0c;LIM和sbatchd不可达 unreach&#xff1a;无法连…

大学生如何免费认证,下载,安装MATLAB

下载 打开学校图书馆官网 选择版本后&#xff0c;点击下载 注册绑定个人认证 前提&#xff01;需要有学校邮箱【以edu.cn结尾的】 进入mathworks官网 注册账户 安装 下载完后&#xff0c;打开 选择&#xff1a;setup 安装程序 勾选&#xff1a;是&#xff1b;选择&#xf…

【Linux进阶之路】动静态库

文章目录 回顾一. 静态库1.代码传递的方式2.简易制作3.原理 二. 动态库1.简易制作2.基本原理 尾序 回顾 前面在gcc与g的使用中&#xff0c;我们简单的介绍了动态库与静态库的各自的优点与区别&#xff1a; 动态链接库&#xff0c;也就是所有的程序公用一份代码,虽然方便省空间&…

Node.js黑马时钟案例(本人详细介绍实现过程)

先上没有使用node.js之前的html部分代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}html,body {height: 100%;overflow: hidden;backgrou…

unity-模块卸载重新安装

unity-模块卸载重新安装 发现模块错误&#xff1f;发现不可以卸载重装&#xff1f;... 依据以下步骤试试&#xff1a; 1. 删除模块文件夹&#xff08;以安卓模块为例&#xff09; 2. 找见编辑器模块json 3. 找见所有安卓相关模块修改selected为false&#xff1a;"sel…

「Verilog学习笔记」边沿检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module edge_detect(input clk,input rst_n,input a,output reg rise,output reg down );reg a_tem ; always (posedge clk or negedge rst_n) beginif…