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为什么会出现
1.servlet
展示信息的不⽅便,引⼊了
JSP
。
2.JSP
本质上也是⼀个
servlet
3.JSP
就是在
HTML
⻚⾯中嵌⼊了
java
代码。
3.JSP中如何嵌套java代码
声明标签
<%!
变量或者⽅法声明
%>
表达式标签
<%=
表达式
%>
在⻚⾯上显示的效果
程序代码标签
<%java
代码
%>
⻚⾯上动态展示内容
4. JSP的原理
当浏览器访问
http://localhost:8080/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
代码
5. JSP的内置对象
JSP
中⼀共预先定义了
9
个这样的对象,分别为:
request
、
response
、
session
、
application
、
out
、
pagecontext
、
config
、
page
、
exception
1
、
request
对象
<!-- html
注释内容
,
查看源码时能看到
-->
<%-- jsp
注释
,
查看⻚⾯源码时看不到
--%>
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>");
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
属性
:
(2)
在
error.jsp
⻚⾯中设置
isErrorPage="true"
的属性
(
使⽤
exception
对象之前,需要先将当前⻚⾯设置成错误⻚⾯)
jsp
的作⽤域
:
pageContext -> request -> session -> application
当前⻚⾯
单次请求有效
当前会话期间
服务器运⾏期间有效
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}
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=”
功能范围的路径
”%>
功能范围 | URL | 前缀 |
---|---|---|
core |
http://java.sun.com/jsp/jstl/core
| c |
i18n |
http://java.sun.com/jsp/jstl/fmt
| fmt |
sql |
http://java.sun.com/jsp/jstl/sql
| sql |
xml |
http://java.sun.com/jsp/jstl/xml
| x |
functions |
http://java.sun.com/jsp/jstl/function
| fn |
(3)
核⼼标签
①核⼼标签是最常⽤的
JSTL
标签。引⽤核⼼标签库的语法如下:
<%
@
taglib prefix
=
"c"
uri
=
"http://java.sun.com/jsp/jstl/core"
%>
② 核⼼标签的分类
表达式操作
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
作⽤:⽤于将指定字符串转化为⽇期类型
<fmt:parseDate value="${now }" pattern="yyyy-MM-dd" var="today"/>
Value
服务器获取的时间
Pattern:
转换的格式
Var:
⻚⾯显示的变量
3
、
fmt:formatNumber
按照指定格式对数字进⾏格式化
属性
maxIntegerDigits
:整数部分最多的位数
minIntegerDigits
:整数部分最少的位数
maxFrctionDigits
:⼩数部分最多的位数
minFrctionDigits
:⼩数部分最少的位数
var
:存储格式化结果的变量
scope
:
var
属性的作⽤域
integerOnly
:是否只解析整型数
true
或者浮点数
false