九、JSP
&JSTL
JSP
基本语法
概述:JSP是一种动态网页编程技术,可以书写Java代码
<%-- 书写Java代码--%>
<%Java代码%>
静态调用&动态调用
1、静态调用
<%@include file="文件名"%>
特点:
- 将内容直接替换掉
- 只会生成一个源码文件
- 不可以出现同名变量
2、动态调用
<JSP:include page="文件名"%></jsp:include>
特点:
- 相当于方法调用
- 会生成多个源文件
- 允许出现同名变量
- 提高执行效率,降低耦合度
注意:动态调用时如果没有参数,中间不可以有任何内容(空格也不行)。如果需要传递参数则需要使用标签
<jsp:param name="变量名" value="值"/>
可以看成是表单向后台提交参数,POST请求。
四大作用域
page
:在当前页面中有效request
:在一次请求中有效session
:在一次会话中有效application
:在整个服务器中有效
操作域变量的方法:
setAttribute(String name,Object value)
getAttribute(String name)
removeAttribute(String name)
四大作用域的对应对象:
/*
page pageContext
request request
seesion session
application application
*/
EL表达式
目的:是为了简化JSP的编写
基本格式:${expression}
注:EL表达式只适合于操作域变量,相当于
request.getAttribute(String expression)
特点:
- 只适合操作域变量,不可以操作其他变量
- 如果没有指出域范围,默认式寻找小范围域的变量
EL表达式的使用:
/*
基本域变量:${变量名}
List集合:
${集合名}:集合的地址
${集合名.size()}:集合的大小
${list[index]}:集合中的元素
Map集合:
${Map}:集合的地址
${Map.key}/${Map["key"]}:集合中的具体元素
JavaBean对象(实体类中必须含有设置器与访问器):
${JavaBean}:对象地址
${JavaBean.属性}/${JavaBean.get属性()}:获取对象的具体属性
*/
Empty
作用:用于判断域变量是否为空,为空则为true,不为空则为false
基本形式:${empty 域变量}
/*
对于不同的域变量的判断:
基本字符串变量:
null:true
空串:true
List集合:
null:true
空List:true
Map集合:
null:true
空Map:true
JavaBean:
null:true
空对象:true
*/
基本运算
等值比较:==/eq
基本运算:+-*/
比较运算:>、<、>=、<=
运用形式:${运算符+域变量}
JSTL
基本使用
JSTL
是JSP标准标签库,用于解决一些常见的问题,迭代之类的问题本文只讨论迭代标签和格式化数字日期集合。
前期准备:
导入两个Jar包jstl.jar
以及standard.jar
然后就是在文件中导入:
//格式化数字日期库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
//迭代操作标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
特别注意:高版本的Tomcat使用JSTL
时需要在其安装目录的lib中加入两个Jar包。taglibs-standard-spec-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
官网上下载:下载地址
迭代标签
if
标签
作用:用于做分支判断
属性:test指判断条件
基本形式:
<c:if test="${1==1}">
执行语句
</c:if>
在JSP
中不存在else
语句,所以要实现else
的效果必须要构造另一个if标签给予完全相反的条件,实例如下
<c:if test="${!(1==1)}">
执行语句
</c:if>
choose-when-otherwise
标签
相当于Java中的switch-case
语句,基本形式如下:
<c:choose>
<c:when test="${1==1}"></c:when>
<c:otherwise></c:otherwise>
</c:choose>
特点:
- 一个
choose
标签中只可以含有when,otherwise
标签 - 只有
when
标签含有属性test
- 在
choose
标签中必须含有至少一个when
标签 - 在
when,otherwise
标签中可以含有其他标签 otherwise
标签是在上面的条件都不满足的前提下才使用
迭代循环foreach
一般形式:
/*
<jsp:foreach
item:循环数
begin:开始位置
end:结束位置
var:限域变量用于接受循环值
scope:规定变量的范围
*/
迭代:
<!--相当于
for(int i=0;i<max;i++){
操作
}
-->
<c:forEach begin="1" end="10" var="item">
${item}
</c:forEach>
循环:
<!--
相当于:
for(String str:list){
System.out.print(str);
}
-->
<!--list为一个集合-->
<c:forEach items="list" var="lt">
${lt}
</c:forEach>
额外属性:varStatus
-
index
:循环元素的索引 -
count
:循环次数 -
first
:是否为第一次循环 -
last
:是否为最后一次循环<c:forEach items="list" var="lt" varStatus="status"> ${status.index} ${status.count} ${status.first} ${status.last} </c:forEach>
格式化标签
格式化标签分为
-
formatNumber
:格式化数字,货币,百分数<!-- 基本形式: <jsp:formatNumber value:格式化数据 type:格式化类型,number(数字),currency(货币),percent(百分比) var:限域变量接收格式化的值 scope:规定变量的范围 --> <fmt:formatNumber value="10" type="number" var="num"></fmt:formatNumber> ${num}<br>
-
formatDate
:格式化日期<!-- 基本使用: value:被格式化数据 type:格式类型,date(年月日),time(时分秒),both(完整形式) var:限域变量 scope:变量范围 pattern:自定义形式 --> <fmt:formatDate value="${date}" type="date" var="dt"></fmt:formatDate> ${dt}<br> <fmt:formatDate value="${date}" type="date" var="dt1" pattern="yyyy-MM-dd"></fmt:formatDate> ${dt1}<br>
-
parseNumber
:解析数字货币百分数<h3>数字解析:</h3> <c:set var="balance" value="348.374" /> <fmt:parseNumber var="i" type="number" value="${balance}" /> <p>数字解析 (1) : <c:out value="${i}" /></p> <fmt:parseNumber var="i" integerOnly="true" type="number" value="${balance}" /> <p>数字解析 (2) : <c:out value="${i}" /></p>
-
parseDate
:解析日期<!-- 基本使用: <jsp:parseDate value:被解析值 type:类型 pattern:定义形式 var:限域变量 scope:规定变量作用域范围 --> <c:set var="now" value="20-10-2015"/> <fmt:parseDate var="dt" type="date" value="${now}" pattern="dd-MM-yyyy"></fmt:parseDate> <fmt:formatDate value="${dt}" type="date" var="th"></fmt:formatDate> ${th}