JSP
基本语法
1、注释
java 风格://注释, 单行注释 /多行注释 /
显示注释:
隐式注释:<%–JSP注释–%>
2、Scripttlet
是JSP中最重要的脚本小程序,所有嵌入HTML中的Java程序都必须使用Scripttlet标记出来。代码会生成在编译后的Srevlet源码的类体中
1、<% %>:Java脚本段,可以定义局部变量、编写语句
2、<%! %>:声明,可以定义全局(成员)变量、方法、类
3、<%= %>:表达式、字面量、变量或具体内容
3、具体指令
1、page指令:
contentType属性:指定MIME(互联网)类型 <%@ page contentType=“text/html;charset=UTF-8”%>(text手误写成test会变成下载)
pageEncoding属性:指定编码格式<%@ page contentType=“text/html” pageEncoding=“UTF-8”
import属性:用来引入其他包<%@page import="java.util. ,java.io." %>
language:当前语言,目前只支持Java
isErrorPage:是否是处理错误的页面,默认是false;如果设置true表示当前页面是用来处理报错的,一般与errorPage一起使用
errorPage:报错时跳转的页面
JSP的编码取决于contentType属性中的charset的值,如果charset未设置,则使用pageEncoding的值,若两者都未设置,使用默认编码ISO-8859-1
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”
2、include静态包含
<%@ include file=“要包含的文件路径”%>相对路径将一个页面包含在另一个页面中
效率高了一点点,耦合性较高,不够灵活
静态包含就是对内容进行了直接的替换,
只会生成一个源文件
不能有同名变量
语法:<%@include file=“要包含的页面路径” %>
3、taglib导入标签库
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
include动态包含
语法:<jsp:include page=“要包含的页面或资源路径”></jsp:include>
相当于方法的调用,会生成两个源码文件,可以出现同名变量。降低耦合度低。
注:jsp:include双标签之间不能写任何内容,包括空格和换行。(除非有参数)
动态包含可以传递参数:
获取参数通过 request.getParameter(“name属性值”);
<jsp:param value=“参数值” name=“参数名”/>
value属性支持表达式
name属性不支持表达式
4、九个内置对象
request对象
代表了客户端的请求信息,作用域为一次请求
response对象
代表服务端的响应,只在JSP页面内有效
session对象
服务端为每个用户创建一个session,在一次对话中如何跳转都可以使用,但是新开浏览器无法使用
内部使用Map类来保存数据,格式为"key/value",value可以是复杂的对象类型
application对象
可将信息保存在服务器中一直有效,直到服务器关闭
out对象
页面输出
PageContext对象
取得任何范围的参数,
pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
config对象
config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。 当一个Servlet 初始化时,容器把某些信息通过 config
page对象
只在一个页面保存属性,跳转之后无效
exception
异常信息
EL表达式
语法:
k
e
y
k
e
y
代
表
的
是
存
在
域
对
象
中
的
键
e
l
表
达
式
一
般
操
作
的
是
域
对
象
或
字
面
量
,
不
能
操
作
变
量
。
取
值
范
围
:
从
小
范
围
开
始
找
,
找
到
即
止
,
如
果
都
未
找
到
,
返
回
空
字
符
串
。
p
a
g
e
、
r
e
q
u
e
s
t
、
s
e
s
s
i
o
n
、
a
p
p
l
i
c
a
t
i
o
n
如
果
想
要
获
取
指
定
域
范
围
中
的
值
,
使
用
p
a
g
e
S
c
o
p
e
、
r
e
q
u
e
s
t
S
c
o
p
e
、
s
e
s
s
i
o
n
S
c
o
p
e
、
a
p
p
l
i
c
a
t
o
n
S
c
o
p
e
注
:
获
取
J
a
v
a
B
e
a
n
中
的
属
性
时
,
属
性
需
要
提
供
g
e
t
方
法
E
L
表
达
式
取
值
获
取
指
定
名
称
的
域
对
象
:
{key} key代表的是存在域对象中的键 el表达式一般操作的是域对象或字面量,不能操作变量。 取值范围:从小范围开始找,找到即止,如果都未找到,返回空字符串。 page、request、session、application 如果想要获取指定域范围中的值,使用pageScope、requestScope、sessionScope、applicatonScope 注:获取JavaBean中的属性时,属性需要提供get方法 EL表达式取值 获取指定名称的域对象:
keykey代表的是存在域对象中的键el表达式一般操作的是域对象或字面量,不能操作变量。取值范围:从小范围开始找,找到即止,如果都未找到,返回空字符串。page、request、session、application如果想要获取指定域范围中的值,使用pageScope、requestScope、sessionScope、applicatonScope注:获取JavaBean中的属性时,属性需要提供get方法EL表达式取值获取指定名称的域对象:{uname }
获取session作用域的值:
s
e
s
s
i
o
n
S
c
o
p
e
.
u
n
a
m
e
获
取
J
a
v
a
B
e
a
n
对
象
:
{sessionScope.uname } 获取JavaBean对象:
sessionScope.uname获取JavaBean对象:{myUser }
获取JavaBean对象的属性:${myUser.userName } -----
m
y
U
s
e
r
.
g
e
t
U
s
e
r
N
a
m
e
(
)
获
取
普
通
变
量
名
(
取
不
到
)
:
{myUser.getUserName() } 获取普通变量名(取不到):
myUser.getUserName()获取普通变量名(取不到):{a }
获取字面量的值:
1
E
L
使
用
字
符
串
方
法
获
取
字
符
串
中
是
指
定
字
符
的
下
标
:
{1 } EL使用字符串方法 获取字符串中是指定字符的下标:
1EL使用字符串方法获取字符串中是指定字符的下标:{uname.indexOf(“a”) }
字符串截取:
u
n
a
m
e
.
s
u
b
s
t
r
i
n
g
(
0
,
2
)
E
L
表
达
式
判
断
为
空
判
断
空
字
符
串
:
{uname.substring(0,2) } EL表达式判断为空 判断空字符串:
uname.substring(0,2)EL表达式判断为空判断空字符串:{empty str1 }
判断null:
e
m
p
t
y
s
t
r
2
<
b
r
/
>
判
断
字
符
串
:
{empty str2 } <br/> 判断字符串:
emptystr2<br/>判断字符串:{empty str3 }
判断字符串:KaTeX parse error: Expected '}', got '&' at position 15: {str3 != null &̲& str3 != "" }…{!empty list1 }
判断集合为空:${empty list1 } – ${empty list2 } –
e
m
p
t
y
l
i
s
t
3
<
b
r
/
>
获
取
集
合
的
值
:
{empty list3 } <br/> 获取集合的值:
emptylist3<br/>获取集合的值:{list1[0] }
获取集合中对象的属性:
u
s
e
r
L
i
s
t
[
0
]
.
u
s
e
r
N
a
m
e
<
b
r
/
>
获
取
集
合
的
长
度
:
{userList[0].userName }<br/> 获取集合的长度:
userList[0].userName<br/>获取集合的长度:{userList.size() }
EL操作Map
判断map是否为空:
e
m
p
t
y
m
a
p
<
b
r
/
>
获
取
m
a
p
对
象
:
{empty map }<br/> 获取map对象:
emptymap<br/>获取map对象:{map }
获取map中指定的key对应的value:${map.uname } –
m
a
p
[
"
u
a
g
e
"
]
E
L
运
算
加
法
:
{map["uage"] } EL运算 加法:
map["uage"]EL运算加法:{num1 + num2 }
减法:
n
u
m
1
−
n
u
m
2
<
b
r
/
>
乘
法
:
{num1 - num2 }<br/> 乘法:
num1−num2<br/>乘法:{num1 * num2 }
除法:${num1 / num2 } –
n
u
m
1
d
i
v
n
u
m
2
<
b
r
/
>
大
小
比
较
:
{num1 div num2 }<br/> 大小比较:
num1divnum2<br/>大小比较:{num1 > num2 } – ${num1 >10 } —
(
n
u
m
1
+
n
u
m
2
)
<
=
10
<
b
r
/
>
等
值
比
较
:
{(num1+num2) <= 10 }<br/> 等值比较:
(num1+num2)<=10<br/>等值比较:{aa == ab } – ${aa eq ac }
${(num1+num2) > 10 && aa == ab }
${(num1+num2) > 10 || aa == ab }
JSTL
JSTL的使用
1、将jstl相关的jar包拷贝到项目的lib目录下jstl.jar和standard.jar
2、在页面引入想要使用的库
<%@taglib uri="要使用的库的路径" prefix="前缀名" %>
3、使用标签
<前缀名:标签名 属性名="属性值"></前缀名:标签名>
4、标签一般通过el表达式操作域对象
if标签
1、有主体内容
<c:if test="判断条件,返回true或false" var="限域变量名,用户接收判断条件的返回值" scope="限域变量名的域范围 page|request|session|application">
// 当满足条件时,执行的代码
</c:if
2、无主体内容
<c:if test="判断条件,返回true或false" var="限域变量名,用户接收判断条件的返回值" scope="限域变量名的域范围 page|request|session|application">
</c:if>
choose.when.otherwise标签
语法:
<c:choose>
<c:when test="返回boolean类型的判断条件">
// 满足条件执行的代码
</c:when>
...
<c:otherwise>
// 当所有的when不执行时执行的代码
</c:otherwise>
</c:choose>
1、choose标签与otherwise标签没有属性,when标签必须设置test属性
2、choose标签中只能包含when标签与otherwise标签,when标签与otherwise标签可以包含其它标签
报错信息: Illegal "c:if" after "c:otherwise" tag in "c:choose" tag.
3、choose标签中至少包含一个when标签,最多只有一个otherwise标签
报错信息:Illegal "choose" without child "when" tag
4、所有的when标签必须设置在otherwise标签之前
报错信息:Illegal "c:when" after "c:otherwise" tag in "c:choose" tag.
5、所有的when标签不执行的情况下才会执行otherwise标签
foreach标签
<c:forEach begin="开始循环的数" end="结束循环的数" var="当前成员的限域变量名" step="循环的间隔数"</c:forEach>
for (int i = 0; i < 10; i++)---<c:forEach begin="0" end="10" var="i" step="1">
${i }
</c:forEach>
<c:forEach items="${userList }" var="item" varStatus="itemp"> 当前下标:${itemp.index } -- 当前循环的次数:${itemp.count }--当前成员是否是第一次被循环:${itemp.first } -- 当前成员是否是最后一次被循环:${itemp.last }