JSP中的常用标签
JSP中的常用标签---JSTL
2016-09-10 23:40:01
jstl是java中的一个定制标记库集,提高了JSP页面的代码复用性和可读性。
环境搭建
在http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 下载对应的JSTL的jar,导入web工程的lib,add to path。
EL表达式 --- Expression Language
EL表达式的格式 ${表达式}
EL的运算符 "." 和 "[]"
例子:User对象中有一个成员为 name。 可这样获取${User.name}或者${User["name"]}。
注意:一般情况下两个可以互换使用,以下两种情况除外:
1、属性中包含了特殊字符
${User.family-name} 此种表达错!
${User["family-name"]} 此种表达正确!
2、要取未知属性时,即通过变量动态取值
如:${User[param]}
JSP内置对象与EL表达式的对应关系
EL的一些隐藏对象
EL表达式在页面取值时,如果值为null或者"",页面显示为空白
EL表达式的运算符
对于empty,在判断null 或者 空串时,很好用。 是空串或者null即返回true。
注意:以上所有的null,指的都是对象null,而非字符串"null"。
JSTL的四大分类及函数
1.核心标签
2.格式化标签
3.SQL标签
4.XML标签
JSTL函数
一、核心标签
核心标签13个,分为4大类:
表达式控制:out、set、remove、catch
流程控制:if、choose、when、otherwise
循环控制:forEach、forTokens
URL控制:import、url、redirect
out用法:输出常量和变量,在变量不存在时,可通过default输出默认值。还有个
属性escapeXml ,默认为true,就是忽略xml的格式
<c:out value="<" escapeXml="false"></c:out>
在页面显示一个 < ,若设置为true,就是原样输出。
set用法:存值到scope中
两种写法都可以,值可以写在value中,也可以写在标签之间。
<c:set value="time" var="tt" scope="session"></c:set> <c:set var="ddd" scope="session">ttt</c:set> <c:out value="${ddd}"></c:out>
remove用法:remove一个常量,bean中的属性值是不能通过remove删除的。
catch用法:对可能存在问题的标签代码存储其报错信息,也是通过EL表达式可以输出
if用法:var中的值用于存放test判断的结果,值为false/true
<form action="demo.jsp" method="post"> <input type="text" name="haha" value="${param.haha}"/> <input type="submit" /> </form> <c:if test="${param.haha > 90}" var="re" scope="page"> <c:out value="congratulations!"></c:out> </c:if> <c:out value="${re}"></c:out>
choose、when、otherwise用法:要么三个一起出现,要么choose和when一起出现
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>JSTL Demo</title> <script type="text/javascript"> function go(){ var rules = /^\d*$/; if(rules.test(document.getElementById("in").value)) { document.form1.submit(); }else { alert("非法字符"); } } </script> </head> <body> <form name="form1" action="demo.jsp" method="post"> <input id="in" type="text" name="haha" value="${param.haha}"/> <input type="button" onclick="go();" /> </form> <c:choose> <c:when test="${param.haha >= 60 && param.haha <= 100}"> <c:out value="老年"></c:out> </c:when> <c:when test="${param.haha >= 40 && param.haha < 60}"> <c:out value="壮年"></c:out> </c:when> <c:when test="${param.haha >= 30 && param.haha < 40}"> <c:out value="中年"></c:out> </c:when> <c:when test="${param.haha >= 20 && param.haha < 30}"> <c:out value="青年"></c:out> </c:when> <c:when test="${param.haha >= 3 && param.haha < 20}"> <c:out value="少年"></c:out> </c:when> <c:when test="${param.haha >= 0 && param.haha < 3}"> <c:out value="幼儿"></c:out> </c:when> <c:otherwise> <c:out value="非人类"></c:out> </c:otherwise> </c:choose> </body> </html>
forEach用法:
属性介绍
item 表示将要遍历的集合
var 表示item集合中的每一个
step 表示步长,每隔step个元素取一次
begin 表示从哪里开始遍历
end 表示遍历到哪里结束 注意:begin和end所给数字均为元素下标
varStatus 表示一个元素的状态,有4个状态量index,count,first,last
注意:index表示当前元素的下标,count表示当前元素是本次循环元素中的第几个,
first和last为布尔值,表示当前元素是否为第一个和最后一个。
<%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path; %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>JSTL Demo</title> </head> <body> <% List<String> list = new ArrayList(); for (int i = 0; i < 20; i++) { list.add("哈哈" + i); } request.setAttribute("list", list); %> <!-- 全遍历 <c:forEach items="${list}" var="ll"> <c:out value="${ll}"></c:out> <br /> </c:forEach> --> <!-- 部分遍历 假如输出 哈哈 3 到 10 <c:forEach items="${list}" var="ll" begin="3" end="10"> <c:out value="${ll}"></c:out> <br /> </c:forEach> --> <!-- 部分遍历 携带步长 假如输出 哈哈 3 到 10 设置为2时 ,会输出 3 5 7 9 <c:forEach items="${list}" var="ll" begin="3" end="10" step="2"> <c:out value="${ll}"></c:out> <br /> </c:forEach> --> <!-- varStatus --> <c:forEach items="${list}" var="ll" varStatus="i" begin="3" end="10"> <c:out value="${ll} 的属性 index: ${i.index}"></c:out><br /> <c:out value="${ll} 的属性 count: ${i.count}"></c:out><br /> <c:out value="${ll} 的属性 first: ${i.first}"></c:out><br /> <c:out value="${ll} 的属性 last: ${i.last}"></c:out><br /><br /> <br /> </c:forEach> </body> </html>
forTokens用法:浏览字符串,并且根据指定的字符截取字符串
<c:forTokens items="010@@8595855@@132123" delims="@@" var="re"> <c:out value="${re}"></c:out><br/> </c:forTokens>
它也有 step,begin,end,varStatus,用法和forEach一样。
import用法:不仅可以导入本工程的资源,还可以导入网络资源
url:被导入资源的URL
context:相同服务器下的其他web项目,必须以"/"开头
var:以String类型存入被包含文件的内容
Scope:var变量的JSP范围
charEncoding:被导入文件的编码格式
varReader:以Reader类型存储被包含文件的内容
注意:要想引入同一服务器下web其他项目的页面资源,需要在tomcat的context.xml中,给Context标签加上
crossContext="true",同时将tomcat的发布路径改为安装路径下的webapp
<!-- C标签的 import标签 --> <c:catch var="errorImport1"> <c:import url="http://www.baidu.com" charEncoding="UTF-8"></c:import> </c:catch> <c:out value="${errorImport1}"></c:out> <br /> <!-- 导入相对路径的文件 d:/test.properties --> <c:catch var="errorImport2"> <c:import url="test.properties" charEncoding="UTF-8" var="re" scope="session"></c:import> </c:catch> <c:out value="${errorImport2}"></c:out> <c:out value="${sessionScope.re}"></c:out> <br/> <!-- context --> <c:catch var="errorImport3"> <c:import url="/index.jsp" charEncoding="UTF-8" context="/watermark"></c:import> </c:catch> <c:out value="${errorImport3}"></c:out>
redirect用法:重定向,可携带参数给目标页面
<!-- redirect --> <c:redirect url="http://www.baidu.com"> <c:param name="dd" value="123"></c:param> </c:redirect>
url用法:可以动态生成url
<!-- url标签 --> <c:if test="${8 > 2}"> <c:set scope="session" var="add" value="haha"></c:set> </c:if> <c:url var="theUrl" value="http://www.baidu.com/${add}"></c:url> <a href="${theUrl}">theURL</a>
JSTL函数
fn:contains <c:out value="${fn:contains('123','1')}"></c:out> 判断123中是否含有1 返回true or false
fn:indexOf <c:out value="${fn:indexOf('adc','a')}"></c:out> 判断adc中是否含有 返回 0 or -1
更多java干货交流,欢迎关注微信公众号:haizidie1321
手机公众号搜索:haizidie1321或者扫下面的二维码关注,关注即得java权威电子书。