第三章 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.表达式脚本
直接以表达式的值作为结果向页面输出
基本语法:<%= %>
<%for(Student s: students){%>
<p>姓名:<%=s.getName()%></p>
<p>年龄:<%=s.getAge()%></p>
<p>班级:<%=s.getClass()%></p>
<%}%>三、指令元素
1.page
主要用于页面设置,基本语法:<%@page %>,有如下常用操作
- 导包:
<%@ page import="引入包"%> - 设置页面编码及语言:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
2.include
用于引入其他页面,基本语法:<%@ include file="引入文件路径"%>
3.taglib
用于声明并导入标签库,基础语法:<%@ taglib uri="标签库地址" prefix="标签名称"%>
第二部分 JSP原理
一、内置对象
1.JSP九大内置对象
2.依赖
<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页面引入标签库,引入标签库语法如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>2.一般标签
<c:out value="${value}"></c:out> <!--向页面输出属性value的值,类似<%=...%>--><!--给对应变量赋值,指定作用域-->
<c:set var="变量名" value="value" scope="page"></c:set>
<!--给对应变量的属性赋值-->
<c:set target="变量名" property="属性名" value="value"></c:set><c:remove var="变量名" scope="page"></c:remove> <!-以移除指定作用域中的变量值-->3.条件标签
<c:if test="${测试条件}">显示内容</c:if><c:choose>
<c:when test="${测试条件}">显示内容</c:when>
<c:when test="${测试条件}">显示内容</c:when>
<c:otherwise>显示内容</c:otherwise>
</c:choose>4.循环标签
<c:forEach var="p" items="${list}">
<!--代码块--><!--p为循环变量,list为待遍历变量-->
</c:forEach><c:forTokens items="字符串" delims="分割符" var="p">
<!--代码块--><!--将字符串以分隔符拆分并遍历,p为循环变量-->
</c:forTokens>5.URL标签
<c:import url="page.jsp"><!--引入另一个页面-->
<c:param name="name" value="value"/> <!--传递参数名为name的参数,值为value-->
</c:import><c:redirect url="page.jsp"><!--跳转另一个页面-->
<c:param name="name" value="value"/> <!--传递参数名为name的参数,值为value-->
</c:redirect><c:url value="url" var="myUrl"> <!--用于将URL格式化为一个字符串-->
<c:param name="name" value="value"/> <!--传递参数名为name的参数,值为value-->
</c:url>
<a href="/<c:out value="${myURL}"/>">生成链接文字</a> <!--一般使用-->