zoukankan      html  css  js  c++  java
  • JSP使用JSTL

      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; 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>

  • 相关阅读:
    今天又能去健身了
    今天招受情感打击
    js实现菜单命令
    爱好者
    杂七杂八
    wu
    后缀数组学习笔记——罗穗骞倍增算法代码
    POJ 3261 Milk Patterns
    URAL 1158 Censored!
    POJ 1743 Musical Theme
  • 原文地址:https://www.cnblogs.com/liuping/p/2229311.html
Copyright © 2011-2022 走看看