天天看点

jstl标签技术(jsp standard tag library:jsp标准标签库)

Jstl标签技术

1.jstl的介绍

2.一般用途的标签

3.条件标签

4.迭代标签

5.url相关的标签(xml,sql)

6.jstl标签实际运用-购物车

Jstl

Jstl(jsp standard tag library):jsp标准标签库

为什么有?

在系统中,jsp文件有大量的<% %>java片段 jsp中 html标签+jsp标签+java片段->jsp很乱

提出:能不能把java片段用 标签来替换 ->jsp页面就简洁

Jstl的好处

(1)在应用程序服务器之间提供统一的接口,从而提供了web应用在不同服务器的移植

(2)简化jsp于web应用程序的开发

(3)减少jsp中java片段的代码(scriptlet代码),可以达到在Jsp页面中没有任何java代码,代码更加简洁

(4)提高jsp开发速度,缩短开发周期

解决之道-jstl

目前软件公司用不用jstl标签?

不同公司严要求可能不一样,一类公司要求jsp页面中不能有任何的java代码,还有一类公司没有必须的要求

在jstl中,最常用的标签有:

一般途径的标签

(1)<c:out>

(2)<c:set>

(3)<c:remove>

(4)<c:catch>

条件标签

(1)<c:if>

(2)<c:choose>

(3)<c:when>

(4)<c:otherwise>

迭代标签

(1)<c:forEach>

(2)<c:forTokens>

Url相关的标签

(1)c:redirect

(2)c:import

(3)c:param

uri查看jstl-impl-1.2.2.jar ->META-INF->c.tld

jstl标签技术(jsp standard tag library:jsp标准标签库)
jstl标签技术(jsp standard tag library:jsp标准标签库)
jstl标签技术(jsp standard tag library:jsp标准标签库)

注意:什么时候前面 : 如 果 是 从 某 个 域 对 象 中 取 出 值 , 使 用 { } :如果是从某个域对象中取出值,使用 :如果是从某个域对象中取出值,使用{?} ?表示属性名

jstl标签讲解

注意:引入标签库

<!-- 引入jstl标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
           

一般途径的标签

(1)c:out标签

<body>
  	<%
  		//System.out.println("hello.world");
  		//这句话本身应当放在controller,这里是为了方便测试
  		
  		//如果域对象中有相同的属性名,c:out 优先级是  pageContext>request>session>application
  		request.setAttribute("abc", "你好<a href='http://www.baidu.com'>百度</a>");
//  		session.setAttribute("abc", "你好2");
//  		application.setAttribute("abc", "你好3");
// 		pageContext.setAttribute("abc", "你好4");

		User u=new User("xiaoming",14); 
		request.setAttribute("user1",u);
  	 %>
    <c:out value="hello.world"></c:out>
    <h1>如何输出request/session/application/pageContext域对象的数据</h1>
    <!-- escapeXml用于指定是否按照html样式显示,默认是true[表示文本] false[html形式] -->
    <c:out value="${abc}" default="没有值" escapeXml="false"></c:out>request.getAttribute("abc").toString();
  	<h1>如何输出对象的值</h1>
  	<c:out value="${user1.name}"></c:out><==>(User)request.getAttribute("user1").getName();
  	||<c:out value="${user.age}"></c:out>
  	<h1>el表达式</h1>
  	${user.name}||${user1.age*20}
  </body>
           

(2)c_set标签

<body>
    <c:set var="abc" value="中国北京" scope="request"></c:set>
    <%
    	//上面的标签等价
    	//request.setAttribute("abc","中国北京");
     %>
     <c:out value="${abc}"></c:out>
  </body>


           

(3)c_remove标签

<body>
    <%
    	request.setAttribute("a","你好");
     %>
     <h1>输出</h1>
     <c:out value="${a} "></c:out>
     <c:remove var="a" />
     <c:out value="${a}" default="没有了"></c:out>
  </body>
           

(4)c:catch标签

<body>
    <h1>c_catch使用</h1>
    <c:catch var="myexception">
    	<% int i=8/0; %>
    </c:catch>
    <c:out value="${myexception}"></c:out><br>
    <c:out value="${myexception.message}"></c:out>
  </body>
           

条件标签

(1)c:if标签

<body>
    <h1>c:if的使用</h1>
    <%
    	request.setAttribute("a", "hello");
    	request.setAttribute("age", "23");
    	//放入一个Rat对象
    	Rat rat=new Rat("xiaobai",10);
    	request.setAttribute("rat1", rat);
     %>
     <h1>判断字符串</h1>
     <c:if test="${a=='hello'}">
     ok!
     </c:if>
     <c:if test="${a!='hello'}">
     no ok!
     </c:if>
     
     <h1>判断数值</h1>
	 <c:if test="${age==56}">
  		等于56
  	 </c:if>
  	 <c:if test="${age<56}">
  		小于56
  	 </c:if>
     <c:if test="${age>10 and age<34 }">
     	age>10 and age<34
     </c:if>

     <h1>判断对象中的属性</h1>
          <c:if test="${rat1.age>3}">
     	小老鼠年龄大于3岁
     </c:if>
  </body>

           

(2)c:choose标签

<body>
    <h1>c_choose</h1>
    <%
    	//放入一个Rat对象
    	Rat rat=new Rat("xiaobai",1);
    	request.setAttribute("rat1", rat);
     %>
     switch()
     case:
     case:
     case:
     default:<br>
     <c:choose>
     	<c:when test="${rat1.age<2 }">
     		<font color="red">老鼠很小不能吃</font>
     	</c:when>
     	<c:when test="${rat1.age>2 and rat1.age<8}">
     		<font color="green">老鼠很壮 好吃</font>
     	</c:when>
     	<c:otherwise>
     		<font color="blue">老鼠很lao  不好吃</font>
     	</c:otherwise>
     </c:choose>
  </body>
           

迭代标签

(1)c:foreach标签

<body>
    <h1>迭代标签 c:foreach</h1>
    <%
    	ArrayList<Rat> al=new ArrayList<Rat>();
    	Rat rat1=new Rat("xiaobai",2);
    	Rat rat2=new Rat("xiaobao",4);
    	Rat rat3=new Rat("dabao",8);
    	//放到al
    	al.add(rat1);
    	al.add(rat2);
    	al.add(rat3);
    	request.setAttribute("allrats", al);
     %>
     
     <%
     	ArrayList<Rat> al2=(ArrayList<Rat>)request.getAttribute("allrats");
     	for(Rat rat:al2)
     		out.println(rat.getName()+" "+rat.getAge());
      %>
      <h1>foreach取法</h1>

     	<!-- ${allrats}表示域对象的哪个属性(一般是一个集合) ;var ="rat"表示取出来的具体对象-->
      <c:forEach items="${allrats}" var="rat">
     	 <c:out value="${rat.name }"></c:out>
      	<c:out value="${rat.age }"></c:out>
      </c:forEach>
      
      <h1>第二种迭代:1 to 10 </h1>
      <c:forEach var="i" begin="1" end="10">
      	<c:out value="${i}"></c:out>-->
      </c:forEach>
      <h1>第二种迭代:1 to 10,step=3 </h1>
      <c:forEach var="i" begin="1" end="10" step="3">
      	<c:out value="${i}"></c:out>-->
      </c:forEach>    
  </body>
           

(2)c:fortokens标签

<body>
    <h1>fortokens</h1>
    <%
    	request.setAttribute("abc", "12;56;你好;ddd;uuu");
     %>
    
    
    <c:forTokens items="12;56;你好;ddd" delims=";" var="temp">
    	${temp}
    </c:forTokens>
        <c:forTokens items="${abc }" delims=";" var="temp">
    	${temp}
    </c:forTokens>
  </body>
           

Jstl细节问题

1.前面用到的是ArrayList集合迭代、HashMap/HashSet

<body>
      <%
  		//模拟
  		Map map=new HashMap();
//  		map.put("aa", "zhangsan");
//  		map.put("bb", "lisi");
  		//把map放入某个域对象 session request pageContext application
 // 		request.setAttribute("persons", map);
  		
  		Rat rat1=new Rat("xiaobai",2);
    	Rat rat2=new Rat("xiaobao",4);
    	Rat rat3=new Rat("dabao",8);
    	map.put("aa", rat1);
    	map.put("bb", rat2);
    	map.put("cc", rat3);
  		request.setAttribute("rats", map);
  		//set
  		Set set=new HashSet();
  		set.add(rat1);
  		set.add(rat3);
  		set.add(rat2);
  		request.setAttribute("myrats", set);
   %>
   		<c:forEach items="${rats}" var="rat">
   			key=${rat.key }值=${rat.value.name}age=${rat.value.age}<br>
   		</c:forEach>
   		<h1>set集合  jstl标签取法</h1>
   		<c:forEach  items="${myrats }" var="myrat">
   			value=${myrat.name }||age=${myrat.age }<br>
   		</c:forEach>
   		//如何使用jstl if去判断集合是否为空
   		<h1>如何使用jstl if去判断集合是否为空</h1>
   		<c:if test="${empty myrats }">
   			没有老鼠
   		</c:if>
   		<c:if test="${!empty myrats }">
   			有老鼠
   		</c:if>
  </body>

           

2.Url相关的标签

(1)c:redirect标签

<body>
    <h1>redirect</h1>
    <c:redirect url="http://www.baidu.com"></c:redirect>
  </body>
           

(2)c:import标签 与param标签

<body>
    <c:import url="a.jsp">
    <c:param name="name" value="hyf"/>    
    </c:import>
    <%
    	request.setAttribute("aa", "hello");
     %>
     <c:if test="${ 2>1?true:false}">
     	ok!!!
     </c:if>
  </body>
           

a.Jsp

<body>
    aaaa.<br>
    ${param.name }
  </body>
           
jstl标签技术(jsp standard tag library:jsp标准标签库)

(3)c:param标签

aa.jsp

<body>
    <a href="/jstl1/bb.jsp?id=12" target="_blank" rel="external nofollow" >点击</a>
  </body>
           

bb.jsp

<body>
    ${param.id }
  </body>