JSP技术讲解

目录

1、JSP简介

2、JSP体验

3、JSP运行原理

4、JSP基本语法

5、JSP指令

6、JSP内置九大对象

7、JSP标签

8、JSP配置

9、JSP排错

10、总结


        在前面的Servlet学习中发现Servlet本质是一个java程序,因此Servlet更加擅长编写程序的业务逻辑,而如果要使用servlet输出一个页面(HTML+CSS+JavaScript)那么就是一个灾难。

        因此SUN公司在随后的技术上做了调整,Servlet技术主要负责项目的业务逻辑,如果开发者需要编写动态页面,那么SUN提供了JSP技术。

        多学一招:如何区分静态和动态页面?

页面

组成

源码形式

常见页面

静态页面

HTML、CSS、JavaScript

每次查看页面的源码保持不变

index.html

动态页面

HTML、高级语言(Java)

每次查看页面的源码保持可变

index.jsp

思考:http://www.test.cn/index.html  该链接对应的页面是动态还是静态?

        以上的链接不一定是静态页面,因为可以使用servlet进行静态的映射。

1、JSP简介

        JSP是SUN公司提供的一种用于快速编写动态页面的技术,全称是:Java Server Page。该技术其实比较简单,本质就是一个Servlet,只不过将Servlet技术做了改进使得程序员在开发页面的时候变得快速和简洁。

        Servlet即java中包含html的页面,因此编写html比较繁琐,但是编写java比较方便。

        JSP 即html中包含java,因此编写html比较方便,但是编写java比较繁琐。

2、JSP体验

体验程序:在页面中输出系统的当前时间?

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<html>

  <head>

    <title>this is first jsp page</title>

  </head>

  <body>

    Current Date : <%= new java.util.Date()%>

  </body>

</html>

        发现JSP在编写页面的时候确实简单。

3、JSP运行原理

        JSP的本质是Servlet,因此Tomcat在运行JSP页面的时候需要先将该访问的JSP页面进行翻译为为Servlet,翻译好之后还需要将该java程序进行编译,随后依照serlet的处理方式进行处理用户的请求。

        具体可以通过%tomcat_home% \work\Catalina\localhost该目录查看翻译和编译好的文件数据。

具体图如下

4、JSP基本语法

        JSP的基本语法我们主要以下面的几种模块去学习:

JSP模版             所有的HTML标签元素

JSP输出表达式      页面输出  out.write()

JSP脚本             基本的java程序

JSP声明              成员声明

JSP注释              程序的说明信息

4.1 JSP模版

        在JSP中编写HTML等静态网页技术的语言时和基础班的页面编写是一样的,因此在这里不需要过多的阐述。

4.2 输出表达式(重点)

        该表达式就是给页面进行输出数据。

语法:<%= 要输出的内容 %>

举例1:输出计算结果?

 1+2=<%= 1+2 %><br/>    //1+2=3

out=<%=out %>       //out=org.apache.jasper.runtime.JspWriterImpl@10f0625

        JSP页面如果修改了那么项目不需要重新部署,直接使用浏览器刷新页面即可。

        JSP的输出表达式会默认在翻译的时候被翻译到指定类的_jspService()方法中。

使用细节:

        JSP输出表达式不能加封号(;)。

4.3 JSP脚本(重点)

        脚本:不能独立运行需要寄生在宿主环境中的语言即为脚本语言。

        JSP中主要的是语言是HTML,偶尔会夹杂java语言,因此这里我们将java称之为JSP的脚本。

        语法:<% java代码 %>

举例1:输出系统时间?

<%

       java.util.Date date = new  java.util.Date();  //JSP脚本

    %>

    Current Date : <%=date %><br/>            //JSP输出表达式

举例2:循环输出 6个<h3>?

<%

      for(int i = 0 ; i < 6; i++ ){

    %>

         <h3>this is h3</h3>

    <%    

      }

    %>

举例3:输出1~6级标题?

<%

      for(int i = 1 ; i < 7; i++ ){

    %>

       <h<%=i %>>this is title</h<%=i %>>

    <%    

      }

    %>

举例4:out.print()和out.write()的区别?

<%

       String str1 = "hello";

       String str2 = null;

       int a1 = 97;

    %>

    out.write("hello"):<% out.write(str1); %><br/>     // hello

    out.write(null):<% out.write(str2); %><br/>      // 空白符

    out.write(97):<% out.write(a1); %><br/>           // a

    out.print("hello"):<% out.print(str1); %><br/> // hello

    out.print(null):<% out.print(str2); %><br/>       // null

    out.print(97):<% out.print(a1); %><br/>          // 97

        JSP在被tomcat翻译的时候,会默认将JSP脚本翻译到指定类的_jspService()中。

        如果开发者在JSP页面中使用JSP脚本定义了一个变量,那么该变量属于_jspService()的局部变量。

思考:是否可以使用JSP脚本进行定义方法?

解答:一定不可以,因为方法中不能再有方法的声明。

4.4 JSP声明

        Java中大家都学过变量的声明、方法的声明、类的声明。即定义。

        语法:<%! 要声明的成员%>

举例1:声明一个成员变量?

<%!

        int age = 10;

    %>

    age = <%= age %>

JSP声明默认被tomcat翻译到指定类的类非静态成员位置。因此可以直接使用JSP输出表达式直接访问。

举例2:声明一个方法?

<%!

       public char change(int a){

            return (char)a;

       }

    %>

    <%= change(97) %>                  // a

举例3:声明一个类?

<%!

      class Inner{

         public String name = "jack";

         public String showInfo(){

            return this.name;

         }

      }

     %>

    <%= new Inner().name %><br/>         // jack

    <%= new Inner().showInfo() %><br/>    //jack

举例4:重写JSP的生命周期方法?

    <%!

    static {

        System.out.println("static block.......");    // 类装载

    }

    public void jspInit() {

        System.out.println("initializing jsp.....");  // 初始化

    }

    public void jspDestroy() {

        System.out.println("destroying jsp.......");  // 服务器关闭

    }

    %>

    <% System.out.println("_jspService()......"); %>  // 响应用户请求

4.5 JSP注释

        JSP注释主要是给开发人员看的,方便他们阅读程序的业务逻辑。

        语法:<%-- 注释的了内容 --%>

 举例1:在页面中添加html和jsp注释?

<!-- 我是HTML注释 -->      //翻译demo1_jsp.java和浏览器查看源码都可见

  <h3>我的三级标题</h3>

  <%-- 我是JSP注释 --%>  // 翻译demo1_jsp.java和浏览器查看源码都不可见

  <%= "hello" %>

5、JSP指令

        JSP指令主要用于控制页面的属性,如页面的编码方式、页面的类型、页面的脚本等。在JSP技术中常见的有三大指令:page指令、include指令、taglib指令。

        如果要在JSP页面中使用指令,那么格式如下:

        <%@ 指令名 属性名1=”属性值” 属性名2=”属性值”….. %>

5.1 page指令(重点)

举例1:详解page指令的所有属性?

<%@page

  autoFlush="true"                          // 自动刷新缓冲区

  contentType="text/html; charset=utf-8" // 通知浏览器数据类型和编码

  buffer="8kb"                                   // 设置缓冲区大小

  errorPage="/error.jsp"                     // 指定当前页面的错误页面

  import="java.util.Date"                 // 导包语句,多个使用,号分隔

  info="我的页面"                                // 对页面的说明信息

  isELIgnored="false"                           // 是否忽略EL表达式,默认false

  isErrorPage="false"                           // 当前页面是否是错误页面

  isThreadSafe="true"                      // 是否是线程安全

  language="java"                                // JSP脚本是java语言

  pageEncoding="utf-8"                       // 输出数据的编码方式

  session="true"                             // 是否使用会话机制

  extends=""                 // 指定翻译好的servlet继承的父类。不要指定该属性                                                

%>

多学一招:如何修改JSP的编码方式?

        MyEclispe à Window à Preferences à 搜索JSP à UTF-8 à Apply

多学一招:如何处理JSP的异常?

        如果在JSP页面中需要处理异常,那么一般采用的是使用page指令指定错误的处理页面。

        一般的如:File file = new File(“D:\\jnb.txt”); 默认在翻译的时候被翻译到指定类的_jspservice()方法中,而该方法使用try{}catch(Throwable e){}默认进行了处理,处理方式输出异常栈消息到页面。

5.2 include指令

       该指令用于在当前页面中包含其他的页面。

举例1:在当前页面包含一个其他的JSP页面?

<%@include file="/included.jsp" %>            // file属性指定包含的文件

        以上的包含在翻译的时候Tomcat会将被包含的页面直接赋值进来形成一个翻译好的源文件,因此被包含页面中只要编写被包含的内容即可,无需再写其他的JSP模版元素(HTML)。

        我们将这种翻译为一个源文件的包含称之为静态包含。

5.3 taglib指令(重点)

        该指令主要用于引入JSTL标签库和自定义标签库。

        举例1:引入JSTL核心标签库并使用?

<%@taglib uri="http://java.sun.com/jsp/jstl/core" // 指定标签库URL

prefix="c" %>                                // 指定标签库的前缀

<c:out value="hello jstl"></c:out>

总结:

        JSP的三大指令中最常用的是page指令和taglib指令,而且这些指令都可以使用多次,而且可以出现在JSP页面中任意位置。

6、JSP内置九大对象

        在学习JSP的page指令的时候我们学习了一个属性isErrorPage用于指定当前页面是否是处理异常的页面,如果设置为true那么直接可以在该页面中使用exception获取异常的对象并输出异常信息。

打开error.jsp页面:

public void _jspService(HttpServletRequest request,

HttpServletResponse response) throws java.io.IOException, ServletException {

    PageContext pageContext = null;

    HttpSession session = null;

    Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

    if (exception != null) {

      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    }

    ServletContext application = null;

    ServletConfig config = null;

    JspWriter out = null;

    Object page = this;

    JspWriter _jspx_out = null;

    PageContext _jspx_page_context = null;

    .......

    下面的语句其实可以访问该方法中前面定义还的局部变量。

}

以下就是JSP中内置的九大隐含对象

JSP内置对象

JSP内置对象类型

Servlet中的对象

request

HttpServletRequest

HttpServletRequest

response

HttpServletResponse

HttpServletResponse

config

ServletConfig

ServletConfig

application

ServletContext

ServletContext

pageContext

PageContext

session

HttpSession

HttpSession

exception

Throwable

Throwable

out

JspWriter(print)

PrintWriter/OutputStream

page

Object

Object

        大家发现JSP的九大内置对象中其实有很多我们在Servlet技术中学过了,因此在学习JSP的内置九大对象的时候我们只是学习没有学过的两个对象即:out和pageContex对象。

6.1 out对象

<%

      out.write("out");  // JspWriter

      response.getWriter().write("response.getWriter()");

    %>

运行结果如下

   response.getWriter() out

发现问题先输出的会后显示?

改变代码如下

<%

      out.write("out");  // JspWriter

      out.flush();

      response.getWriter().write("response.getWriter()");

    %>

运行结果如下

out response.getWriter()

从以上程序可以发现输出的顺序是由缓冲区决定的。

举例1:使用JSP下载图片?

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%

        // 获取路径

        String path = this.getServletContext().getRealPath("/123.bmp");

        File file = new File(path);

        // 指定响应头

     response.setHeader("content-disposition","attachment;filename="+file.getName());

        // 输出图片

        InputStream in = new FileInputStream(file);

        ServletOutputStream res_out = response.getOutputStream();

        byte[] b = new byte[1024];

        int len = 0;

        while( (len=in.read(b)) != -1 ){

           // 输出数据

           res_out.write(b,0,len);

        }

        // 释放资源

        in.close();

%>

        一定要将该文件中的普通的文本换行和HTML标签全部删除。否则会运行异常。

6.2 pageContext对象(重点)

        该对象是PageContext类型,PageContext继承自JspContext可以帮助开发者提供一些上下文环境信息,即:获取其他的八大隐含对象。

举例1:使用pageContext获取其他JSP八大内置对象?

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"

  isErrorPage="true"

%>

<%

 out.write( ( pageContext.getRequest() == request ) + "<br/>" );      

 out.write( ( pageContext.getResponse() == response ) + "<br/>" );       

 out.write( ( pageContext.getServletConfig() == config ) + "<br/>" );      

 out.write( ( pageContext.getServletContext() == application )+"<br/>");      

 out.write( ( pageContext.getSession() == session ) + "<br/>" );      

 out.write( ( pageContext.getPage() == page ) + "<br/>" );

 out.write( ( pageContext.getOut() == out ) + "<br/>" );

 out.write( ( pageContext.getException() == exception ) + "<br/>" );

%>

运行结果如下:

true
true
true
true
true
true

true
true

JSP中九大内置对象均为单例模式。

多学一招:如果只是获取其他的内置对象,那么PageContext类有什么意义?

        只要在实际的开发环境中传递PageContext变量,那么接收该参数的类或方法就会具备给页面进行任意输出的功能。典型的应用在自定义标签技术中。

举例2:使用pageContext对象给指定的域中放置属性?

    // 给pageContext添加和获取属性(默认是page域)

pageContext.setAttribute("name","jack");

    String name = (String)pageContext.getAttribute("name");

    out.write(name+"<br/>");

    // 给request域对象添加和获取属性 pageContext.setAttribute("address","gz",PageContext.REQUEST_SCOPE);

    String address = (String)request.getAttribute("address");

    out.write(address+"<br/>");

    // 给session域对象添加和获取属性

    pageContext.setAttribute("age","30",PageContext.SESSION_SCOPE);

    String age = (String)session.getAttribute("age");

    out.write(age+"<br/>");

     // 给application域对象添加和获取属性

pageContext.setAttribute("phone","123349574935",

PageContext.APPLICATION_SCOPE);

    String phone =

(String)pageContext.getAttribute("phone",

PageContext.APPLICATION_SCOPE);

    out.write(phone+"<br/>");

    // 给page域对象添加和获取属性

    pageContext.setAttribute("gender","male",PageContext.PAGE_SCOPE);

    String gender = (String)pageContext.getAttribute("gender",PageContext.PAGE_SCOPE);

    out.write(gender+"<br/>");

举例3:按照域的大小逐级查找属性?(重点)

pageContext.setAttribute("email","jnb@test.cn",PageContext.SESSION_SCOPE);

// 从每一个域中获取指定属性如果找到直接返回

String  email = (String)pageContext.findAttribute("email");

    out.write(email+"<br/>");

以上代码在查找域的时候默认是以从小到大的域顺序进行查找的

        page - request - session - application

        page域中的数据只有当前页面可以访问。

        request域中的数据只能在同一请求中访问。

        session域中的数据只能在同一会话中访问。

        application域中的数据只能在同一网站中访问。

思考:pageContext.setAttribute("country","中国");该语句默认将属性添加给哪一个域?

解答:默认是page域,在当前页面使用该属性。

7、JSP标签

        为了使得美工人员可以快速的阅读和修改JSP页面,那么开发人员应该尽力避免页面中出现过多的JSP脚本代码。因此SUN开发了JSP标签用于简化脚本的输出。

JSP标签也称之为JSP动作。

7.1 JSP标签语法

        <jsp : 动作名 属性1= ‘属性值’ ></jsp : 动作名>

7.2 常见的JSP标签

<jsp:include>标签      à 包含指定的页面

<jsp:forward>标签      à 请求转发

<jsp:param>标签         à 在包含页面或请求转发的时候传递参数,不能单独使用。

举例1:使用JSP动作实现页面的包含?

  <body>

            下面是被包含页面

     <br/>

     <jsp:include page="/demo6.jsp" flush="true"></jsp:include>

     <br/>

            包含页面中的内容

  </body>

       该包含会将包含页面和被包含页面都翻译和编译为独立的文件,当用户请求服务器中的包含页面的时候,该页面会动态在包含的位置以流的方式将被包含页面翻译和编译好的响应结果返回给包含页面。因此该包含也称之为动态包含。

思考:动态包含和静态包含哪一个好用?

       动态包含称之为懒汉式的加载。所以运行效率稍低。

        静态包含称之为饿汉式的加载。所以运行效率稍高。

举例2:包含的时候给被包含页面传递参数?

包含页面

  <body>

            下面是被包含页面

     <br/>

     <jsp:include page="/demo6.jsp" flush="true">

        <jsp:param name="name" value="test"/>

     </jsp:include>

     <br/>

            包含页面中的内容

  </body>

被包含页面

<body>

           被包含页面中的内容是:<%= request.getParameter(("name")) %>    

</body>

举例3:使用转发标签进行页面的转发并带参数?

<jsp:forward page="/demo6.jsp">

      <jsp:param name="name" value="test"/>

</jsp:forward>

8、JSP配置

        JSP本质是一个Servlet,那么我们在Servlet中学习的一些配置对于JSP也同样适用。接下来我们就来学习JSP的一些相关配置。

8.1 配置Servlet参数

<servlet>

    <servlet-name>myjsp</servlet-name>

    <jsp-file>/config.jsp</jsp-file>

    <init-param>

       <param-name>ip</param-name>

       <param-value>192.168.10.1</param-value>

    </init-param>

  </servlet>

  <servlet-mapping>

    <servlet-name>myjsp</servlet-name>

    <url-pattern>/index.html</url-pattern>

  </servlet-mapping>

获取jsp配置的参数

<%

      String ip = config.getInitParameter("ip");

      out.write(ip);

    %>

8.2 配置自启动JSP

1.直接网站的web.xml中的jsp配置中天以下语句

   <load-on-startup>1</load-on-startup>

2.重写JSP的初始化方法

    <%!

    public void jspInit() {

        System.out.println("init jsp...");

    }

    %>

3.启动服务器,在控制台查看输出信息

9、JSP排错

        其实在编写JSP页面的时候一定或多或少会遇到问题,那么作为一个优秀的开发者,必须学会处理不同的错误的能力。

        JSP整个运行会分为三个阶段:翻译阶段、编译阶段、运行阶段。那么错误的发生也就可能发生在这三个阶段中的一个,因此下面我们分析不同阶段的异常信息。

翻译阶段:发生错误后不会出现翻译好的java源码。

  <body>

    <%--

  </body>

运行结果如下

org.apache.jasper.JasperException: /finderror.jsp(9,8) Unterminated &lt;%-- tag

    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)

    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)

    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132)

如果发生该异常,那么需要看异常栈的第一行异常信息。

编译阶段:发生错误,那么不会出现class文件。

  <body>

      <%= "hello %>

  </body>

运行结果如下

org.apache.jasper.JasperException: Unable to compile class for JSP: // 发生错误的整体描述

An error occurred at line: 9 in the jsp file: /finderror.jsp  // 错误发生的具体行号

String literal is not properly closed by a double-quote

6:   </head>

7:  

8:   <body>

9:       <%= "hello %>                        // 错误发生的具体代码

10:   </body>

11: </html>

运行阶段:发生错误,如何javase直接打印异常栈消息到页面。

  <body>

      <%=12/0 %>

  </body>

运行结果如下

org.apache.jasper.JasperException: An exception occurred processing JSP page /finderror.jsp at line 9

6:   </head>

7:  

8:   <body>

9:       <%=12/0 %>

10:   </body>

11: </html>

其实编程的时候难免遇到错误或异常,开发人员只需要冷静的分析错误信息即可。

10、总结

        主要讲解了JSP的基本语法、指令和动作。但是大家应该更多的学习好JSP的基本语法和page指令并了解相关的JSP配置和动作。

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

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

相关文章

BACnet到OPC UA的楼宇自动化系统与生产执行系统(MES)整合

在智能制造的浪潮下&#xff0c;一家位于深圳的精密电子制造企业面临着前所未有的挑战&#xff1a;如何高效地将楼宇自动化系统与生产执行系统&#xff08;MES&#xff09;整合&#xff0c;实现能源管理与生产流程的精细化控制。这家企业的楼宇控制系统使用的是BACnet协议&…

牛客NC97 字符串出现次数的TopK问题【中等 哈希+优先级队列 Java/Go】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee 核心 哈希&#xff0c;优先级队列Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返…

思维导图网页版哪个好?2024年值得推荐的8个在线思维导图软件!

思维导图如今已成为一种常用的工具&#xff0c;帮助我们清晰地组织和整理信息。随着科技的发展&#xff0c;思维导图的产品形态也经过多轮迭代&#xff0c;从最初的本地客户端过渡到基于云的 Web 端&#xff0c;各类网页版思维导图软件应运而生&#xff0c;它们方便快捷&#x…

【3dmax笔记】035: 车削修改器

一、车削修改器介绍 车削&#xff1a;图形通过绕轴旋转来创建三维效果。 开放的样条线&#xff0c;车削之后是面片。闭合的样条线&#xff0c;车削之后&#xff0c;是实体。 一、车削修改器实例 绘制高脚杯&#xff0c;首先在前视图绘制如下二维图形。 添加一个车削的修改器…

【Linux】shell基础,shell脚本

Shell Shell是一个用C语言编写的程序&#xff0c;接受用户输入的命令&#xff0c;并将其传递给操作系统内核执行。Shell还负责解释和执行命令、管理文件系统、控制进程&#xff0c;是用户使用Linux的桥梁。Shell既是一种命令语言&#xff0c;又是一种程序设计语言 Shell脚本 Sh…

HTML Audio标签src使用base64字符

源码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Audio src base64</title> </head> <body><audio controls><source src"data:audio/mp3;base64,//OIxAAAAAAAAAA…

2.小土堆——tensorboard使用

1.tensorboard是啥&#xff1f; TensorBoard 是一个用于可视化 TensorFlow 训练过程和模型的工具。它可以帮助你以图形和图表的形式查看训练过程中的指标&#xff0c;比如损失和准确率的变化。你可以使用 TensorBoard 来监视模型的性能&#xff0c;并且更直观地理解模型的工作原…

Classifier guidance与Classifier free diffusion的简单理解

参考&#xff1a;Classifier Guidance 和 Classifier Free Guidance&#xff0c;一堆公式不如两行代码 - 蓟梗的文章 - 知乎 https://zhuanlan.zhihu.com/p/660518657 Classifier Guidance和Classifier-free Guidance 总结 - 走遍山水路的文章 - 知乎 https://zhuanlan.zhihu.c…

【雅思写作】Vince9120雅思小作文笔记——P1 Intro(前言)

文章目录 链接P1 Intro&#xff08;前言&#xff09;字数限制题型综述&#xff08;problem types overview&#xff09;1. **柱状图&#xff08;Bar Chart&#xff09;** - 描述不同类别在某个或多个变量上的数据量比较。2. **线图&#xff08;Line Graph&#xff09;** - 展示…

Lib city笔记:TrajectoryDataset

1 AbstractDataset 抽象类&#xff0c;所有数据集的基类 2 TrajectoryDataset 2.1 __init__ 2.2 get_data 2.3 cutter_filter 2.3.1 按照时间间隔切割 2.3.2 按照同一天切割 2.3.3 按照固定窗口长度切割 cut完的轨迹样子 每一个key是一个轨迹的id&#xff0c;对应的value内容…

SQL查询语句(三)范围查找关键字

在上一篇文章中&#xff0c;我们介绍了SQL语句中&#xff0c;逻辑关键字的作用&#xff0c;并举例演示了如何用逻辑关键字来组合WHERE子句。在文章的末尾我们提到了两个用于范围查找的关键字IN和BETWEEN。这两个关键字都可以与NOT关键字灵活组合&#xff0c;起到对字句结果取反…

Crowd counting 系列NO.2—MCNN

声明&#xff1a;博客是用latex写的&#xff0c;所以直接用图片来展示吧&#xff0c;效果是一样的。下载资源网上都很容易搜到&#xff0c;如需下载资源&#xff0c;请留言。

Java内存是怎样分配的

Java内存是怎样分配的 一、 1. 有些编程语言编写的程序会直接向操作系统请求内存&#xff0c;而 Java 语言为保证其平台无关性&#xff0c;并不允许程序直接向操作系统发出请求&#xff0c;而是在准备执行程序时由Java虚拟机&#xff08;JVM&#xff09;向操作系统请求一定的…

基于SpringBoot+Vue点餐系统设计和实现(源码+LW+部署讲解)

&#x1f339;作者简介&#xff1a;✌全网粉丝10W&#xff0c;前大厂员工&#xff0c;多篇互联网电商推荐系统专利&#xff0c;现有多家创业公司&#xff0c;致力于建站、运营、SEO、网赚等赛道。也是csdn特邀作者、博客专家、Java领域优质创作者&#xff0c;博客之星、掘金/华…

VxTerm使用教程:连接SSH服务端设备,什么是SSH

一、什么是SSH&#xff1f; <摘自百度> 安全外壳协议 SSH&#xff0c;即安全外壳协议&#xff08;Secure Shell&#xff09;&#xff0c;是一种网络协议&#xff0c;用于在计算机网络上提供安全的远程登录和命令执行功能。 SSH通过加密通信通道来保护数据传输&#xff0c…

C++:类与对象—继承

类与对象—继承 一、继承是什么&#xff1f;二、继承定义三、基类和派生类对象赋值转换四、继承中的作用域五、派生类的默认成员函数六、继承与友元七、继承与静态成员八、复杂的菱形继承及菱形虚拟继承九、继承的总结和反思十、考察重点 一、继承是什么&#xff1f; 继承(inh…

每日OJ题_记忆化搜索①_力扣509. 斐波那契数(四种解法)

目录 记忆化搜索概念和使用场景 力扣509. 斐波那契数 解析代码1_循环 解析代码2_暴搜递归 解析代码3_记忆化搜索 解析代码4_动态规划 记忆化搜索概念和使用场景 记忆化搜索是一种典型的空间换时间的思想&#xff0c;可以看成带备忘录的爆搜递归。 搜索的低效在于没有能够…

YOLOv5改进(二)BiFPN替换Neck网络

前言 针对红绿灯轻量化检测&#xff0c;上一节使用MobileNetv3替换了主干网络&#xff0c;本篇将在使用BiFPN替换Neck的方式优化算法~ 往期回顾 YOLOv5改进&#xff08;一&#xff09;MobileNetv3替换主干网络 目录 一、BiFPN简介二、改进方法一第一步&#xff1a;在common.…

十分钟掌握Java集合之List接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

智慧电力,山海鲸引领

随着科技的不断进步和电力行业的快速发展&#xff0c;智能化管理已成为电力行业的重要趋势。在这一背景下&#xff0c;山海鲸智慧电力管理系统凭借其卓越的性能和创新的功能&#xff0c;为电力行业带来了革命性的改变。 山海鲸智慧电力管理系统是一套集数据采集、分析、展示于…
最新文章