你的位置:首页 > Java教程

[Java教程]Java标准标签库(JSTL)


JSTL(Java Standard Tag Library) –Java标准标签库

JSTL组成:


JSTL –Core 核心标签库。 - 这是本部分的重点
JSTL – I18N - 国际化标签库。Internationalization-    I18N
JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。
JSTL - Functions – 函数库。
JSTL -
使用JSTL核心标签:
如果你的Web项目是基于JavaEE2.5或以上的。可以在你项目的任意页面上通过<%@ taglib 指令使用JSTL的核心标签库。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
uri是引用标签库的资源定位符,并不代表一个实际的地址。
Prefix是自定义的前缀。
如果你的项目是JavaEE2.5以下的项目,必须在在你项目中的lib目录下,存在以下两个jar文件为:
Jstl.jar、standard.jar


具体使用:


JSTL-Core一共包含以下几个子标签: 

<c:out>  ${name} 输出标签
<c:set>   pageContext.setAttirbute(key,value,scope); 声明标签
c:remove 删除某个范畴内的数据
<c:if> 判断c:else,c:elsfif
<c:choose><c:when><c:otherwise> 判断分枝c:if,c:else if c:
<c:forEach> 遍历
<c:forTokens> 分隔
<c:import> 导入其他资源,相当于动态包含共享同一个request
<c:url>  - 重写url
<c:redirect> 重定向  response.sendRedirect(‘’..) 
下面对具体的操作进行解释与演示:

<c:out>    


<c:out  value=…/>用于在页面上输出结果。
<c:out value=“${requestScope.name}”/> -将request中的name值输出
<c:out value=“${param.username}”/> - 用于将参数输出到页面上。
<c:out value=“${name}” default=“hello”/>从page到application开始查找,如果没有找到,就显示默认值hello.
另一种设置默认值的方式:

<c:out value=“${name}”>			Default-value-默认值。		</c:out>


只有当要求的信息为null或不存在时才会输出默认值。
excape 

<%   String name="<font color='red'>Red</font>";   pageContext.setAttribute("name",name); %><c:out value=“${name}” escape

 

<span ><%  		pageContext.setAttribute("name", "jack_P");  		request.setAttribute("name", "jack_R");  		request.setAttribute("name2", "<font color='red'>你好,中国</font>");  		 %>  		 ${name } //从小范围到大开始查找<br/>  		<c:out value="${name }"></c:out> -------输出标签  		 <hr/></span>
<span >   <span >		</span>  <!-- c:out标签一定会让所显示的内容原样输出,避开html的解析 -->   <span >		</span> ${name2 }<br/>    可以解析html语言<br/>   <span >		</span><c:out value="${name2 }"></c:out> -------不可以解析html语言,原样输出   <span >		</span></span>

<c:set>


<c:set/>标签的作用如下:

为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>
<c:set var=“name” value=“${param.name}”/>直接从参数中取出数据给name赋值。
如果变量为JavaBean则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/> 
示例:
<jsp:useBean id="person" ></jsp:useBean>
  <c:set target="${pageScope.person}" property="name" value="Jack"/>
  <c:set target="${pageScope.person}" property="age" value="99"/>
如果变量为Map则,给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例:
<jsp:useBean id="map" scope="request"></jsp:useBean>
  <c:set target="${requestScope.map}" property="name" value="Jack"/>
  <c:out value="${requestScope.map.name}"/>
为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>
<c:set var=“name” value=“${param.name}”/>直接从参数中取出数据给name赋值。
如果变量为JavaBean则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/> 
示例:
<jsp:useBean id="person" ></jsp:useBean>
  <c:set target="${pageScope.person}" property="name" value="Jack"/>
  <c:set target="${pageScope.person}" property="age" value="99"/>
如果变量为Map则,给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例:
<jsp:useBean id="map" scope="request"></jsp:useBean>
  <c:set target="${requestScope.map}" property="name" value="Jack"/>
  <c:out value="${requestScope.map.name}"/>

	 <span ><hr/>  		 <!-- c:set标签可以设置变量的值 scope默认放在page容器当中-->  		 <c:set var="a" value="jack中国"></c:set>  		 ${a } <br/>  		 <!-- 指定范围以后,需要从指定范围去取,不然会自动从小到大开始查找 -->  		 <c:set var="a" value="jack中国2" scope="request" ></c:set>  		 ${requestScope.a } <br/>  		 <hr/></span>  		 

<c:if>


<c:if/>用于实现Java语言中的if语句。它的语法如下:
<c:if test=“逻辑表达式”   var=“代表逻辑表达式值的命名变量”  scope=../>
示例:
<c:if test=“${name!=‘Jack’}”>
       当name的值为Jack时输出此行信息
</c:if>
上面的判断等价于下面的代码片段:
if(pageContext.getAttribute(“name”)!=null && !..equals(“Jack”)){
out.println(“…..”);
}

 <hr/>  		 <c:set var="age" value="20">  		 </c:set>  		 <c:if test="${age>25 }" var="aa">  		 	<h2>比25大咯!!</h2>  		 </c:if>  		 <c:if test="${!aa }">  		 	<h3>比25小咯!!</h3>  		 </c:if>  		 <hr/>

 

choose,when,otherwise


这几个标签共同使用可以实现Java中的if…else语句的功能。
<c:choose>
  <c:when test="${empty param.name}">
  用户没有输入name参数
  </c:when>
  <c:when test="${param.name=='Admin'}">
  ${param.name}是管理员
  </c:when>
  <c:otherwise>
  用户是:${param.name}
  </c:otherwise>
  </c:choose>
使用c:when必须遵循以下语法规则:
<c:when/>和<c:otherwise/>不能单独使用,它必须位于<c:choose内。
<c:otherwise/>必须位于c:when之后。 

<span > <hr/>  		 <c:set var="age" value="-18"></c:set>  		 <c:choose>  		 	<c:when test="${age>20 }">  		 		大于20!!  		 	</c:when>  		 	<c:when test="${age>10 }">  		 		大于10!!  		 	</c:when>  		 	<c:when test="${age<10 }&&${age>0 }">  		 		小于于10!!  		 	</c:when>  		 	<c:otherwise>  		 		这就是属于其他的了 。。。  		 	</c:otherwise>  		 </c:choose>  		 <hr/></span>

 

<c:remove>移除某个标签

 

 <hr/>  		 <!-- 移除属性 c:remove 默认是从pageScope中移除-->  		 <c:remove var="a" scope="request"/>  		 aaa ${requestScope.a }  		 <hr/>

 

<c:ForEach>迭代标签


forEach用于遍历集合中的对像。
基本语法:
<c:forEach var=“迭代变量” item=“${集合名称}” varStatus=“迭代下标变量”>
       迭代部分
</c:forEach>
forEach的begin(开始索引)、end(结束索引)、step(步长)属性:
<c:forEach begin=0 end=10 step=“2”>…</c:forEach>将输出0,2,4,6,810 

 <hr/>  		 <!-- c:forEach 增强for循环 -->  		 <!-- 普通版本 -->  		 <c:forEach begin="0" end="10" var="x" step="2">  		 	${x } <br/>  		 </c:forEach>  		  <hr/>  		 <%  		 String[] a={"小王","晓明	","小杨","新哥"};  		 request.setAttribute("a", a);  		 %>  		 <c:forEach items="${requestScope.a }" var="i">  		 	${i }<br/> <!-- 一定要注意取值的范围 -->  		 </c:forEach>  		 <hr/>
  		<!-- 演示list用jstl -->  		<%  		List<String> list=new ArrayList<String>();  		list.add("123a");  		list.add("123d");  		list.add("123b");  		list.add("123c");  		list.add("123e");  		list.add("大新哥");  		session.setAttribute("list", list);//后面用el表达式取得是参数  		  		 %>  		 <c:forEach items="${sessionScope.list }" var="li">  		 	${li } <br/>  		 </c:forEach>  		 <hr/>
 		  		  		 <!-- 采用map的方式演示jstl -->  		 <%  		 //演示map采用el表达式  		 Map<String,Object> map=new HashMap<String,Object>();//存储以hash值存储  		 map.put("aa", 123);  		 map.put("cc", 567);  		 map.put("bb", 345);  		 map.put("dd", 789);  		 application.setAttribute("map", map);  		 %>  		 <c:forEach items="${ applicationScope.map}" var="mm" varStatus="idx">  		 	${mm.key } ${mm.value }<br/> ${idx.index } ${idx.count }  		 </c:forEach>  		 <hr/>  		 <hr/>

<c:forTokens>对字符进行分割,以某某分割

 

<span > <!-- 分割字符串,相当于split() -->  		 <c:forTokens items="aa,bb,cc,dd,ee,ff" delims="," var="x">  		 	${x }  		 </c:forTokens>  		 <hr/></span>

其他标签


<c:import/>包含其他web资源,功能类似与<jsp:include/>(动态包含)。
<c:import url=“web资源”/>
<c:url/>按特定的方式重写URL。
<c:url value=“/aaa.jsp”/>总是以/开头,如果只使用value属性为直接使用或输出。
<c:url value=“/…” var=“someVar” scope=“…”/>也可以通过这样的方式将重写的url放到某个范围中,然后再取出来使用。 
<c:redirect/>负责重定向。
<c:redirect url=“重定向到的资源”/>
在使用<c:redirect时可以带更多的参数:
<c:redirect url=“/…”>
     <c:param name=“someName” value=“someValue”/>
</c:redirect> 

<span > <!-- c:url -->  		 <a href="<c:url value="/Servlet"></c:url>">调转到土豪界面</a>  		  <%--  		 <c:redirect url="/Servlet"></c:redirect>  		--%>  		 <a href="<c:url value='/jsps/jstldemo2.jsp'></c:url>">利用css+jstl技术进行演示</a>  		 <hr/></span>

前两天在一群里看见有人推荐一个app叫问啊,就可以发题答题那种的,感觉就跟uber滴滴打车似的,一般这种软件一上来就砸钱给红包啥的,哥之前刷过uber的单有经验!试验了几次应该可以刷,把注册红包和之前领的红包钱套现,目前我提了五十多,目测还能刷更多。ps,但是尽量要问技术相关的问题,不然容易被封。

  有技术的可以自己试,不会的可以q我:QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!