[Servlet&JSP] JSTL的使用

我们可以使用JSTL(JSP Standard Tag Library)来替换JSP中用来实现页面逻辑的Scriptlet,让网页上使用与HTML类似的标签,这会使得网页设计变得更加简单,可以随时调整页面而不用费心的修改Scriptlet。

JSTL简介

JSTL提供的标签库可以分为五个大类。

  1. 核心标签库
    提供条件判断、属性访问、URL处理及错误处理等标签。
  2. 格式标签库
    提供数字、日期等的格式化功能,以及区域(Locale)、信息、编码处理等国际化功能的标签。
  3. SQL标签库
    提供基本的数据库查询、更新、设置数据源等功能的标签。
  4. XML标签库
    提供XML剖析、流程控制、转换等功能的标签。
    5.函数标签库
    提供用于字符串处理的自定义EL函数标签库

JSTL是另一个标准规范,本身并不在JSP的规范当中,所以必须另外下载实现。

  1. JSTL下载
    网址:http://tomcat.apache.org/taglibs/standard/
    版本: Standard 1.1.2
  2. 配置
    解压下载文件jakarta-taglibs-standard-1.1.2.zip,将lib目录下的jstl.jar和standard.jar复制到项目的WEB-INF/lib目录下。
  3. 使用
    在JSP文件中使用taglib元素指定元素定义前置名称与uri引用。
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

前置标签设置了这个标签库在此JSP网页中的名称空间,以避免与其他标签库的标签名称发生冲突,惯例上使用JSTL核心标签库时,会使用c作为前置名称。uri则告知容器,如何引用JSTL标签库实现。

流程处理标签

1 <c:if>标签

一个实例如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>登录页面</title>
    </head>
    <body>
        <c:if test="${param.name=='abc' && param.password=='123'}">
            <h1>${param.name} 登录成功</h1>
        </c:if>
    </body>
</html>

<c:if>标签中的test属性中可以设置EL表达式或JSP操作数(<%= %>),如果表达式的结果为true,则会将<c:if>主体输出。

2 <c:choose><c:when><c:otherwise>标签

一个实例如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="user" class="club.chuxing.User" />
<jsp:setProperty name="user" property="*" />
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>登录页面</title>
    </head>
<body>
    <c:choose>
        <c:when test="${test.valid}">
            <h1>
                <jsp:geProperty name="user" property="name" />登录成功
            </h1>
        </c:when>
        <c:otherwise>
            <h1>登录失败</h1>
        </c:otherwise>
    </c:choose>
</body>
</html>

<c:when><c:otherwise>必须放在<c:choose>之中。<c:choose>中可以有多个<c:when>标签,此时会从上往下进行测试,如果有个<c:when>的test运算结果为true,就输出其主体内容,之后的<c:when>就不会做测试,如果若有的<c:when>经测试都不成立,则会输出<c:otherwise>的内容。

3 <c:forEach>标签

用于通过循环来产生一连串的输出。<c:forEach>标签的items属性可以是数组或Collection对象,每次回循序读取数组或Collection对象中的一个元素,并制定给var属性所设置的变量,之后就可以在<c:forEach>标签主体中,使用var属性所设置的变量来取得该元素。例如:

<body>
    <table>
        <c:forEach var="message" items="${messageService.messages}">
            <tr>
                <td>${message.name}</td><td>${message.text}</td>
            </tr>
        </c:forEach>
    </table>
</body>

4 <c:forTokens>标签

用于将某个字符串拆分为数个字符(Token)。例如:

<body>
    <c:forTokens var="token" delims="," items="Java,C++,JavaScript">
        ${token}<br />
    </c:forTokens>
</body>

5 <c:catch>标签

如果要在发生异常的页面直接捕捉异常对象,可以使用将可能发生异常的网页段落包起来。如果异常发生了,这个异常对象会设置给var属性所指定的名称,这样才有机会使用这个异常对象。例如:

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

网页导入、重定向标签

之前学过了两种包括其他JSP网页至目前网页的方法,一个是include指示元素,另一个时<jsp:include>标签。用法如下:
include指示元素:

<%@include file="/WEB-INF/jspf/header.jspf"%>

<jsp:include>标签:

<jsp:include page="add.jsp">
    <jsp:param name="a" value="1" />
    <jsp:param name="b" value="2" />
</jsp:include>

在JSTL中,有个<c:import>标签,可以视作是<jsp:include>标签的加强版,它可以在运行时动态导入另一个网页,也可以搭配<c:param>在导入另一网页时带有参数,例如:

<c:import url="add.jsp">
    <c:param name="a" value = "1" />
    <c:param name="b" value = "2" />
</c:import>

除了可以导入当前web应用程序中的网页之外,该标签还可以导入非目前web应用程序中的网页。例如:

<c:import url="http://chuxing.club" charEncoding="utf-8" />

其中charEncoding用来指定要导入的网页的编码,如果要被导入的网页编码与目前的网页编码不同,就必须使用charEncoding属性加以指定,导入的网页才不至于产生乱码。

<c:redirect>标签的作用如同sendRedirect()方法,如果重定向时需要参数,也可以通过<c:param>来设置。

<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>标签。

例如,用户登录后再session范围内设置一个“login”属性,代表用户已经登录,则可以按如下编写:

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

这段标签的作用相当于

<% session.setAttribute("login", "abc"); %>

也可以使用EL来设置value,例如:

<c:set var="login" value="${user}" scope="session" />

<c:set>标签也可以将value的设置改为主体的方式,在所要设置的属性值冗长时,采用主体的方式会比较容易编写,例如:

<c:set var="details" scope="session">
    abc,chuxing.club,abc.chuxing.club
</c:set>

<c:set>标签不设置scope时,就会从page、request、session、application的范围寻找属性名称,如果在某个范围内找到属性名称,则在该范围设置属性。如果所有范围都没有找到属性名称,则会在page范围内添加属性。如果要移除某个属性,则可以使用<c:remove>标签。例如:

<c:remove var="login" scope="session" />

<c:set>标签也可以直接用来设置JavaBean或Map对象的键值,此时必须使用target属性进行设置,例如:

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

<c:out>标签可以用来输出指定的文字。例如:

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

以上代码与直接写${param.message}的区别在于,<c:out>标签会自动将角括号、单引号、双引号等字符用替代字符替换,这个功能是<c:out>标签的escapeXml属性来控制的,默认为true;如果设置为false,就不会做字符的替换。还可以使用default属性设置EL运算结果为null时的默认显示值。

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

URL处理标签

response的encodeURL()方法可以用来做URL重写,在用户关闭Cookie功能时,仍可以继续利用URL重写来维持使用session进行会话管理。

也可以使用JSTL的<c:url>,它会在用户关闭Cookie的功能时,自动用Session ID做URL重写。

<body>
    <a href="<c:url value='count.jsp' />">升序</a>
</body>

如果要在URL上携带参数,则可以搭配<c:param>标签,参数将被编码后附加在URL上,例如,就以下这个片段而言,最后的URL将成为some.jsp?name=chu+xing

<c:url value="some.jsp">
    <c:param name="name" value="chu xing" />
</c:url>

转载:http://blog.csdn.net/foreverling/article/details/50342543

时间: 2024-09-13 06:17:39

[Servlet&JSP] JSTL的使用的相关文章

[Servlet&amp;amp;JSP] JSTL的使用

我们可以使用JSTL(JSP Standard Tag Library)来替换JSP中用来实现页面逻辑的Scriptlet,让网页上使用与HTML类似的标签,这会使得网页设计变得更加简单,可以随时调整页面而不用费心的修改Scriptlet. JSTL简介 JSTL提供的标签库可以分为五个大类. 核心标签库 提供条件判断.属性访问.URL处理及错误处理等标签. 格式标签库 提供数字.日期等的格式化功能,以及区域(Locale).信息.编码处理等国际化功能的标签. SQL标签库 提供基本的数据库查询

javabean servlet jsp实现分页功能代码解析_java

前端实现用ligerUI实现分页,感觉用框架确实简单,闲着无聊,模拟着liger的分页界面实现了一遍(只要是功能,样式什么无视)  这里用基础的三层架构+servlet+jsp实现,思路很简单,把所有分页相关信息写入到一个pagebean类里面,service返回这个bean类,每次分页查询时都从该bean里查找信息.只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等  这是ligerUI实现的分页样式(实现过程我的上一篇博客有写:http://www

Eclipse javax.servlet.jsp.PageContext cannot be resolved to a type 错误解决办法

目前在jsp页面form action中使用${pageContext.request.contextPath }/servlet的写法,但是一直提示有错误,错误如下:javax.servlet.jsp.PageContext cannot be resolved to a type 网上解答过说要缺少jsp-api.jar,导入这个包之后不报错了,但是程序启动访问这个页面的时候出现如下错误: org.apache.jasper.JasperException: Unable to read T

[Servlet&amp;JSP] HttpSession会话管理

我们可以将会话期间必须共享的资料保存在HttpSession中,使之成为属性.如果用户关掉浏览器接受Cookie的功能,HttpSession也可以改用URL重写的方式继续其会话管理功能. HttpSession的使用 在Servlet/JSP中,如果要进行会话管理,可以使用HttpServletRequest的getSession()方法取得HttpSession对象.语句如下: HttpSession session = request.getSession(); getSession()方

[Servlet&amp;JSP] Cookie会话管理

web应用程序的请求与响应是基于HTTP的,为无状态的通信协议,服务器不会记得这次请求与下一次请求的关系.,然而有些功能必须由多次请求来完成,例如购物车,用户可能在多个购物网页之间采购商品,web应用程序必须有个方式来得知用户在这些网页中采购了哪些商品,这种记得此次请求与之后请求间关系的方式,就称为会话管理(Session Management). 隐藏字段的使用 使用隐藏字段,可以将上一次请求的参数用隐藏字段的方式返回到下一页窗体中,如此发送下一页窗体时,就可以一并发送这些隐藏字段,每一页的参

JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)_java

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

【错误解决】[Maven]使用Maven配置Jstl出现异常:The absolute uri: http://java.sun.com/jsp/jstl/core cannot...

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 也就是出现如下错误: 严重: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or

在Windows NT 4.0下安装Apache+Servlet+JSP

apache|js|servlet|window 版本:1.0作者:何志强(hhzqq@sina.com)时间:2000.03.16 本文只讨论如何在Windows NT 4.0上安装Apache+Servlet+JSP.本文中的配置情况如下: Windows NT 4.0 jdk1_2_2-001-win.exe apache_1_3_12_win32.exe ApacheModuleJServ.dll tomcat.zip(3.0)一.软件下载 JDK http://java.sun.com

Java Servlet/Jsp多语言解决方案(一)

js|servlet|解决 Java Servlet/Jsp多语言解决方案 因为一直不信Java竟会有不能混排显示多国语言的BUG,这个周末研究了一下Servlet. Jsp的多国语言显示的问题,也就是Servlet的多字符集问题,由于我对字符集的概念还 不是很清晰所以写出的东西未必是准确的,我是这样理解Java中的字符集的:在运行时 ,每个字符串对象中存储的都是编码为UNICODE内码的(我觉得所有的语言中都是有相应 编码的,因为在计算机内部字符串总是用内码来表示的,只不过一般计算机语言中的字