JAVA WEB篇3——JSP
1、JSP是什么
-
JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp
-
与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello Time</title>
</head>
<body>
现在的时间是:<%= new Date()%>
</body>
</html>
2、JSP与Servlet
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39HZhKDf-1626687359596)(C:\Users\yoya\AppData\Roaming\Typora\typora-user-images\image-20210719162503916.png)]
3、JSP模块概述
- 声明区
- 程序代码区
- 表达式
- 注释
- 指令和动作
- 内置对象
4、JSP声明区
可以定义全局变量、方法、类
<%!
int i;
public void setName(){… …}
%>
5、JSP程序代码区
可以定义局部变量以及放入任何的Java程序代码
<%
int j;
for (int k=0; k<10; k++) {
… …
}
%>
6、JSP表达式
可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的表达式
不需要以;结束,只有一行
<%=“hello world”%>
<%=i+1%>
7、JSP注释
格式:
<!--… …--> HTML文件的注释,浏览器可以查看到
<%--… …--%> JSP文件的注释,浏览器看不到
<%//… …%> Java语言中的单行注释,浏览器看不到
<%/*… …*/%> Java语言中的多行注释,浏览器看不到
注释的内容不会被执行
8、JSP指令
指令格式: <%@指令 属性=“属性值” 属性=“属性值” %>
8.1、page指令
page指令用于导包和设置一些页面属性
import 导入相应的包,惟一允许在同一文档中多次出现的属性
contentType 设置Content-Type响应报头,标明即将发送到浏览器的文档类型
pageEncoding 设置页面的编码
language 指定页面使用的语言
session 控制页面是否参与HTTP会话
errorPage 处理当前页面中抛出但未被捕获的任何异常
isErrorPage 当前页是否可以作为其他页面的错误处理页面
8.2、taglib指令
taglib指令用来扩展JSP程序的标签元素,引入其他功能的标签库文件
<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@taglib uri=“tagLibary” prefix=“prefix”%>
8.3、include指令
include指令用于引入另一个JSP程序或HTML文件
<%@include file=“被包含的文件地址%>
9、JSP动作
9.1、jsp:include
- include指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入再编译执行(静态包含)
- include动作在转换时期是不会被编译的,只有在客户端请求时期被执行到才会被动态的编译载入 (动态包含,推荐)
<jsp:include page=“URLSpec” flush=“true”/><jsp:include page=“URLSpec” flush=“true”> <jsp:param name=“key” value=“value”/></jsp:include>
9.2、jsp:forward
forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理,转发后可以用request来捕获参数
<jsp:forward page=“urlSpec” flush=“true”/><jsp:forward page=“urlSpec”><!-- 用于指定参数和其对应的值 --><jsp:param name=“key” value=“value”/></jsp:forward>
10、JSP内置对象
- 在JSP程序中有9个内置对象由容器为用户进行实例化,程序员可以不用定义就直接使用这些变量
- 在JSP转换成Servlet后,会自动追加这些变量的定义,使用内置对象可以简化JSP的开发
对象变量 | 对象类型 | 作用 |
---|---|---|
out | JSPWriter | 输出流 |
request | HttpServletRequest | 请求信息 |
response | HttpServletResponse | 响应信息 |
session | HttpSession | 会话 |
application | ServletContext | 全局的上下文对象 |
pageContext | PageContext | JSP页面上下文 |
page | Object | JSP页面本身 |
config | ServletConfig | Servlet配置对象 |
exception | Throwable | 捕获网页异常 |
10.1、out
out内置对象是一个缓冲的输出流,用来给客户端输出信息
方法声明 | 功能介绍 |
---|---|
void println(String x) | 向客户端输出各种类型数据 |
void newLine() | 输出一个换行符 |
void close() | 关闭输出流 |
int getBufferSize() | 返回缓冲区的大小 |
int getRemaining() | 返回缓冲区中未使用的字节数 |
void flush() | 输出缓冲区里的数据 |
void clearBuffer() | 清除缓冲区里的数据,同时把数据输出到客户端 |
void clear() | 清除缓冲区里的数据,但不把数据输出到客户端 |
10.2、request
request对象封装的是调用JSP页面的请求信息,它是HttpServletRequest接口的一个实例,该对象的属性值只在一个请求中保存。
方法声明 | 功能介绍 |
---|---|
String getMethod() | 返回客户端向服务器端传送数据的方式 |
String getParameter(String name) | 返回客户端向服务器端传送的参数值 |
String[] getParameterValues( String name) | 获得指定参数的所有值 |
String getRequestURI() | 获得请求地址 |
String getRemoteAddr() | 返回发送请求的客户端或最后一个代理的IP地址 |
int getRemotePort() | 返回发送请求的客户端或最后一个代理的端口号 |
String getServerName() | 获取服务器的名字 |
int getServerPort() | 获取服务器端的端口 |
void setAttribute(String name,Object o) | 在此请求中存储属性。属性在请求之间重置 |
Object getAttribute(String name) | 将指定属性的值作为对象返回,若不存在则返回空值 |
10.3、 response
response对象用于给客户端相应输出处理结果,它是HttpServletResponse接口的一个实例,经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码 URL
方法声明 | 功能介绍 |
---|---|
void addCookie(Cookie cookie) | 添加一个Cookie对象,用于在客户端保存特定的信息 |
void addHeader(String name, String value) | 添加HTTP头信息,该Header信息将发送到客户端 |
boolean containsHeader(String name) | 判断指定名字的HTTP文件头是否存在 |
void sendRedirect(String location) | 重定向JSP文件 |
void setContentType(String type) | 设置类型与编码方式 |
10.4、session
- session对象表示浏览器和服务器之间的一次会话,一次会话可以包含多次请求,在多次请求之间 可以借助session对象存储信息,它是HttpSession类型的一个实例
- 该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都 可以访问
方法声明 | 功能介绍 |
---|---|
void setAttribute(String name, Object value) | 使用指定的名称将对象绑定到此会话 |
Object getAttribute(String name) | 返回在此会话中用指定名称绑定的对象,如果没有对象在该 名称下绑定则返回空值 |
10.5、 application
application对象是一个web程序的全局变量,它是ServletContext类型的一个实例,在整个服务器上保存数据,所有用户共享
方法声明 | 功能介绍 |
---|---|
void setAttribute(String name, Object object) | 将对象绑定到此servlet上下文中的给定属性名 |
Object getAttribute(String name) | 返回给定名称的 |
10.6、pageContext
pageContext对象是PageContext类型的对象,可以使用这个对象来管理其他的隐含对象。 只在一个页面中保存数据。
方法声明 | 功能介绍 |
---|---|
void setAttribute(String name, Object value, int scope) | 使用适当的作用域设置指定的名称和值 |
Object getAttribute(String name, int scope) | 返回指定作用域中名称关联的对象,若找不到 则返回null |
ServletRequest getRequest() | 获取请求对象 |
ServletResponse getResponse() | 获取响应对象 |
HttpSession getSession() | 获取会话对象 |
ServletConfig getServletConfig() | 获取配置对象 |
JspWriter getOut() | 获取输出对象 |
Object getPage() | 获取页面对象 |
Exception getException() | 获取异常对象 |
10.7、exception
exception 对象是Throwable的实例,表示的是JSP的异常信息,如果要使用它,必须将对应页面page指令的isErrorPage属性设置成true。
单页处理
<%@page errorPage="error.jsp" %>
统一处理
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
11、EL表达式
EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据 并输出
11.1、访问内置对象的数据
<%=request.getAttribute(“ varName”)%>
用EL实现: ${ varName }
11.2、访问请求参数的数据
request.getParameter(name);
request.getParameterValues(name);
<!-- 获取指定参数的数值 -->
${param.name}
<!-- 获取指定参数中指定下标的数值 -->
${paramValues.hobby[0]}
11.3、访问Bean对象的属性
<%
request.setAttribute(“prop”,“age”);
%>
<!-- 相当于表达式中写一个变量 -->
${ user[prop] }
11.4、访问集合的属性
<!-- student为ArrayList类型的对象 -->
${student[0].name}
11.5、内置对象
类别 | 标识符 | 描述 |
---|---|---|
JSP | pageContext | PageContext处理当前页面 |
作用域 | pageScope | 同页面作用域属性名称和值有关的Map类 |
requestScope | 同请求作用域属性的名称和值有关的Map类 | |
sessionScope | 同会话作用域属性的名称和值有关的Map类 | |
applicationScope | 同应用程序作用域属性的名称和值有关的Map类 | |
请求参数 | param | 根据名称存储请求参数的值的Map类 |
paramValue | 把请求参数的所有值作为一个String数组来存储的Map类 | |
请求头 | header | 根据名称存储请求头主要值的Map类 |
headerValues | 把请求头的所有值作为一个String数组来存储的Map类 | |
Cookie | cookie | 根据名称存储请求附带的cookie的Map类 |
初始化参数 | initParam | 根据名称存储Web应用程序上下文初始化参数的Map类 |
11.6、运算符
算术运算符 | 说明 | 范例 | 运算结果 |
---|---|---|---|
+ | 加 | ${1+2} | 3 |
- | 减 | ${2-1} | 1 |
* | 乘 | ${2*3} | 6 |
/或div | 除 | 16 / 5 或 {16/5}或 16/5或{16div5} | 3.2 |
%或mod | 取余 | KaTeX parse error: Expected '}', got 'EOF' at end of input: {16%5}或{16mod5} | 1 |
11.7、关系运算符
算术运算符 | 说明 | 范例 | 运算结果 |
---|---|---|---|
==或eq | 等于 | 1 = = 2 或 {1==2}或 1==2或{1 eq 2} | false |
!= 或ne | 不等于 | 2 ! = 1 或 {2!=1}或 2!=1或{1 ne 2} | true |
< 或lt | 小于 | 2 < 3 或 {2<3}或 2<3或{2 lt 3 } | true |
>或 gt | 大于 | 16 > 5 或 {16>5}或 16>5或{16 gt 5} | true |
<=或le | 小于等于 | 16 < = 5 或 {16<=5}或 16<=5或{16 le 5} | false |
>=或ge | 大于等于 | 16 > = 5 或 {16>=5}或 16>=5或{16 ge 5} | true |
11.8、逻辑运算符
算术运算符 | 说明 | 范例 | 运算结果 |
---|---|---|---|
&& 或 and | 与运算 | KaTeX parse error: Expected '}', got '&' at position 6: {true&̲&true}或{true and true} | true |
||或or | 或运算 | t r u e ∥ ∥ f a l s e 或 {true\|\|false}或 true∥∥false或{true or false} | true |
! 或not | 非运算 | ! t r u e 或 {!true}或 !true或{not true } | false |
11.9、条件运算符
${条件表达式? 语句1 : 语句2}
11.10、验证运算符
${empty 表达式}
返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值
12、JSTL
JSTL( JSP Standard Tag Library ) 被称为JSP标准标签库,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度
jstl 官网:https://tomcat.apache.org/download-taglibs.cgi
jstl 百度云:https://pan.baidu.com/s/11wF535TSfyVuee0lirOXFw提取码:macj
12.1、输出标签
<c:out></c:out> 用来将指定内容输出的标签
12.2、设置标签
<c:set></c:set> 用来设置属性范围值的标签
12.3、删除标签
<c:remove></c:remove> 用来删除指定数据的标签
12.4、单条件判断标签
<c:if test =“EL条件表达式”>
满足条件执行
</c:if >
12.5、多条件判断标签
<c:choose >
<c:when test =“EL表达式”>
满足条件执行
</c:when>
…
<c:otherwise>
不满足上述when条件时执行
</c:otherwise>
</c:choose >
12.6、循环标签
<c:forEach var=“循环变量” items=“集合”>
…
</c:forEach>
12.7、自定义标签
待补