JSP--使用JSTL

元气小坏坏 提交于 2020-02-07 23:50:43

  JSP提供了<jsp:xxx>开头的标准标签及EL,可用来减少JSP页面上的Scriptlet的使用,将请求相关与业务逻辑封装到Servlet或JavaBean中,网页上仅留下与页面显示相关的逻辑。但即使是这样,依然使网页设计与维护困难重重。我们可以使用JSTL来替换JSP中用来实现页面逻辑的Scriptlet让网页上使用与HTML类似的标签,使得设计变得简单。

1.核心标签库

  JSTL的标签种类很多,下面将主要介绍JSTL的核心标签库。要使用核心标签库必须在JSP上使用taglib指令定义前置名称以及uri引用。

  <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

  流程处理标签

  <c:if>

 

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@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>登录页面</title>    </head>    <body>        <c:if test="<%= true %>">            <h1>${param.name} 登录成功</h1>        </c:if>    </body></html>

<c:if>标签仅在test属性的结果为true时,显示主题内容,不过没有相应的<c:else>标签,如果想实现if else结构可以使用<c:choose>、<c:when>和<c:otherwise>标签。

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><jsp:useBean id="user" class="cc.openhome.User"/><jsp:setProperty name="user" property="*"/><!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>登录页面</title>    </head>    <body>        <c:choose>            <c:when test="${user.valid}">                <h1><jsp:getProperty name="user" property="name"/>登录成功</h1>            </c:when>            <c:otherwise>                 <h1>登录失败</h1>            </c:otherwise>        </c:choose>    </body></html>

<c:when>和<c:otherwise>必须放在<c:choose>之中。<c:when>的test运算为true时,会输出<c:when>的主体内容,可以有多个<c:when>,此时会依次进行测试,遇到test结果为true就输出,之后的<c:when>不会测试,如果所有<c:when>都不成立,就输出<c:otherwise>。

<c:forEach>标签用来实现for循环。

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@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">   <jsp:useBean id="messageService" class="cc.openhome.MessageService"/><html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">        <title>留言版</title>    </head>    <body>        <table style="text-align: left; width: 100%;" border="1">            <tr><td>名称</td><td>信息</td></tr>            <c:forEach var="message" items="${messageService.messages}">                <tr><td>${message.name}</td><td>${message.text}</td></tr>            </c:forEach>        </table>    </body></html>

<c:forEach>标签的items属性可以是数组或Collection对象,每次会循序读取数组或Collection对象的一个元素,并指定给var属性所设置的变量,之后可以使用变量取得元素。

<c:forTokens>的使用

<c:forTokens var="token" delims="," items="java,c++,c,javascript">

  S{token}<br>

</c:forTokens>

  错误处理标签

  <c:catch>标签

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@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>加法网页</title>    </head>    <body>        <c:catch var="error">            ${param.a} + ${param.b} = ${param.a + param.b}        </c:catch>        <c:if test="${error != null}">            <br><span style="color: red;">${error.message}</span>            <br>${error}        </c:if>    </body></html>

可以使用<c:catch>将可能产生异常的段落包起来,如果异常真的发生,这个异常对象会设置给var属性所指定的变量。

  网页导入、重定向标签

  <c:import>的使用

  <c:import url="add.jsp">

    <c:param name="a" value="1" />

    <c:param name="b" value="2" />

  </c:import> 

  还可以导入非当前web应用的网页

  <c:import url="http://openhome.cc " charEncoding="BIG5" />

  <c:redirect url="add.jsp">

    <c:param name="a" value="1" />

    <c:param name="b" value="2" />

  </c:redirect>

  属性处理与输出标签

  JSP的<jsp:setProperty>功能有限,只能设置JavaBean的属性。如果要在page、request、session、application等范围设置一个属性,或者设置Map对象的键与值,可以使用<c:set>标签

  <c:set var="login" value="hopestar" scope="session">

  相当于:

  <% sessinn.setAttribute("login", "hopestar"); %> 

  不设置scope时,会从page、request、session、application的范围内寻找属性名称,如果找到,则设置属性。如果没找到,则会在page范围中添加属性。<c:set>也可以直接来设置JavaBean的属性或Map对象的键/值。

  <c:set target="${user}" proeprty="name" value="${param.name}" />

  如果${user}运算结果是个JavaBean,则调用setName()将请求参数name的值传入。如果运算结果是个Map,则上例就是以proeprty属性作为键,以value作为值调用Map对象的put()方法。

  <c:out value="${param.message}" />

  为什么不直接写${param.message},如果${param.message}来自于用户的留言板,而用户故意留下了HTML,则<c:out>会自动将角括号、引号等用替代字符替代。另外,EL的运算结果为null时不显示任何值,如果想显示一个默认值,可以这么做:

  <c:out value="${param.a}" default="0" />

  URL处理标签

  <c:url>的用法

  <c:url value="some.jsp">

    <c:param name="username" value="hopestar">

  </c:url>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!