1.在JSP中还有一个就是EL表达式经常和JSTL标签联合使用
格式:${}
${user.name},${user["name"]}
上面的写法一样,但有2种情况除外
1)包含特殊字符
${user.first-name} 此时应该这样取值:${user["first-name"]}
2)通过变量动态取值
${user[param]}根据用户传入的param值来进行取值
EL变量的范围大小:
PageScope
el中的隐含对象
1)pageContext 唯一一个即是jsp的隐含对象,又是el的隐含对象。jsp页面的上下文
pageContext.servletContext
pageContext.session
pageContext.request
pageContext.response
2)param
3)paramValues
4)cookie
5)initParam
6)pageScope
7)requestScope
8)sessionScope
9)applicationScope
顺便提一下JSP中的九大内置对象:
1)out jsp中用于写到页面的输出流
2)page 表示当前页面
3)pageContext 当前页面的上下文
4)request jsp封装的请求信息
5)response jsp中封装的响应信息
6)session jsp中的会话Session
7)application 当前应用
8)config 配置信息
9)exception 异常信息
2.JSTL标签的四大分类及JSTL函数,注意JSTL标签库和JSTL函数在使用他们之前都应该先将他们引入进来
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
A.out> out>
out value="${person.name}"> out>
1).直接输出常量value=“常量”
2).输出变量,变量不存在时有一个默认值value=“${name}” default="error"
3).通过escapeXml="false",value="<标签>"设置输出转义字符后的值
B.set> set>
1)将一个day的变量存到scope中,
set value="today" var="day" scope="session"> set>或者
set var="age" scope="application">100 set>
2)存值到javabean中
"person" class="com.ecjtu.modles.person">
set target="${person}" property="name" value="李四"> set>
C.remove> remove>
remove掉某个变量,不能remove bean中的某个属性,var属性是必选的 scope属性是可选的
1)remove var="today" scope="session"> remove>
表示移除掉session中的变量名为today的变量
D.
catch var="error">
包含一些可能出错的标签,然后在外面就可以输出变量名为error的错误信息
catch>
E.var变量保存比较的结果true或false
if test="${score>=90}" var="resutl" scope="session">
out value="您的成绩为优秀"> out>
if>
F.choose,when,otherwise标签的用法:通常这三个标签放在一起使用,
1.choose作为when和otherwise标签的父标签来使用
2.choose和when标签一起组合使用
用法一:3个标签同时使用
<c:choose>
<c:when test="条件1">
业务逻辑1
<c:when test="条件2">
业务逻辑2
<c:otherwise>
其它的业务逻辑
c:choose>
用法二:两个标签同时使用
<c:choose>
<c:when test="条件1">
业务逻辑
c:choose>
循环控制标签 一般用来遍历集合:
var 设定变量名用于存储从集合中取出来的元素(必须无默认值)
items指定要遍历的集合(必须无默认值)
begin,end用于指定遍历的起始位置和结束位置(有默认值)
step指定循环的步长(有默认值)
varStatus有index,count,first,last几个状态,分别表示元素的索引,第几个元素,
是否是第一个和最后一个元素,描述begin和end子集中的元素的状态
用法一:全部遍历
<:forEach var="customer" items="customers">
操作var变量表示的值
forEach>
用法二:部分遍历
<:forEach var="customer" items="customers" begin="1" end="5">
操作var变量表示的值
forEach>
用法三:部分遍历中指定步长
<:forEach var="customer" items="customers" begin="1" end="5" step="3">
操作var变量表示的值
forEach>
用法四:部分遍历中指定步长并且输出元素的状态
<:forEach var="customer" items="customers" begin="1" end="5" varStatus="com">
操作var变量表示的值
"index属性:${com.index}">
forEach>
forTokens标签的用法:
用于浏览字符串,并根据指定的字符将字符串截取,他同样有forEach中begin,end,step,varStatus这几个属性
items指定被迭代的字符串
delims指定使用的分隔符
var指定用来存放遍历到的成员
forTokens items="038-3823-323" delims="-" var="num">
"${num}">
forTokens>
URL操作标签的用法:
import可以把其它的静态或动态文件包含到本JSP页面,导入网络上的绝对路径,可能会出现异常,一般放到cache标签中,也可以导入相对路径的文件,
属性:
url:被导入资源的URL路径
context:相同服务器下其他的web工程,必须以"/"开头
引入的是同一服务器下的其他web工程的页面,首先修改tomcat的发布路径,
再修改tomcat目录下的conf/context.xml文件中context标签中的属性:
crossContext="true"
var:以String类型存入被导入的文件的内容可以存到session或其他范围中
Scope:变量的JSP范围
charEncoding:被导入文件的编码格式
varReader:以Reader类型存储被包含文件内容????
redirect标签的用法,实现了请求的重定向,
属性:url:指定重定向的页面地址
context:用于导入其他web工程中的页面
<c:redirect url="">
<c:param name="username">zhangsanc:param>
<c:param name="password">123456c:param>
c:redirect>
url标签的用法:用于动态生成一个String类型的URL,可以同param> param>共同使用,也可以使用html的<a>a>标签实现超链接
属性:
value:表示url的路径
var:将url路径存储在var的变量中
scope:var变量的一个范围
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
日期的格式化:
"both" dateStyle="full" timeStyle="full" value="${currentTime}" />
type: 可以是time,date或both。控制是否只生成时间,只生成日期,或者时间日期都生成。
dateStyle: 可以是short, medium, long 或 full(default)。控制打印日期使用的具体格式。
timeStyle: 可以是short, medium, long 或 full(default)。控制打印时间使用的具体格式。
value: 这是一个java.util.Date 类型的值,用于生成日期和时间。
pattern:日期的格式:yyyy-MM-dd HH:mm:ss
数字的格式化:
value="0.1234" type="percent" pattern="#0.00%"/>
符号 意义
0 一个数位
# 一个数位,前导零和追尾零不显示
. 小数点分割位置
, 组分隔符的位置
- 负数前缀
% 用100乘,并显示百分号
其他任何符号 在输出字符串中包括指定符号
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
JSTL函数的使用:
contains:
out value="${fn:contains('你好,hello!','hello')}"> out>
其他函数的用法类似:
containsIgnoreCase:
endWith("1","2")判断2是否在1的结尾
startWith("1","2")判断2是否在1的开头
fn:escapteXml('设计模式 ');
fn:indexOf('1','2'):2在1中第几个出现的
length():
replace():
split():
subString();
toLowerCase():
toUpperCase():
trim():