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="&lt" 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>
View Code

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>
View Code

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>
View Code

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权威电子书。


 

posted @ 2016-09-10 18:55  孩子爹  阅读(690)  评论(0编辑  收藏  举报