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>

  • 相关阅读:
    Windows 7的 磁盘管理中,某个磁盘或分区,突然变成只读。
    Python 静态变量 与 静态方法
    如何用手机上网给电信固话充值
    Windows,查看进程的连接的IP地址,批量模式,最后做成Excel
    如果在VMware上免费下载驱动
    DELL iDRAC 远程虚拟机报错:虚拟介质分离或所选虚拟磁盘驱动器的虚拟介质重定向已由另一用户使用
    Windows Server 2008安装 百度Wifi 360Wifi 小米Wifi 失败的解决方法
    让Windows 8 / 8.1 以及 Windows Server 2012 / 2012 R2的桌面,显示我的电脑图标
    让Windows 8 / 8.1 以及 Windows Server 2012 / 2012 R2的任务管理器的性能面板,显示磁盘数据
    企业CIO、CTO必读的34个经典故事
  • 原文地址:https://www.cnblogs.com/liuping/p/2229311.html
Copyright © 2011-2022 走看看