• 《JSP》



    1.JSP

    JSP(JavaServer Pages)是一种在服务器端执行的Java技术,用于构建动态Web页面。它允许将Java代码嵌入HTML页面中,使开发人员能够更方便地创建和管理动态内容。

    *.html 静态页面(包含固定的页面内容)
    *.jsp 动态页面(页面数据可以动态更新,支持嵌套java代码和html代码)

    1. 动态页面生成:JSP页面可以包含HTML、XML、Java代码片段和JSP标签等内容。当JSP页面被访问时,服务器会动态地处理和执行其中的Java代码,并将生成的HTML响应返回给客户端浏览器。

    2. JSP标签(JSP Tag):JSP标签是一种特殊的指令或标记,用于在JSP页面中插入Java代码片段或调用自定义标签库(Tag Library)中的功能。常见的JSP标签包括核心标签库(JSTL)和自定义标签库(Custom Tag Library)等。

    3. JSP指令(JSP Directive):JSP指令用于指定特定的配置信息,如导入Java类、设定页面编码、设置缓冲区大小等。常见的JSP指令包括<%@ page %>和<%@ include %>等。

    4. EL表达式(Expression Language):EL表达式是一种简化和优化Java代码在JSP页面中的使用的方式,可以在JSP页面中直接引用和操作JavaBean属性、数组、集合和映射等数据结构。EL表达式的语法类似于${expression}。

    5. 隐式对象(Implicit Object):JSP容器会自动在JSP页面中创建一些隐式对象,这些对象可以被直接使用,无需进行额外的声明和初始化。常见的隐式对象包括request、response、session、application、out等。

    6. 生命周期:JSP页面经历了多个生命周期阶段,包括初始化、编译、执行和销毁等。在每个阶段,JSP容器会调用相应的方法来处理和执行。

    7. MVC模式:JSP通常与Servlet和JavaBean等其他组件结合使用,共同实现MVC(Model-View-Controller)模式。JSP作为视图(View)层,负责展示数据和与用户交互,通过Servlet作为控制器(Controller)来处理请求和业务逻辑,JavaBean作为模型(Model)来封装数据。

    2. JSP为什么会出现

    1.servlet展示信息的不方便,引入了JSP。
    2.JSP本质上也是一个servlet!!!!!!
    3.JSP就是在HTML页面中嵌入了java代码。

    3.如何使用jsp嵌套java代码

    1. 引入依赖

    在这里插入图片描述
    2. 格式

    <% java代码%>
    
    
    
    声明标签 <%!变量或者方法声明%>
    表达式标签 <%= 表达式%> 在页面上显示的效果
    程序代码标签 <%java代码%> 页面上动态展示内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    page指令:
    <%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>

    4. jsp的原理

    第一次执行

    • 翻译index.jsp翻译成/work/…/index_jsp.java,servlet
    • 编译index_jsp.java编译成class文件index_jsp.class
    • 执行service

    第二次执行

    • 执行service
    • 小脚本翻译成service中一段代码,使用out打印变量到页面
    • 脚本表达式,使用out输出一个变量
    • 脚本声明,声明一个实例方法,或者实例变量

    在这里插入图片描述

    当浏览器访问http://localhost:8080/day9_1/index.jsp。服务器发现后缀为.jsp,它会根据路径找到index.jsp文件,会将index.jsp翻译成index_jsp.java文件,对这个java文件进行编译,产生一个index_jsp.class文件,将class文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通 过流进行输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回 去就是把JSP中的HTML代码以流的方式写回浏览器。所以在JSP中展示出了HTML代码

    需要注意的是,JSP中的静态内容会直接被输出,而动态内容则需要在_jspService()方法中通过输出流(ServletResponse对象的getWriter()方法)进行输出。

    在JSP的工作原理中,对于JSP页面中的每个请求,都会创建一个Servlet实例来处理,因此JSP页面中的实例变量是线程安全的。同时,JSP页面也支持会话(session)对象、上下文(application)对象和其他的Servlet API。

    5.JSP的内置对象

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

    1、request对象
       request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
    2、response对象
       response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。所属类型:HttpServletResponse
    3、session对象
       session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。HttpSession
    4、application对象
    application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量” ServletContext
    区别:

    • request:单次请求
    • session:浏览器访问期间(会话期间)
    • application:服务器启动期间,所存的数据可以跨浏览器

    5、out 对象
       out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
      
       示例:

    out.print("<script type='text/javascript'>alert('用户名不存
    在');location.href='index.jsp'</script>");
    
    • 1
    • 2

    6、pageContext 对象
    pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、
    request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
    7、config 对象
      config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

    //将image路径转换成服务器端的路径
    String url= config.getServletContext().getRealPath("/image");
    <h1>url=<%=url %></h1>
    
    • 1
    • 2
    • 3

    8、page 对象
       page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
    9、exception 对象
      exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。
    (1)先在可能发生错误的页面中添加errorPage属性:

    <%@ page pageEncoding="utf-8"
    errorPage="error.jsp"
    contentType="text/html;charset=UTF-8" language="java" %>
    
    • 1
    • 2
    • 3

    (2) 在error.jsp页面中设置isErrorPage=“true” 的属性
    (使用exception对象之前,需要先将当前页面设置成错误页面)

    <%@ page language="java" isErrorPage="true" import="java.util.*"
    pageEncoding="UTF-8"%>
    
    • 1
    • 2

    jsp的作用域:
    pageContext -> request -> session -> application
    当前页面 单次请求有效 当前会话期间 服务器运行期间有效

    6.jsp的指令

    JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
    语法格式如下:

    <%@ directive attribute="value" %>
    directive:指令名称 attribute 属性名 value:属性值
    
    • 1
    • 2
    指令名称描述
    page定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
    include包含其他文件
    taglib引入标签库的定义

    1.Page指令

    Page指令为容器提供当前页面的使用说明一个JSP页面可以包含多个page指令
    Page指令的语法格式:
    <%@ page attribute=“value” %>

    属性名属性值描述
    languagejava解释该JSP文件时采用的语言,一般为java语言,默认为java
    extends任何类的全名编译该JSP文件时继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法
    import任何包名、类名引入该JSP中用到的类、包等,import是唯一可以声明多次的page指令属性,一个import可以引用uogelei,中间用英文逗号隔开<%@ page import=包名.类名,包名.类名%>
    sessiontrue、false该JSP内是否内置Session对象,如果为true,则内置Session对象,可直接使用,否则反之,默认为true
    autoFlushtrue,false是否运行缓存,如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存到缓存里,缓存满了或者程序行完毕或者执行out.flush()操作时才到客户端,默认为true。
    buffernone或者数字KB指定缓存大小,当autoFlush设为true时有效,例如<%@ pagebuffer=10kb%>
    isThreadSafetrue,false是否线程安全,如果为true,则运行多个线程同时运行该jsp程序,否则只运行一个线程,其余线程等待,默认为false
    isErrorPagetrue,false指定该页面是否为错误显示页面,如果为true,则该JSP内置有一个Exception对象exception,可直接使用,否则没有,默认为false
    errorPage某个JSP页面的相对路径指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面,errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常
    contentType有效的文档类型客户端浏览器根据该属性判断文档类型,例如 HTML格式为text/html、纯文本格式为text/plain、JPG图像为image/jpeg、GIF图像为image/gifWORD文档为application/msword,该属性常跟着charset设置编码一起,作用是通知服务器和浏览器都使用同一个码表
    pageEncodingUTF-8,ISO-8859-1等

    2. Include指令

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含
    的文件就好像是该JSP文件的一部分,会被同时编译执行。
    Include指令的语法格式如下:

    <%@ include file="文件相对 url 地址" %>
    
    • 1

    include 指令中的文件名实际上是一个相对的 URL 地址。
    如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

    3.Taglib指令

    JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
    Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

    <%@ taglib uri="uri" prefix="" %> 1
    
    • 1

    uri属性确定标签库的位置,prefix属性指定标签库的前缀(可自定义)。

    7.EL表达式

    1.什么Expression Language 表达式语言

    最初定义于JSTL1.0部分
    在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的一部分在JSP中使用EL表达式,可以简化对象和变量的访问是EL表达式

    2. EL表达式语法

    展示的信息需要先存到属性中才能拿到

    语法格式:${需要展示信息的名字}
    注意:
    当表达式没有指定变量或者对象的范围时,
    那么容器会依次从pageContext—>request—>session->application中查找该变量或对象,我们可以
    通过隐含对象获得指定作用域的值:
    pageScope对象,用于获取当前页面的属性值
    requestScope对象,用于获取请求范围的属性值
    sessionScope对象,用于获取会话范围的属性值
    applicationScope对象,用于获取程序范围的属性值
    语法:
    ${requestScope.key}

    3.EL中基础操作符

    在这里插入图片描述

    8.JSTL

    1.什么是JSTL

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
    JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
    根据JSTL标签所提供的功能,可以将其分为5个类别。核心标签 格式化标签 sql标签 xml标签 jstl函数
    (后面详细解释)

    2.JSTL的作用和语法格式

    作用:简化jsp页面编写代码
    语法格式:

    1. 下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。
    2. 在JSP页面中引入<%@ taglib prefix=”页面使用的名称” uri=”功能范围的路径”%>
    功能范围Uri前缀
    corehttp://java.sun.com/jsp/jstl/corec
    i18nhttp://java.sun.com/jsp/jstl/fmtfmt
    sqlhttp://java.sun.com/jsp/jstl/sqlsql
    xmlhttp://java.sun.com/jsp/jstl/xmlx
    functionshttp://java.sun.com/jsp/jstl/functionfn

    3.核心标签

    ①核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:

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

    ② 核心标签的分类
    表达式操作 out、set、remove、catch
    流程控制 if、choose、when、otherwise
    迭代操作 forEach、forTokens
    URL操作 import、param、url、redirect
    Set标签
    <c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中
    在这里插入图片描述
    <c:out>主要用来显示数据的内容
    在这里插入图片描述
    <c:remove> 主要负责移除变量
    在这里插入图片描述
    <c:if> 主要用于进行if判断,如果为true,则输出标签体中的内容
    在这里插入图片描述
    <c:choose>,<c:when>,<c:otherwise> 作用相当于if-else
    在这里插入图片描述
    <c:forEach> 循环控制,它可以将数组,集合(Collection)中的成员循序浏览一遍
    在这里插入图片描述

    4.格式化标签

    1. fmt:formatDate 作用:将日期类型格式化为指定模式的字符串
      属性
      value:将要被格式化的数据
      pattern:格式化的模式,与SimpleDateFormat的参数设置一样
      var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在页面
      scope:变量存放的域属性空间,默认page
      type:其取值为date、time、both,表示给出的value是日期、时间、还是两者都包含,默认是date

    2. fmt:parseDate 作用:用于将指定字符串转化为日期类型

      Value服务器获取的时间
      Pattern:转换的格式
      Var:页面显示的变量

    3. fmt:formatNumber 按照指定格式对数字进行格式化
      属性
      maxIntegerDigits:整数部分最多的位数
      minIntegerDigits:整数部分最少的位数
      maxFrctionDigits:小数部分最多的位数
      minFrctionDigits:小数部分最少的位数
      var:存储格式化结果的变量
      scope:var属性的作用域
      integerOnly:是否只解析整型数true或者浮点数false

  • 相关阅读:
    Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)
    求质数(埃氏筛法)代码
    报错TypeError: Got an unexpected keyword argument ‘keep_dims‘
    反转链表的升级版——链表内指定区间反转
    爬虫 — Scrapy 框架安装问题
    公共政策学知识点整理
    cartographer_optimization_problem_2d
    基于canvas实现的多功能画板
    数据库基本概念
    相交链表+判断环型链表+求环型链表的入口节点
  • 原文地址:https://blog.csdn.net/quzhiyuan9/article/details/132915188