JSP:入门学习
1.概念:
Java Server Pages:java服务器端页面
可以理解为一个特殊的页面,其中既可以定义html标签,又可以定义java代码
用于简化书写
2、jsp的原理
jsp本质上就是一个servlet
3、jsp的脚本(jsp定义的java代码)
(1)<% 代码 %> 定义的java代码,在service方法中,service方法中可以定义什么,该脚本中就可以定义什么
(2)<%! 代码 %> 定义的java代码,在jsp转换后的java类的成员位置
(3)<%= 代码 %> 定义的java代该脚本就可以码会输出到页面,输出语句中可以定义什么,该脚本就可以定义什么
4.jsp的指令
作用:用于配置jsp页面,导入资源文件
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2…%>
分类:
(1)page : 配置jsp页面的
(2)include:页面包含的,导入页面的资源
(3)taglib:导入资源
page指令的使用:
contentType:设置响应体的mime类型及字符集,设置当前jsp页面编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncodine=“utf-8”)
import:导包
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面,
iserrorPage:标识当前是否发生错误页面
true:是,可以使用内置对象exception
false:否,默认值,不可以使用内置对象exception
include指令
<%@include file=“top.jsp”%>
taglib指令
5.jsp注释
(1)html注释:
只能注释html代码片段
(2)jsp注释:<%-- --%> 可以注释所有
6、jsp的内置对象
在Jsp页面中不需要获取和创建,可以直接使用的对象
jsp一共有9个内置对象
pageContext、session、request、application为四个域对象
变量名 真实类型 作用
request:请求 HttpServletRequest 一次请求访问多个资源
session: HttpSession 一次会话的多个请求间
application: ServletContext 所有用户间共享数据
pageContext: PageContext 当前页面共享数据,还可以获取其他八个内置对象
response:响应 HttpServletResponse 响应对象
page: Object 当前页面的对象
config: ServletConfig servlet的配置对象
exception: Throwable 异常对象
out JspWriter 输出对象,可以把数据输出到页面上
out :可以数据输出到页面上,字符输出流,和response.getWriter()类似
response.getWriter()和out.getWriter()的区别:
在tomcat服务器真正给客户端做出响应之前,会先找到response缓冲区数据,再找out缓冲区数据
response.getWriter()数据输出永远在Out.writer之前
**7.mvc开发模式**
(1)jsp的演变历史
早期只有servlet,只能使用respons输出标签数据,非常麻烦
后来有了jsp,简化了servlet的开发,如果过度使用jsp,在jsp中写大量的java代码,又写html表,造成难于维护,难于分工协作
再后来,java的web开发,借鉴mvc的开发模式,使得程序设计更加合理性
(2)mvc详解
M:Model,模型 JavaBean
完成具体业务操作,如:查询数据库,封装对象
V:View,视图 Jsp
展示数据
C:Controller,控制器 Servlet
获取用户的输入
调用模型
将数据交给视图进展示
优缺点:
优点:
a.耦合性低,方便维护,可以利于分工协作
b.重用性高
缺点:
使得项目架构变得复杂,对开发人员要求高
8.EL表达式
(1)概念:Expression Language表达式语言
(2)作用:替换和 简化jsp页面中java代码的编写
(3)语法:${表达式}
(4)注意:jsp默认支持el表达式的
如果要忽略el表达式(不被解析),方法:
a.设置jsp中的page指令中,isELIgnored=“true”,忽略当前jsp页面中所有的el表达式
b.${ 表达式}:忽略当前这个el表达式
(5)使用:
a.运算
*运算符:
算术运算符: + - * /(div) %(mod)
比较运算符:> < >= <= == !=
逻辑运算符:&&(and) || (or) !(not)
空运算符:empty 用于判断字符串、集合、数组对象是否为null并且长度是否为0
${empty list}
b.获取值
el表达式只能从域对象中获取值
语法:
one: ${域名称.键名}:从指定域中获取指定的值
域名称:
pageScope -----> pageContext
requestScope -----> request
sessionScope -----> session
applicationScope -----> application
例如:在request域中存储name=张三
获取:${requestScope.name} ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190916145126598.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI2MDQ5OQ==,size_16,color_FFFFFF,t_70)
two :${键名}:表示依次从最小的域中查找是否有该键值对应的值,直到找到为止。(reqquest域<session域)
(6)获取对象、list集合、map集合
对象:
域
名
称
.
键
名
.
属
性
名
本
质
上
会
去
调
用
对
象
的
g
e
t
t
e
r
方
法
!
[
在
这
里
插
入
图
片
描
述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
20190916153739780.
p
n
g
?
x
−
o
s
s
−
p
r
o
c
e
s
s
=
i
m
a
g
e
/
w
a
t
e
r
m
a
r
k
,
t
y
p
e
Z
m
F
u
Z
3
p
o
Z
W
5
n
a
G
V
p
d
G
k
,
s
h
a
d
o
w
1
0
,
t
e
x
t
a
H
R
0
c
H
M
6
L
y
9
i
b
G
9
n
L
m
N
z
Z
G
4
u
b
m
V
0
L
3
d
l
a
X
h
p
b
l
80
N
D
I
2
M
D
Q
5
O
Q
=
=
,
s
i
z
e
1
6
,
c
o
l
o
r
F
F
F
F
F
F
,
t
7
0
)
!
[
在
这
里
插
入
图
片
描
述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
20190916153810835.
p
n
g
?
x
−
o
s
s
−
p
r
o
c
e
s
s
=
i
m
a
g
e
/
w
a
t
e
r
m
a
r
k
,
t
y
p
e
Z
m
F
u
Z
3
p
o
Z
W
5
n
a
G
V
p
d
G
k
,
s
h
a
d
o
w
1
0
,
t
e
x
t
a
H
R
0
c
H
M
6
L
y
9
i
b
G
9
n
L
m
N
z
Z
G
4
u
b
m
V
0
L
3
d
l
a
X
h
p
b
l
80
N
D
I
2
M
D
Q
5
O
Q
=
=
,
s
i
z
e
1
6
,
c
o
l
o
r
F
F
F
F
F
F
,
t
7
0
)
L
i
s
t
集
合
:
{域名称.键名.属性名} 本质上会去调用对象的getter方法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190916153739780.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI2MDQ5OQ==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190916153810835.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI2MDQ5OQ==,size_16,color_FFFFFF,t_70) List集合:
域名称.键名.属性名本质上会去调用对象的getter方法![在这里插入图片描述](https://img−blog.csdnimg.cn/20190916153739780.png?x−oss−process=image/watermark,typeZmFuZ3poZW5naGVpdGk,shadow10,textaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI2MDQ5OQ==,size16,colorFFFFFF,t70)![在这里插入图片描述](https://img−blog.csdnimg.cn/20190916153810835.png?x−oss−process=image/watermark,typeZmFuZ3poZW5naGVpdGk,shadow10,textaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI2MDQ5OQ==,size16,colorFFFFFF,t70)List集合:{域名称.键名[索引]}
Map集合: ${域名称.键名.key名称}
${域名称.键名[“key名称”]}
EL中的隐式对象
9.JSTL
(1)概念:JavaServer Pages Tag Library JSP标准标签库
是由Apache组织提供的开源的免费的Jsp标签
(2)作用:用于简化和替换Jsp页面上的Java代码
(3)使用步骤
a.导入jstl相关jar包
b.引入标签库:taglib指令 <%@taglib %>
c.使用标签
(4)常用的jstl标签
a.if 相当于Java代码的if语句
b.choose 相当于Java代码的switch语句
c.foreach 相当于java代码的for语句