JSP介绍

1 JSP是什么

​ JSP全名为Java Server Pages ,中文名 Java服务器页面,其本质是一个简化的Servlet设计,是由Sun Microsystems公司倡导,许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

​ JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。

*.html 静态页面(包含固定的页面内容)

*.jsp 动态页面(页面数据可以动态更新,支持嵌套java代码和html代码)

2. JSP出现原因

JSP出现的原因是为了解决传统的静态HTML页面无法满足动态内容需求的问题。在早期的Web开发中,使用CGI(Common Gateway Interface)等技术来实现动态网页生成,但这些技术存在性能问题和代码维护困难的挑战。

JSP的出现提供了一种更简单、更灵活的动态网页生成方式。它将Java代码嵌入HTML页面中,通过特殊的标签(如<%= %>)将Java代码与HTML页面的静态内容相结合。这使得开发人员可以利用Java的强大功能和丰富的类库来处理动态数据、业务逻辑和用户交互等方面的需求。

JSP的优势包括:

  1. 简单易学:JSP基于标准的HTML语法,并且可以直接嵌入Java代码,使得Web开发人员可以快速上手并进行开发。
  2. 高性能:与传统的CGI相比,JSP具有更好的性能,因为它在第一次访问时被编译成Java Servlet,并且可以被服务器缓存和重用。
  3. 可维护性:JSP的代码可以与Java代码进行分离,从而实现可维护性和复用性。开发人员可以将不同的逻辑和功能模块封装到Java类中,然后在JSP页面中调用这些类。
  4. 强大的Java生态系统:JSP可以直接访问和利用Java的丰富类库和框架,以满足各种复杂的业务需求。

3. jsp中嵌入Java代码

使用小脚本(<% Java代码 %>)

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

引入依赖

image-20230917184926662

index.jsp

<%@ page import="java.time.LocalDateTime" %>
<%@ page import="java.time.LocalDate" %>
<%@ page import="java.time.LocalTime" %>
<%--
  Created by IntelliJ IDEA.
  com.User: hjc
  Date: 2023/9/14 0014
  Time: 16:52:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%--小脚本--%>
  <%
    LocalDateTime ldt = LocalDateTime.now();
    out.print("<hr>");
    out.print(ldt);
  %>

  <hr>
  <%--脚本表达式--%>
  <%=LocalDate.now()%>

  <br>
  <%--脚本声明--%>
  <%!LocalTime localTime = LocalTime.now();%>

  <%=localTime%>
  </body>
</html>

image-20230917185829267

JSP中的注释

<!-- html注释内容,查看源代码时能看到 -->
<%-- jsp注释,控制台查看页面源代码时看不到 --%>

4. JSP的原理

第一次执行

  • index.jsp翻译为/work/…/index_jsp.java,也就是servlet类
  • 编译index_jsp.java为index_jsp.class文件
  • 执行类中的service()方法

第二次执行

  • 执行service()
  • 小脚本翻译成service中的一段代码,使用out.print打印变量到浏览器页面

image-20230917190641271

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 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

示例:

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页面提供初始化参数。

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" %>

(2) 在error.jsp页面中设置isErrorPage=“true” 的属性

(使用exception对象之前,需要先将当前页面设置成错误页面)

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

JSP作用域

image-20230917191208956

6. JSP的指令

jsp指令用来设置整个jsp页面相关的属性,如页面的编码方式和脚本语言

语法格式:

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

(1)Page指令

Page指令为容器提供当前页面的使用说明一个JSP页面可以包含多个page指令

Page指令的语法格式:

<%@ page attribute=“value” %>

image-20230917191755307

image-20230917191812757

(2) Include指令

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

Include指令的语法格式如下:

include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

(3)Taglib指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

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

7. JSP出现的状态码

image-20230917191916966

8. EL表达式

  1. 什么是Expression Language表达式语言

最初定义于JSTL1.0部分

在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的一部分

在JSP中使用EL表达式,可以简化对象和变量的访问是EL表达式

  1. EL表达式语法

EL(Expression Language)是一种在JSP、JavaServer Faces(JSF)和其他Java EE应用中用于简化Java表达式的语言。EL允许开发者在Java代码中使用简洁的语法来访问和操作对象属性、集合和常量。EL表达式语法主要包含以下几个部分:

1. 基本语法

EL表达式的基本语法是 ${expression},其中 expression 是一个可以被解析的表达式。

2. 访问属性

访问对象的属性可以使用点符号或方括号:

  • 使用点符号:person.name,适用于属性名是字符串的场景。
  • 使用方括号:person["name"],适用于属性名是变量或需要特殊字符的场景。

3. 访问集合元素

访问集合的元素可以使用索引或键:

  • 使用索引:list[0]list[index]
  • 使用键:map["key"]

4. 运算符

EL支持基本的算术运算符、比较运算符和逻辑运算符:

  • 算术运算符:+(加)、-(减)、*(乘)、/(除)、%(取模)。
  • 比较运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
  • 逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)。

5. 控制结构

EL表达式可以嵌套条件语句:

  • if 结构:<c:if test="${expression}">表达式代码</c:if>
  • for 循环:<c:forEach items="${collection}" var="item">循环代码</c:forEach>

6. 特殊函数

EL提供了一些内置函数来处理字符串、日期、数字等:

  • trim:去除字符串两端的空白。
  • lowerCase:将字符串转换为小写。
  • upperCase:将字符串转换为大写。
  • indexOf:查找字符串中某个子字符串的位置。
  • substring:获取字符串的一部分。
  • formatDate:格式化日期。

7. 示例

下面是一个简单的EL表达式示例:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL Example</title>
</head>
<body>
    <c:out value="${person.name}"/>
    <c:if test="${person.age > 18}">
        <p>这个人是成年人。</p>
    </c:if>
    <c:forEach items="${fruits}" var="fruit">
        <p>${fruit}</p>
    </c:forEach>
</body>
</html>

这个示例展示了如何使用EL访问对象属性、执行条件判断和遍历集合。

结论

EL提供了一种简洁的方式来处理Java EE应用中的数据访问和控制逻辑,简化了JSP和JSF的开发过程。通过上述语法和功能的了解,开发者可以更高效地编写和维护Java EE应用。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值