JSP技术讲解

news2025/2/25 16:03:25

目录

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.coloradmin.cn/o/1654221.html

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

相关文章

Java特性之设计模式【代理模式】

一、代理模式 概述 在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式 在代理模式中&#xff0c;我们创建具有现有对象的对象&#xff0c;以便向外界提供功能接口 主要解决&#xff1a; 在直接访问…

Apple强大功能:在新款 iPad Pro 和 iPad Air 中释放 M4 芯片潜力

Apple 的最新强大功能&#xff1a;在新款 iPad Pro 和 iPad Air 中释放 M4 芯片的潜力 概述 Apple 推出配备强大 M4 芯片的最新 iPad Pro 和 iPad Air 型号&#xff0c;再次突破创新界限。新一代 iPad 有望彻底改变我们的工作、创造和娱乐方式。凭借无与伦比的处理能力、令人惊…

CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密&#xff08;如下图&#xff09;&#xff0c;苦苦思索其逆向运算&#xff0c;被硬控了很久&#xff0c;也没搜到什么资料来解释这个问题&#xff08;也许是太简单&#xff1f;&#xff1f;蒟蒻博主怀疑人生……&#xff09; 经过博主不…

【MATLAB源码-第205期】基于matlab的LDPC译码算法仿真,对比BF算法,最小和算法,对数BP和概率BP四种算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 LDPC 码简介 LDPC码是一种通过稀疏奇偶校验矩阵定义的线性分组码&#xff0c;1962年由Gallager首次提出。这种码具有高效的解码性能&#xff0c;尤其在接近香农极限的情况下&#xff0c;其性能表现尤为突出。LDPC码的核心特…

Logstash分析MySQL慢查询日志实践

删除匹配到的行&#xff0c;当前行信息不记录到message中

VMware Workstation 虚拟机学习 安装centos7.9

1打开VMware Workstation--文件--新建虚拟机 #选择对应的&#xff0c;本例选择最新的 2开始安装centos #网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITy…

Linux:进程通信(二)信号的保存

目录 一、信号的处理是否是立即处理的&#xff1f; 二、信号如何保存 1、阻塞、未决、递达 2、信号集 3、信号集操作函数 4、sigprocmask函数 5、sigpending 函数 上篇文章我们讲解了信号的产生&#xff1a;Linux&#xff1a;进程信号&#xff08;一&#xff09;信号的产…

【C语言】字符函数和字符串函数--超详解

前言&#xff1a; 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了 ⼀系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 1. 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#…

实战BACnet/IP标准通信网关在楼宇自动化中的应用

智慧楼宇建设实现不同设备间的互联互通是一项巨大挑战&#xff0c;尤其是在那些历史悠久的建筑中&#xff0c;新旧系统并存的情况尤为普遍。某大型商业综合体就面临着这样的困境&#xff1a;老旧的暖通空调系统采用Modbus RTU协议&#xff0c;而新部署的能源管理系统却要求BACn…

一文搞懂MySQL索引的数据结构

一、引言 在数据库管理系统中&#xff0c;索引是提高查询性能的关键所在。对于MySQL这类关系型数据库来说&#xff0c;索引更是其优化查询不可或缺的一部分。索引能够大大加快数据的检索速度&#xff0c;减少数据库的I/O操作&#xff0c;提高数据库的整体性能。本文将从索引的…

第2章.STM32开发C语言常用知识点

目录 0. 《STM32单片机自学教程》专栏总纲 2.1. STM32嵌入式开发C语言编程的不同 2.2. C语言常用知识点 2.2.1 位操作 2.2.2 define 宏定义 2.2.3 条件编译 2.2.3.1 #ifdef 2.2.3.2 #ifndef 2.2.3.3 #if !defined 2.2.4 extern 变量声明 2.2.5 typedef 类型别名 …

PPP点对点协议

概述 Point-to-Point Protocol&#xff0c;点到点协议&#xff0c;工作于数据链路层&#xff0c;在链路层上传输网络层协议前验证链路的对端&#xff0c;主要用于在全双工的同异步链路上进行点到点的数据传输。 PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接、…

Mysql:Before start of result set

解决方法&#xff1a;使用resultSet.getString&#xff08;&#xff09;之前一定要调用resultSet.next() ResultSet resultSet statement1.executeQuery();while (resultSet.next()){String username1 resultSet.getString("username");int id1 resultSet.getInt…

识货小程序逆向

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872&#xff0c;x30184483x…

java io模型

目录 BIO 模型模型一&#xff1a;单线程服务器模型二&#xff1a;多线程服务器 NIO 模型模型一&#xff1a;遍历轮训 select/poll模型二&#xff1a;基于事件响应机制的 epoll BIO BIO 模型 模型一&#xff1a;单线程服务器 执行过程&#xff1a;阻塞等待 connection&#xff…

JS-拖拽元素放大缩小

效果左右布局&#xff0c;拖拽后&#xff0c;宽度放大缩小 其实自己写也可以&#xff0c;不过还是发现了两个好用的js库&#xff0c;既然不需要自己写&#xff0c;当然是能偷懒就偷懒 1、resizerjs 官网地址&#xff1a;https://github.com/eknowles/resizerjs <!doctype …

SPSS多元线性回归

&#xff08;要满足&#xff09;模型的假设条件需要对数据进行怎样处理&#xff1f;&#xff1f; 为了使数据满足多元线性回归的条件&#xff0c;通常需要进行以下预处理步骤&#xff1a; 1. 数据清洗&#xff1a;处理缺失值、异常值和重复值&#xff0c;确保数据质量。 2. 特…

Linux基础之git与调试工具gdb

目录 一、git的简单介绍和使用方法 1.1 git的介绍 1.2 git的使用方法 1.2.1 三板斧之git add 1.2.2 三板斧之git commit 1.2.3 三板斧之git push 二、gdb的介绍和一些基本使用方法 2.1 背景介绍 2.2 基本的使用方法 一、git的简单介绍和使用方法 1.1 git的介绍 Git是一…

NSSCTF中的web

目录 [第五空间 2021]WebFTP [LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; [SWPUCTF 2021 新生赛]PseudoProtocols [LitCTF 2023]导弹迷踪 [NISACTF 2022]easyssrf [第五空间 2021]WebFTP 1.进入页面&#xff0c;发现是登录页面&#xff0c;想到 弱口令&…

JAVA学习笔记(第三周)

文章目录 继承概述使用场景继承的特点子类继承的内容成员变量访问特点成员方法访问特点方法的重写构造方法this super 多态多态的表现形式多态的前提成员变量和方法调用instanceof优势弊端 包包名的规则全类名final常量 权限修饰符代码块 继承 概述 继承就是子类继承父类的特征…