02-JavaWeb-JSTL标签

来源:互联网 发布:dnf升级券cdk淘宝 编辑:程序博客网 时间:2024/05/23 15:39

JSTL标签库简介

JST是Java的一个定制标记库集


为什么要使用JSTL?

  1. JSTL实现了页面中的代码复用(基于标签库原理,重复率较高的代码块支持复用,提高了效率)
  2. 书写JSP页面是可读性更强(长得很像XML,方便前端查看和参与开发)

JSTL由核心标签库、格式标签库、SQL标签库、XML标签库和函数标签库组成。在使用这些标签库之前,需要在JSP页面顶部使用<%@ taglib%>指令定义引用的标签库和访问前缀。

核心标签库的taglib指令

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

格式标签库的taglib指令

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

SQL标签库的taglib指令

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

XML标签库的taglib指令

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

函数标签库的taglib指令

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

核心标签库

核心标签库主要用于完成JSP页面常用的功能,包括JSTL的表达式标签( ),URL标签( ),流程控制标签( ),循环标签( )

表达式标签

输出标签

用于将值输出到JSP页面中。该标签类似于JSP的表达式<%=表达式%>或者EL表达式${expression}

可以有标签体,也可以没有标签体

<c:out value="expression" [escapeXml="true|false"] [default="defaultValue"]> 

<c:out value="expression" [escapeXml="true|false"] [default="defaultValue"]> </c:out>

escapeXml:可选属性,用于指定是否转换特殊字符,<(&lt),>(&gt),’($#039),”(&#034),&(&amp)。

<body><c:out value="hello<hr>" escapeXml="true" />   //输出hello<hr><c:out value="hello<hr>" escapeXml="false" />  //输出hello下面一条分割线</body>

当escapeXml为true时,输出字符串中的


被以字符串形式输出了,当为false时,字符串中的
将会被当做HTML标记输出。这是因为当为true时,<和>符号转换为对应的实体代码,所以在输出的时候,就不会当做HTML标记输出了

变量设置标签

标签用于在指定范围(page,request,session或application)中定义保存某个值的变量,或为指定的对象设置属性值。

四种形式:

<c:set var="name" value="vlaue" [scope="范围"]/><c:set var="name" [scope="page|request|session|application"]>    标签体</c:set><c:set value="value" target="object" property="propName"/><c:set target="object" property="propName">    标签体</c:set>

var:变量名

value:用于指定变量值,可以使用EL

scope:指定变量的作用域,默认是page,可选page,request,session,application

target:用于指定存储变量值或者标签体的目标对象,可以是JavaBean或Map集合对象

target属性不能是直接指定的JavaBean或Map,而应该是使用EL或一个脚本表达式指定的真正对象。例如,这个对象可以通过为JavaBean “CartForm”的id属性赋值,那么target属性值应该是 target=”${cart}”,而不是target=”cart”。其中cart为CartForm的对象。

property:用于指定目标对象存储数据的属性名

package com.shushu.entity;    public class UserInfo {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }} <body>    <c:set var="username" value="shushu1234" scope="request" />    <c:out value="request中的username:${username}" />    <jsp:useBean id="userInfo" class="com.shushu.entity.UserInfo"></jsp:useBean>    <c:set target="${userInfo}" property="name">数数1234</c:set>    <c:out value="${userInfo.name}"></c:out></body>

变量移除标签

<c:remove var="name" [scope="范围"]/>

var:要移除的变量名

scope:用于指定变量的有效范围,可选为request,application,session,page,默认为page,如果在该标签中没有指定范围,将在它们四个之间查找并将变量移除,如果两个范围内都存要移除的变量名,那么两个范围内的变量都将被移除。当指定要移除的变量不存在的时候,将抛出异常。

用于捕获程序中出现的异常,如果需要她还可以将异常信息保存在指定的变量中。该标签与Java语言中的try……catch语句相似

<c:catch [var="expression"]>    可能存在异常的代码</c:catch>

var:可选属性,用于指定存储异常信息的变量。如果不需要保存,忽略。var属性值只有在标签后面才有效,也就是说,在标签体中无法使用有关异常的任何信息。

  <body><c:catch var="error">    <jsp:useBean id="userInfo" class="com.shushu.entity.UserInfo">        <c:set target="${userInfo }" property="pwd">            111        </c:set>    </jsp:useBean></c:catch><c:out value="${error }"></c:out></body>

URL相关标签

导入标签

=”“

语法1

<c:import url="url" [context="context"][var="name"][scope="范围"][charEncoding="encoding"]>    [标签体]</c:import>

语法2

<c:import url="url" varReader="name" [context="context"][charEncoding="encoding"]>    [标签体]</c:import>

url:用于指定被导入的文件资源的URL地址。(如果被指定的url属性为null、空或者无效,将抛出javax.servlet.ServletException异常)

context:上下文路径,用于访问同一个服务器的其他Web应用,其值必须以”/”开头,如果指定了该属性,那么url属性值也必须以”/”开头

var:用于指定变量名称,该变量用于以String类型存储获取的资源

page:用于指定变量的存在范围,默认值是page

varReader:用于指定一个变量名,该变量用于以Reader类型存储被包含文件内容。(导出的Reader对象只能在标记的开始标签和结束标签之间使用)

标签体:可选,如需要为导入的文件传递参数,则可以在标签体的位置通过标签设置参数。

<!--cimport.jsp --><body>    <c:set var="typeName" value="流行金曲|经典老歌" />    <c:import url="navigation.jsp" charEncoding="utf-8">        <c:param name="typeList" value="${typeName}"></c:param>    </c:import>    </body><!--navigation.jsp--><body><div>${param.typeList}</div></body>

动态生成URL

用于生成一个URL路径的字符串,这个生成的字符串可以赋予HTML的

重定向标签

该标签可以将客户端发出的request请求重定向到其他的URL服务端,由其他程序处理客户端的请求。而在这期间可以对request请求中的属性进行修改或添加,然后把所有属性传递到目标路径。

语法一:

<c:redirect url="url" [context="/context"] />

语法二:

<c:redirect url="url" [context="/context"] >    <c:param/>    ……</c:redirect>

url:必选属性,用于指定带定向资源的URL,可以使用EL
context:用于在使用相对路径访问外部资源时,指定资源的名字

//例一<c:redirect url="login.jsp" />//例二<c:redirect url="UserLsitServlet">    <c:param name="action" value="query"></c:redirect>

传递参数标签

该标签只用于为其他标签提供参数信息,它与组合实现动态定制参数。从而使标签可以完成更加复杂的程序应用。

<body> <c:redirect url="credirect2.jsp">    <c:param name="user" value="shushu"></c:param> </c:redirect></body><body> [${param.user}]欢迎你</body>

流程控制标签

条件判断标签

类似于Java的if语句,虽然标签没有对应的else标签,但是JSTL提供了可以实现if-else功能

语法一:

<c:if test="condition" var="name" [scope="page|……"]>

该语法会判断条件表达式,并将结果保存在var属性指定的变量中,而这个变量存在于Scope属性所指定的范围中

语法二:

条件选择标签 条件测试标签 其他条件标签

该标签可以根据不同的条件完成指定的业务逻辑,如果没有符合的条件就执行默认条件的业务逻辑。标签只能作为和标签的父标签,如果要实现条件选择逻辑,可以在标签中嵌套和标签来完成。

语法如下:

<c:choose>    标签体 <!--由<c:when>标签和<c:otherwise>标签组成--></c:choose>

标签没有相关属性,它只是作为和标签的父标签来使用,并且在标签中,除了空白字符外,只能使用这两个标签。

在一个标签中,可以有多个标签来处理不同条件的业务逻辑,必须要有一个标签,但只能有一个标签来处理默认的业务逻辑,也可以没有标签,有的话必须存在于标签的最后一个,当所有条件都不满足的时候,将不会处理标签的标签体

<body>    <c:if var="result" test="${empty param.luck}">        <form action="" name="form1" method="post">            数字:            <input name="luck" type="text" id="luck">            <input type="submit" name="Submit" value="提交">        </form>    </c:if>    <c:if test="${!result}">        <c:choose>            <c:when test="${param.luck>10 }">恭喜你,一等奖</c:when>            <c:when test="${param.luck>6 }">恭喜你,二等奖</c:when>            <c:when test="${param.luck>4 }">恭喜你,三等奖</c:when>            <c:otherwise>谢谢参与</c:otherwise>        </c:choose>    </c:if>  </body>


循环标签

循环标签

该标签可以根据循环条件,遍历数组和集合类中的所有或部分数据。

语法一:集合成员迭代

<c:forEach items="data" [var="name"] [begin="start"] [end="finish"] [step="step"] [varStatus="statusName"]>    标签体</c:forEach>

语法二:数字索引迭代

<c:forEach begin="start" end="finish" [var="name"] [varStatus="statusName"] [step="step"]>    标签体</c:forEach>

items:用于指定被循环遍历的对象,多用于数组与集合类。该属性值可以是数组,集合类,字符串和枚举类型,并且可以通过EL指定。

var:用于指定循环体的变量名,该变量用于存储items指定的对象的成员。

varStatus:用于指定循环的状态变量,该属性还有四个状态属性


如果要在循环的过程中得到循环计数,可以应用varStatus属性的状态属性count获得

 <body>    <%        List<String> list=new ArrayList<String>();        list.add("Java");        list.add("C++");        list.add("Python");        list.add("C");        request.setAttribute("list", list);     %>      <h2>遍历集合中全部的元素</h2>      <c:forEach items="${requestScope.list}" var="keyword" varStatus="id">        ${id.index}&nbsp;${keyword}<br>      </c:forEach>      <h2>遍历集合中特定的元素</h2>      <c:forEach items="${requestScope.list}" var="keyword" varStatus="id" begin="1" end="3">        ${id.index}&nbsp;${keyword}<br>      </c:forEach>  </body>

可以不指定items

  <body>      <h2>10以内奇数</h2>      <c:forEach var="keyword" begin="1" end="10" step="2">        ${keyword}<br>      </c:forEach>  </body>

迭代标签

该标签可以用指定的分隔符将一个字符串分割开,根据分割的数量确定循环的次数

语法:

<c:forTokens item="String" delims="char" [var="name"] [begin="start"] [end="end"] [step="len"] [varStatus="statusName"]>    标签体</c:forTokens>

items:String对象,该字符串通常由指定的分割符隔开
delims:用于指定分割字符串的分割符,可以同时有多个字符
var:指定变量名,该变量保存了分割后的字符串

  <body>      <c:set var="lang" value="JavaWeb:aaa,bbb,Java:ccc,ddd"></c:set>      <h2>c:forTokens分割字符串</h2>      <c:forTokens items="${lang}" delims=":," var="keyword">        ${keyword}<br>      </c:forTokens></body>

0 0
原创粉丝点击