Skip to content

第三章 JSP(JavaServer Pages) v1.0 ​

JSP将Java代码嵌入到页面中,被编译为Servlet生成动态内容,将整个HTML响应发送给客户端浏览器展示

第一部分 JSP基本语法 ​

一、注释 ​

JSP 中可以使用4种注释:HTML 注释、带有 JSP 表达式的注释、隐藏注释、脚本程序(Scriptlet)中的注释

1.HTML 注释 ​

JSP文件中可以包含HTML标记,基本语法:<%-- 注释内容 --%>

2.带有 JSP 表达式的注释 ​

在 HTML 注释中还可以嵌入 JSP 表达式,表达式会自动执行且在结果中显示

基本语法:<!--HTML 注释内容<%=JSP 表达式%>-->

3.JSP隐藏注释 ​

JSP隐藏注释只在JSP文件中可见,在网页源文件中不可见

基本语法:<%-- 注释内容 --%>

4.脚本程序(Scriptlet)中的注释 ​

脚本程序中包含一段Java代码,故脚本程序中的注释与Java中的注释(单行注释、多行注释和文档注释)相同

二、脚本元素 ​

1.声明脚本 ​

JSP声明脚本中,只能声明变量和方法,不能进行方法的调用等其他操作

基本语法:<%! %>

2.小程序脚本 ​

主要用于方法的调用与页面逻辑操作,在其中也可以声明变量与方法

基本语法:<% %>

3.表达式脚本 ​

直接以表达式的值作为结果向页面输出

基本语法:<%= %>

html
<%for(Student s: students){%>
  <p>姓名:<%=s.getName()%></p>
  <p>年龄:<%=s.getAge()%></p>
  <p>班级:<%=s.getClass()%></p>
<%}%>

三、指令元素 ​

1.page ​

主要用于页面设置,基本语法:<%@page %>,有如下常用操作

  1. 导包:<%@ page import="引入包"%>
  2. 设置页面编码及语言:<%@ page contentType="text/html;charset=UTF-8" language="java"%>

2.include ​

用于引入其他页面,基本语法:<%@ include file="引入文件路径"%>

3.taglib ​

用于声明并导入标签库,基础语法:<%@ taglib uri="标签库地址" prefix="标签名称"%>

第二部分 JSP原理 ​

一、内置对象 ​

1.JSP九大内置对象 ​

2.依赖 ​

xml
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>

<dependency>  <!--需要引入该依赖-->
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.2</version>
  <scope>provided</scope>
</dependency>

二、作用域 ​

1.pageContext(页面上下文) ​

作用范围仅限于用户请求的当前页面。如果把变量放到pageContext里,就说明它的作用域page,它的有效范围只在当前jsp页面里。

2.request(请求对象) ​

request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。

3.session(会话对象) ​

有效范围是当前会话,即从用户打开浏览器开始,到用户关闭浏览器这中间的过程。session的生命周期是在服务器正常的情况下,在第一次调用request.getSession()方法时到程序调用HttpSession.invalidate()销毁该session时结束。当然你也可以在网页F12控制台删除session。主要是网站用户的信息。

4.applicationContext(应用上下文) ​

它的有效范围是整个应用,即整个web适用。ServletContext生命周期在服务器启动时创建,在服务器关闭时销毁。主要用于每个用户都可以访问的数据或多个客户端共享的数据

第三部分 表达式标签 ​

一、EL表达式 ​

1.EL概述 ​

EL是Expression Language的缩写,是JSTL为方便存取数据而定义的语言,在JSTL中使用

2.基本使用 ​

$EL语言的开始标志,{}为EL语言的代码,element为需要取出的对象名,attribute为属性

在所有作用域中查找:${element.attribute}(顺序:page->request->session->application)

在指定作用域范围查找:${xxxScope.element.attribute} //例:${requestScope.people.id}

3.EL隐式对象 ​

例:获取名为username的cookie值:{cookie.username.value}

4.EL运算符 ​

类似与Java,但不同的是EL算数运算符+不做字符串拼接,只进行算术运算(即使类型为String)

二、JSTL与核心(core)标签 ​

JSTL(JSP Standard Template Library,JSP 标准模板库)

1.使用JSTL配置 ​

使用JSTL需要导入相应模块并在JSP页面引入标签库,引入标签库语法如下:

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

2.一般标签 ​

html
<c:out value="${value}"></c:out>  <!--向页面输出属性value的值,类似<%=...%>-->
html
<!--给对应变量赋值,指定作用域-->
<c:set var="变量名" value="value" scope="page"></c:set>
<!--给对应变量的属性赋值-->
<c:set target="变量名" property="属性名" value="value"></c:set>
html
<c:remove var="变量名" scope="page"></c:remove>  <!-以移除指定作用域中的变量值-->

3.条件标签 ​

html
<c:if test="${测试条件}">显示内容</c:if>
html
<c:choose>
  <c:when test="${测试条件}">显示内容</c:when>
  <c:when test="${测试条件}">显示内容</c:when>
  <c:otherwise>显示内容</c:otherwise>
</c:choose>

4.循环标签 ​

html
<c:forEach var="p" items="${list}">
  <!--代码块--><!--p为循环变量,list为待遍历变量-->
</c:forEach>
html
<c:forTokens items="字符串" delims="分割符" var="p">
  <!--代码块--><!--将字符串以分隔符拆分并遍历,p为循环变量-->
</c:forTokens>

5.URL标签 ​

html
<c:import url="page.jsp"><!--引入另一个页面-->
  <c:param name="name" value="value"/>  <!--传递参数名为name的参数,值为value-->
</c:import>
html
<c:redirect url="page.jsp"><!--跳转另一个页面-->
  <c:param name="name" value="value"/>  <!--传递参数名为name的参数,值为value-->
</c:redirect>
html
<c:url value="url" var="myUrl">  <!--用于将URL格式化为一个字符串-->
  <c:param name="name" value="value"/>  <!--传递参数名为name的参数,值为value-->
</c:url>
<a href="/<c:out value="${myURL}"/>">生成链接文字</a>  <!--一般使用-->