jstl

JSTL 简介

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

SUN公司制定的一套标准标签库的规范。JSTL标签库,是由一些Java类组成的。

 

JSTL组成:

JSTL –Core 核心标签库。 - 这是本部分的重点

JSTL – I18N - 国际化标签库。Internationalization-    I18N

JSTL - Functions – 函数库。

在jstl-1.2.jar包的META-INF目录中,保存着各种tld文件的版本。请查看。

 

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的tld文件,用于描述jstl标签的属性、名称、资源等信息。程序就是通过这个tld文件找到相关java类以

供运行的。然后再在任意的JSP页面通过指令导入jstl.

Jar文件的说明:

Jstl-1.2.jar – 包含在jstl规范中定义的接口和类的class文件,在META-INF目录下包含了所有可用的tld文件。

可以通过以下步骤修改引用jstl的方式:找到META-INF目录中的c.tld文件,将c.tld放到WEB-INF/tld/目录下。

在web.xml中配置以下信息:

  <jsp-config>
  <taglib>
  <taglib-uri>/c.tld</taglib-uri>
  <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
  </taglib>
  </jsp-config>

然后在页面上如下使用:<%@ taglib uri=“/c.tld” prefix=“c”%>

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ page import="cn.hncu.domain.User"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL技术演示1</title>
</head>

<body>
	<h1>JSTL技术演示1</h1>
	<%
		pageContext.setAttribute("name", "hncuJack");
	%>
	${fn:startsWith(name,"hncu")},${fn:length(name)+10}
	<br /> 0. 通过c.tld文件了解forEach标签的一个用法
	<br>
	<c:forEach begin="1" end="20" step="2" var="i">
     ${i} &nbsp;
   </c:forEach>

	<br> 1. c:out标签
	<br>
	<%
		pageContext.setAttribute("age", "15");
		pageContext.setAttribute("str", "<font color='red'>湖南城市</font>");
	%>
	<c:out value="abc123"></c:out>
	,
	<c:out value="${name}"></c:out>
	, ${name}
	<br>

	<!-- c:out与el表达式输出 不同之处 -->
	<c:out value="${age}" default="20"></c:out>
	&nbsp;&nbsp; ${age}
	<br>
	<c:out value="${str}" escapeXml="true"></c:out>
	&nbsp;&nbsp; ${str}
	<br>

	<br> 2. c:set标签
	<br>
	<!-- 2.1 给String类型的变量设置值 -->

	<c:set var="sum" value="200" scope="page"></c:set>
	${sum},
	<br>
	<c:out value="${sum+100}" default="-1"></c:out>
	<br>

	<!-- 2.2 给JavaBean类型的变量设置值 -->
	<jsp:useBean id="u" class="cn.hncu.domain.User"></jsp:useBean>
	<c:set property="name" value="jack111" target="${u}"></c:set>
	<c:set property="age" value="23" target="${u}"></c:set>
	<c:out escapeXml="true" value="${u}"></c:out>
	<br>

	<br> 3. c:remove标签
	<br>
	<c:remove var="sum" scope="page"></c:remove>
	<c:out value="${sum}" default="-1"></c:out>

	<br> 4. c:if标签
	<br>
	<%
		User user = new User();
		user.setName("Jack");
	    pageContext.setAttribute("user", user, pageContext.SESSION_SCOPE);
	%>
	<c:if test="${empty sessionScope.user}" scope="session" var="boo">
		<form action="">
			Name:<input type="text" name="name"> <br> Pwd:<input
				type="password" name="pwd"> <br> <input type="submit"
				value="登录">
		</form>
	</c:if>
	<c:if test="${!empty sessionScope.user}">
	     欢迎你,${user.name}<br>
	</c:if>

	<c:set var="str" value="欢迎你2,${user.name}"></c:set>
	${!empty user ? str : "" }
	<br> ${!empty user ? user.name : "" }
	<br>

	<br> 5. c:choose, c:when, c:otherwise 标签,, 相当于java中的if,else if,
	else
	<br>
	<c:set var="score" value="95" scope="session"></c:set>
	<c:choose>
	   <c:when test="${score>=90}"> 优秀 </c:when>
       <c:when test="${score>=80}"> 良好 </c:when>
       <c:when test="${score>=70}"> 中等 </c:when>
       <c:when test="${score>=60}"> 及格 </c:when>
       <c:otherwise> 不及格 </c:otherwise>
	</c:choose>

</body>
</html>
<%@ page language="java" import="java.util.*,cn.hncu.domain.*"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page import="cn.hncu.domain.USER2"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL技术演示2</title>
</head>

<body>
	<h1>JSTL技术演示2</h1>
	<br> 6. c:forEach标签
	<br> 一、普通for循环的功能
	<br>
	<c:forEach begin="1" end="10" var="i" step="1">
         ${i}:节日快乐!<br>s
    </c:forEach>
	<br> 二、增强for循环的功能
	<br> 1)遍历数组
	<br>
	<%
		String strs[] = { "aa", "中语言", "bb", "cc" };
		pageContext.setAttribute("strs", strs);
	%>
	<c:forEach items="${strs}" var="str" varStatus="idx">
	  序号${idx.index}: ${str} , 计数${idx.count} <br>
	</c:forEach>

	2)遍历List
	<br>
	<%
		List<String> list = new ArrayList<String>();
		list.add("aaaa");
		list.add("bbbb");
		list.add("cccc");
		list.add("dddd");
		pageContext.setAttribute("list", list);
	%>
	<c:forEach items="${list}" var="s">
       ${s} &nbsp;&nbsp;
   </c:forEach>

	3)遍历Map
	<br>
	<%
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "张三");
		map.put("age", "23");
		map.put("addr", "安置小区");
		pageContext.setAttribute("map", map);
	%>
	<c:forEach items="${map}" var="en">
       ${en} ==> ${en.key} : ${en.value} <br>
	</c:forEach>

	4)遍历元素值为JavaBean的集合,如List &lt;User&gt;
	<br>
	<%
		List<USER2> users = new ArrayList<USER2>();
		users.add(new USER2("Alice", 21));
		users.add(new USER2("Bob", 22));
		users.add(new USER2("张三", 20));
		users.add(new USER2("小李", 11));
		pageContext.setAttribute("users", users);
	%>
	<c:forEach items="${users}" var="user">
		<c:out value="${user}"></c:out>
		<c:out value="${user.name}"></c:out> , ${user.age} <br>
	</c:forEach>

	<hr>
	<br> 7. c:forTokens标签: 字符串拆分
	<br>
	<c:set var="info" value="a,b,c,d,1,w2,q,pp" />
	<c:forTokens items="${info}" delims="," var="x">
     ${x} &nbsp;
  </c:forTokens>

	<br>
	<br> 8. c:import标签: 动态导入
	<br>
	<c:import url="/jsps/foot.jsp"></c:import>

	<br> 9. c:url标签: 重写url, 以后开发时的后台地址都用这种方式写,非常保险,也简单(斜杠代表项目根目录)!
	<br>
	<form action=" <c:url value='/LoginServlet'/> ">
		Name:<input type="text" name="name"> <br> Pwd:<input
			type="password" name="pwd"> <br> <input type="submit"
			value="登录">
	</form>
	<br>

	<br> 10. c:redirect标签: 重定向。 该标签有一个坑: url地址不能用c:url
	<br>
	<%-- 下面这一句如果放开,则演示时当前页面停不住,直接重定向走了!
      <c:redirect url="/jsps/jstl1.jsp" />
      
          反模式:
      <c:redirect url="<c:url value='/jsps/jstl1.jsp' /> " />
    --%>
    
    <br>
    
</body>
</html>

<%@ page language="java" import="java.util.*,cn.hncu.domain.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL技术演示3</title>
  </head>
  
  <body>
    <h1>国际化演示1: 写死的--过渡版</h1>
     <!-- 1 设置本地信息(指定哪个国家的什么语言) -->
     <%--
      <fmt:setLocale value="en-US"/>
      <fmt:setLocale value="zh-CN"/>
     --%>
    <fmt:setLocale value="jp-JP"/>
     <!-- 2 指定资源文件名 -->
     <fmt:setBundle basename="msg" scope="session"/>
     
      <!-- 3 显示信息 -->
      <fmt:message key="welcome"></fmt:message>,Jack<br>
      <fmt:message key="time" /> 2018.9.10 20:34 <br>
    <br> 
  </body>
</html>
<%@ page language="java" import="java.util.*,cn.hncu.domain.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL技术演示4</title>
  </head>
  
  <body>
    <h1>国际化演示2: 写活的--正式版</h1>
     <a href="?bd=en_US">English</a>
    <a href="?bd=zh_CN">中文</a> <br>
    
    <!-- 1 设置本地信息(指定哪个国家的什么语言) -->
    <fmt:setLocale value="${param.bd}"/>
    
    <!-- 2 指定资源文件名, 设置session后其它页面才能访问该bundle -->
    <fmt:setBundle basename="msg" scope="session"/>
    <!-- ※※指定第2个及之后的资源文件名,含路径的资源名。第2个及之后的资源一定要指定别名 -->
    <fmt:setBundle basename="cn.resources.a" var="bbb" scope="session"/>
    
      <!-- 3 显示信息 -->
    <fmt:message key="welcome"></fmt:message>,Jack<br>
    <fmt:message key="time" /> 2018.9.10 20:34 <br>
    <!-- ※※指定第2个及之后资源时,读取信息, 也要指定别名 -->
    <fmt:message  key="address" bundle="${bbb}"></fmt:message>
    
    <br> 
     <a href="a.jsp">访问另一个页面</a>
     
  </body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值