JSP~~JSTL~~核心标签库~~out/set/remove标签的使用

旧街凉风 提交于 2020-01-29 12:46:41

set标签

set 标签是使用来在某个范围(request、session 或者 application)内设值,或者设置某个对象的属性值。

set 标签的使用格式如下:

(1) 使用 value 属性在一个特定的范围内指定某个变量的值,其使用格式如下:

<c:set var=”varName” value=”varValue” [scope=”page|request|session|application”] />

(2) 当使用 value 属性在一个特定范围内指定某个变量的值时,也可以包括一个体,它的作用和out 标签体的作用一样,即 value 指定的值为 null 时,默认使用体中指定的值,使用格式如下:

<c:set var=”varName” value=” Value” [scope=”page|request|session|application”] >
default value
</c:set>

(3) 设置某一个特定对象属性的使用格式如下:

<c:set property=”propertyName” target=”target” value=”value” />

(4)在设置某个特定对象的一个属性时,也可以有一个体,也指定默认值,使用格式如下:

<c:set property=”propertyName” target=”target” value=”value” >
default value
</c:set>

该标签中的各属性说明如下:

value:该属性指定变量或者对象中某个属性的值,并且可以是一个表达式。

var:变量名称,value 属性指定的值就保存在这个变量中。

scope:设定变量的有效范围,如果不设置,则默认为 page。

target:设置属性的一个对象,它必须是 JavaBean 或者 java.util.Map 对象。

property:设置对象中的一个属性。

set标签案例1:简单运用案例

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head><title>set标签的使用</title></head>
<body>
    <c:set var="info" value="学习JSP/Servlet开发技术" scope="request"/>
    <h3>属性内容:${info}</h3>
</body>
</html>

运行结果:

属性内容:学习JSP/servlet开发技术

out标签

核心标签库中最为基本的标签就是<c:out>。它可以在页面中显示一个字符串或者一个 EL 表达式的值。它的功能与 JSP 传统的<%=表达式%>相类似。out 标签的使用格式如下:

<c:out value=”object” [escapeXml=”true|false”] />

这表示当 value 属性指定的 object 值为 null 时,就会显示体中指定的值(也就是 default value),体中也可以是 JSP 代码。

<c:out>中的各个属性:

value:可以指定一个字符串作为输出内容,也可以为 EL 表达式,例如${3+5}。

escapeXml:类型为 boolean,确定<、>、&、’、”等这些字符在结构的字符串中是否被转换成字符串实体代码,默认的是 true。

default value:可以是字符串,还是一个表达式(EL 表达式或者<%=表达式%>的 JSP 表达式)。

如果属性指定的表达式或者对象值为 null 时,那么将输出这个 default value 部分的值。

out标签案例1:结合escapeXml

<%@ page contentType="text/html;charset=GB2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>c:out使用示例</title>
</head>
<body>	
    <c:out value="使用示例,将直接输出<br>" />
    <c:out value="<br>转换为换行<br>"  escapeXml="false" />
    <c:out value="你现在会用c:out了吧?" />
</body>
</html>

运行结果:

使用示例,将直接输出<br> 
转换为换行
你现在会用c:out了吧? 

第一行,没有使用escapeXml,<br>直接输出

第二行:使用了escapeXml,<br>作为换行符输出。

out标签案例2:结合EL表达式

<%@ page contentType="text/html;charset=GBK" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h4><c:out value="核心标签库中的 out 标签的简单实例"/></h4>
<c:out value="${3+7}"/><br>
<c:out value="<p>有特殊字符</p>" /><br>
<c:out value="<p>有特殊字符</p>" escapeXml="false" />
<body>
</html>

运行结果:

核心标签库中的 out 标签的简单实例
10
<p>有特殊字符</p>

有特殊字符

程序说明:

<c:out value="核心标签库中的 out 标签的简单实例"/>直接输出 value 指定的字符串值。

<c:out value="${3+7}"/>中使用了 EL 表达式,输出 EL 表达式的计算结果 10。

<c:out value="<p>有特殊字符</p>" />

中因为默认 escapeXml 值为 true,即把<p>转换成字符实体代码,这段代码输出的 HTML 为:&lt;p&gt;有特殊字符&lt;/p&gt;

<c:out value="<p>有特殊字符</p>" escapeXml="false" />

设置了 escapeXml="false",所以输出的 HTML 为:<p>有特殊字符</p>

 

out标签案例3:通过pageContext赋值输出

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head><title>out标签的赋值</title></head>
<body>
<%
    pageContext.setAttribute("info","江苏省苏州市") ;
    pageContext.setAttribute("ref","云南省昆明市") ;
    pageContext.setAttribute("nullout",null) ;
%>
<h3>属性存在:<c:out value="${info}"/></h3>
<h3>属性不存在:<c:out value="${nullout}"  default="缺省内容!"/>~~输出的不存在内容</h3>
<h3>属性存在:<c:out value="${ref}" />~~输出的内容</h3>
</body>
</html>

运行结果是:

属性存在:江苏省苏州市
属性不存在:缺省内容!~~输出的不存在内容
属性存在:云南省昆明市~~输出的内容

set和out的结合使用

简单使用案例1:

<%@ page contentType="text/html;charset=GB2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>c:set/out使用示例</title>
</head>
<body>
    Spring框架是一个开源的企业应用开发框架,属于
    <c:set value="轻量级" var="winnerName" />
    <c:out value="${winnerName}" />
    的解决方案
</body>
</html>

运行结果:

Spring框架是一个开源的企业应用开发框架,属于 轻量级 的解决方案 

结合Scope的案例:

<%@ page contentType="text/html;charset=GBK" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>JSTL: -- Set 标签实例</title>
</head>
<body>
<h3>set 标签实例</h3>
<hr>
<!-- 通过 set 标签赋值 -->
    <c:set var="num1" scope="request" value="${3+5}"/>
    <c:set var="num2" scope="session" >${3+6}</c:set>
    <c:set var="num3" scope="session" >10</c:set>
<br>
<!-- 通过 out 标签输出变量值 -->
    num1 变量值为:<c:out value="${num1}" /><br>
    num2 变量值为:<c:out value="${num2}" /><br>
    num3 变量值为:<c:out value="${num3}" />
</body>
</html>

运行结果是:

set 标签实例

--------------------------------------------------------------------------------

num1 变量值为:8
num2 变量值为:9
num3 变量值为:10 

remove标签

remove 标签一般和 set 标签配套使用,两者是相对应的,remove 标签用于删除某个变量或者属性。使用格式如下:

<c:remove var=”varName” [scope=”page|request|session|application”] />

remove 标签中使用的各属性说明如下:

scope:设定这个需要删除的变量所在范围。

var:需要删除的变量或者对象属性的名称。

如果没有设置 scope 的属性,即采用默认值,那么就相当于调用 PageContext.removeAttribute(varName)方法;如果指定了这个变量所在的范围,那么系统会调用 PageContext.removeAttribute(varName,scope)方法。

remove案例1:简单使用

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head><title>remove标签的使用</title></head>
<body>
    <c:set var="info" value="hello world" scope="request"/>
    <c:remove var="info" scope="request"/>
    <h3>属性内容:${info}</h3>
</body>
</html>

运行结果:

属性内容:

remove案例2:对Scope范围值的作用

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<html>
<body>
<h2><c:out value="as "/>标签的使用</h2>
     <c:set scope="page" var="number"><c:out value="${4}"/></c:set>
<br>
    <c:set scope="request" var="number"><c:out value="${4}"/></c:set>
<br>
    <c:set scope="session" var="number"><c:out value="${4}"/></c:set>
    <p>各范围number变量的初始值</p>    							
    pageScope.number=<c:out value="${pageScope.number}" default="No data"/><br>
    requestScope.number=<c:out value="${requestScope.number}" default="No data"/><br>
    sessionScope.number=<c:out value="${sessionScope.number}" default="No data"/><br>
    <c:out value='执行<c:remove var="number"/>之后'/><br>
    <c:remove var="number"/>						
    pageScope.number=<c:out value="${pageScope.number}" default="No data"/><br>
    requestScope.number=<c:out value="${requestScope.number}" default="No data"/><br>
    sessionScope.number=<c:out value="${sessionScope.number}" default="No data"/><br>
 </body>
</html>

运行结果:

as 标签的使用

各范围number变量的初始值
pageScope.number=4
requestScope.number=4
sessionScope.number=4
执行<c:remove var="number"/>之后
pageScope.number=No data
requestScope.number=No data
sessionScope.number=No data

上面程序看出,remove可以将全部的赋值都删除。

那么如果只想删除部分范围的赋值,那应该怎么实现?

remove案例3:对Scope范围值部分删除

<%@ page contentType="text/html;charset=GBK" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
  <title>JSTL: -- Set 标签实例</title>
</head>
<body>
<h3>set 标签实例</h3><hr>
<!-- 通过 set 标签赋值 -->
<c:set var="num" scope="page" value="${3+5}"/> <!-- 此定义的变量只能在本页范围内有效 -->
<c:set var="num" scope="request" >${3+6}</c:set>
<c:set var="num" scope="session" >
<c:out value="10"/></c:set>
<!-- 变量显示 -->
<table border="1" width="50%">
  <tr> <td>pageScope.num</td><td><c:out value="${pageScope.num}" default="NULL" /></td> </tr>
  <tr><td>requestScope.num</td><td><c:out value="${requestScope.num}" default="NULL" /></td></tr>
  <tr><td>sessionScope.num</td><td><c:out value="${sessionScope.num}" default="NULL" /></td></tr>
</table>
<br>
<!-- 使用 remove 标签删除 page 范围中的 num 之后,变量值的显示 -->
<c:out value='<c:remove var="num" scope="page" />之后,各变量的值:'/>
<c:remove var="num" scope="page" />
<table border="1" width="50%">
  <tr> <td>pageScope.num</td><td><c:out value="${pageScope.num}" default="NULL" /></td>  </tr>
  <tr><td>requestScope.num</td><td><c:out value="${requestScope.num}" default="NULL" /></td></tr>
  <tr><td>sessionScope.num</td><td><c:out value="${sessionScope.num}" default="NULL" /></td></tr>
</table>
<br>
<!-- 使用 remove 标签删除 num 之后(scope 没有指定,即把所有范围内的变量删除,变量值的显示 -->
<c:out value='<c:remove var="num" />之后,各变量的值:'/>
<c:remove var="num" />
<table border="1" width="50%">
  <tr><td>pageScope.num</td><td><c:out value="${pageScope.num}" default="NULL" /></td></tr>
  <tr><td>requestScope.num</td><td><c:out value="${requestScope.num}" default="NULL" /></td></tr>
  <tr><td>sessionScope.num</td><td><c:out value="${sessionScope.num}" default="NULL" /></td></tr>
</table>
</body>
</html>

运行结果:

set 标签实例

--------------------------------------------------------------------------------
pageScope.num 8 
requestScope.num 9 
sessionScope.num 10 

<c:remove var="num" scope="page" />之后,各变量的值: 
pageScope.num NULL 
requestScope.num 9 
sessionScope.num 10 

<c:remove var="num" />之后,各变量的值: 
pageScope.num NULL 
requestScope.num NULL 
sessionScope.num NULL 

此程序中,首先在三种不同范围内指定了 num 变量的值。

<c:remove var="num" scope="page" />表示把在 page 范围内设定的 num 变量删除掉,而其他范围内的 num 变量则可以正常显示原有值。

<c:remove var="num" />表示把所有范围内的 num 变量全部删除。

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