Jsp---JSTL

一.简介:

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

二.JSTL组成:

JSTL –Core 核心标签库。 - 这是本部分的重点
JSTL – I18N - 国际化标签库。Internationalization-   I18N
JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)
JSTL Functions – 函数库。
lJSTL- XML ,对XML的操作(SQL标签)
三、JSTL核心标签库:c标签
l 使用 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 .

<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(‘’..)


1.JSTL标签-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 或不存在 时才会输出默认值。
excapeXml 属性:默认值为 true , 用于将 html 等标签转换成 & lt ; 等转换元素,示例:
<%
      String name="<font color='red'>Red</font>";
       pageContext.setAttribute (" name",name );
   %>
< c:out value=“${name}” escapeXml = false ></ c:out > 不对 xml html 进行转换,直接输出,这样就会在页面上看到红色的 Red 字符,因为浏览器会解析 html 数据。
2. < c:set />- 声明一个变量

l < 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" class= " cn.itcast.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" class= " java.util.HashMap " scope= "request" ></ jsp:useBean >
  < c:set target="${ requestScope.map }"property= "name" value= "Jack" />
  < c:out value="${requestScope.map.name}"/>
3.JSTL if 标签
< c:if /> 用于实现 Java 语言中的 if 语句。它的语法如下:
< c:if  test=“ 逻辑表达式”   var =“ 代表逻辑表达式值的命名变量”  scope=../>
示例:
< c:if  test=“${name !=‘ Jack’}”>
       name 的值为 Jack 时输出此行信息l </ c:if >
上面的判断等价于下面的代码片段:
if( pageContext.getAttribute (“name”)!=null &&!..equals(“Jack”)){
out.println (“…..”);
}
此标签经常使用,要掌握。
4. 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 之后。
5. 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

varStatus 属性,用于设置一个 javax.servlet.jsp.jstl.core.LoopTagStatus 类型的命名变量:
它包含以下信息:
count–  当前元素在集合中的序号,从 1 开始。
index - 记录当前元素的下标,从 0 开始。
first - 判断是否是第一个元素。
Last  -判断是否是最后一个元素。
 
6. forTokens 遍历一个字符串:
< c:forTokens var = "v"  items= " a,b,c,d,e,f " delims = "," >
   < c:out  value="${v}"></ c:out >< br />
</ c:forTokens >
,( 逗号 ) 对字符串 a,b,c,d,e,f 进行分隔。
7. URL 相关的标签:
< 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 >

属性

类型

说明

value

Striing

资源地址信息

var

String

变量名

context

String

可以指定上下文根,默认为本项目的上下方根,也可以指定为其他项目的项目名。

scope

同上

使用c:url时,如果只使用value属性,则是直接将信息输出。如果声明了var属性,将不会输出结果而是将url地址信息的结果保存到此变量中。


下面通过jsp页面来演示JSTL核心标签库
[html]  view plain  copy
  1. <span style="font-size:12px;"><%@page import="cn.hncu.elWeb.domain.User"%>  
  2. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.       
  8.       
  9.     <title>演示JSTL技术</title>  
  10.       </head>  
  11.     
  12.   <body>  
  13.          <h1>JSTL技术演示</h1>  
  14.          <%  
  15.             request.setAttribute("aa", "goggo");  
  16.             List<Object> list=new ArrayList<Object>();  
  17.             list.add(new User("wja",20));  
  18.             list.add("aaaaaaa");  
  19.             list.add(2000);  
  20.             list.add(-300.9);  
  21.             request.setAttribute("list", list);  
  22.           %>  
  23.           ${list}  
  24.           <table border="1px"">  
  25.           <c:forEach items="${list}" var="la">  
  26.                 <tr><td>${la}</td></tr>  
  27.                 </c:forEach>  
  28.           </table>  
  29.             <br/>  
  30.     <!-- c:out -->  
  31.     <%  
  32.         pageContext.setAttribute("name", "Jack");  
  33.         pageContext.setAttribute("name2", "<font color='red'>JACK</font>");  
  34.      %>  
  35.         ${name }<br/>  
  36.          <c:out value="${name}" ></c:out> <br/>  
  37.         ${name2}<br/>  
  38.          <c:out value="${name2}" escapeXml="false" ></c:out><!--  escapeXml参数是看是否解析c:out -->  
  39.         <br/>  
  40.      <!-- c:if -->  
  41.      <c:if test="${list[0].age>20}" var="boo" scope="session">  
  42.         <table border="1px">  
  43.             <c:forEach items="${list }" var="l">  
  44.                 <tr/><td/>${l }  
  45.             </c:forEach>  
  46.         </table>  
  47.      </c:if>  
  48.        
  49.      <c:if test="${!boo}">  
  50.         <h2>输出表格错误</h2>  
  51.      </c:if>  
  52.     相当于${list[0].age>20?"yes":"no" }<br/>  
  53.     <!-- forEach -->  
  54.     <!-- forEach的遍历功能 -->  
  55.     <%  
  56.         HashMap<String,Object> map=new HashMap<String,Object>();  
  57.         map.put("name", "Rose");  
  58.         map.put("age",55);  
  59.         map.put("tel", "13566668888");  
  60.         pageContext.setAttribute("m", map);  
  61.         String str[]={"aaa","bbb","cccc","dddddddd"};  
  62.         pageContext.setAttribute("str", str);  
  63.      %>  
  64.        
  65.     <c:forEach items="${m }" var="im">  
  66.         ${im.key}=${im.value }  
  67.     </c:forEach><br/>  
  68.     
  69.     <c:forEach items="${str}" var="s">  
  70.         ${s}  
  71.     </c:forEach><br/>  
  72.      <h3>看看ForEach标签中的varStatus属性---idx.index是元素的下标(从0开始),idx.count是元素的序号(从1开始计数)</h3>  
  73.      <c:forEach items="${str }" var="s" varStatus="index">  
  74.          ${s }------index=${index.index}  count=${index.count }<br/>  
  75.      </c:forEach>  
  76.       <!-- forEach的普通循环功能 -->  
  77.       <c:forEach begin="20" end="40" step="2" varStatus="idx" var="x" ><!-- 只能是递增,而且step不能为负数 -->  
  78.       ${x }  index=${idx.index} --${idx.count} <br/>  
  79.         
  80.       </c:forEach>  
  81.       ${str[0]}<br/>  
  82.         
  83.        <!-- c:set 设置属性,默认作用域:pageScope-->  
  84.        <c:set var="aa" value="abc123"></c:set>  
  85.        <c:set var="aa" value="bbbbbbb23123" scope="session"> </c:set>  
  86.       <%--  <c:set var="${requestScope.aa }" value="bbbbbbb23123" scope="request"> </c:set>var的值不能用EL表达式<br/> --%>  
  87.        ${aa },,,${sessionScope.aa }<br/>  
  88.          
  89.         <!-- c:remove 删除属性,默认作用域:pageScope,request等4个容器中的都会被删除-->  
  90.      <!-- 下面这一句,若没有scope属性,则前面的所有"aa"都会被清除。写了下面的scope,则只清除指定的request中的那个"aa"属性 -->  
  91.     <%-- <c:remove var="aa" scope="request"/> --%>  
  92.       ${aa },,${requestScope.aa },,${sessionScope.aa }<br/>  
  93.         
  94.        <br/>  
  95.      <!-- c:choose,c:when,c:otherwise  类似Java中的switch-case-default且每项自动带break -->  
  96.      <c:set var="score" value="8"></c:set>  
  97.      <c:choose >  
  98.         <c:when test="${score>90}">优秀</c:when>  
  99.         <c:when test="${score>80}">良好</c:when>  
  100.         <c:when test="${score>60}">及格</c:when>  
  101.         <c:otherwise>不及格</c:otherwise>  
  102.      </c:choose>  
  103.        
  104.      <br/>  
  105.      <!-- c:forTokens 用分隔符去拆分字符串-->  
  106.      <c:forTokens items="aa,vv,sdasd,sfasfafggd,eeeee" delims="," var="str">  
  107.      ${str}  
  108.      </c:forTokens><hr/>  
  109.      ${str[0]}<br/><!-- >被覆盖了,读不出去 -->    
  110.       <!-- c:import 导入资源,相当于动态包含,共享同一个request-->  
  111.      <c:import url="/jsps/aa.jsp"></c:import>  
  112.       <!-- c:redirect 重定向,相当于response.sendRedirect(...) -->  
  113.      <%--   
  114.          <c:redirect url="/jsps/aa.jsp"></c:redirect>  
  115.       --%>  
  116.      <!-- c:redirect 重定向,相当于response.sendRedirect(...) -->  
  117.       <h2>以下演示JSTL中的国际化--I18N </h2>  
  118.       <a href="<c:url value='/jsps/i18n.jsp'/>">I18N演示</a>  
  119.      </body>  
  120.        
  121.        
  122. </html>  
  123. </span>  

四、I18N标签:

  • 简介:
l 18N Internationalization 的简称,因为 I N 之间有 18 个字符所以叫 i18n
java 的核心库当中,提供了对 i18n 的支持, java.util.Locale 类是最重要的 i18n 相关类。
首先介绍一下 Locale 类:
获取 Locale 类的实例,有以下几种方式:
Locale  ch  = new Locale(“ zh ”,”CN”);
Locale  ch  = Locale.CHINA ;
或获取默认值:
Locale  zh  = Locale.getDefault ();
然后可以通过以下方法输出语言和国家:
getLanguage
getCountry
  • I18NResourceBundle类:
Java.util.ResourceBundle 类,用于管理和 Locale 相关的资源的功能。
ResourceBundle 类提供了两个方法,用于创建 ResourceBundle 对像的静态工厂方法:
getBundle (String baseName )— 通过此方法获取资源文件的名称
getBundle (String baseName,Locale  locale);
参数中的 baseName 是资源文件的名称,资源文件通常以 properties 为扩展名。
资源文件的命名规则如下:
默认资源文件: resources.properties
英文资源文件: resources_ en_US .properties
中文资源文件: resources_ zh_CN .properties
  • ResourceBundle示例:
步骤如下:
1 、在 classpath 目录下建立一个资源文件为 message.properties
2 、内容如下: name=Jack
3 、书写一个 main 方法的类,并输入以下代码:
4 ResourceBundle  b = ResourceBundle. getBundle ("message");
Stringname =  b.getString ("name");
System. err .println (name);
此时你看到的输出是 Jack.
5 、在 classpath 目录下,再建立一个文件 message_zh_CN.properties
并输入以下内容: name= 杰克(注意转码)
6 、重新执行第 4 步的代码 , 你将会看到输出的结果变成了:杰克。
7 、这是因为它使用本地语言查找相关的资源文件,如果找不到就使用默认的,如果找到就使用本地的资源文件。
在网页上的使用(要导入<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>标签)
[html]  view plain  copy
  1. <%@page import="cn.hncu.elWeb.domain.User"%>  
  2. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  4. <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html>  
  7.   <head>  
  8.      <fmt:setLocale value="zh_CN"/>  
  9.      <fmt:setBundle basename="msg"/>  
  10.      <!-- 真正搞国际,应该要把设置Locale和Bundle的代码放在head标签中,页面只负责显示。 -->  
  11.   </head>  
  12.     
  13.   <body>  
  14.              张三,<fmt:message key="welcome"/><br/>  
  15.      <fmt:message key="time"/>fddfdfdfdfdfdf  
  16.        
  17.        
  18.      <hr/>  
  19.      <!-- 相比上一版本,把国家语种用参数进行传递 -->  
  20.      <a href="?loc=en_US">English</a>  
  21.      <a href="?loc=zh_CN">中文</a>  
  22.      <fmt:setLocale value="${param.loc}"/>  
  23.      <fmt:setBundle basename="msg"/>  
  24.            张三,<fmt:message key="welcome"/><br/>  
  25.      <fmt:message key="time"/>fddfdfdfdfdfdf  
  26.        
  27.        
  28.      <hr/>  
  29.      <!-- 再演示一下多个资源的情况,第二个资源及以后都必须取别名(变量名)。前面(第一个)没取变量名的那个叫默认资源  -->  
  30.      <fmt:setBundle basename="a" var="aaa" scope="session"/>  
  31.      <!-- 如果多个页面都要使用,那么得把作用域设成session -->        
  32.              
  33.            张三,<fmt:message key="welcome"/><br/>  
  34.      <fmt:message key="time"/>fd8888dfdf  
  35.      <br/>  
  36.      <!-- 如果是从非默认资源中读取,那么得指定资源名称即aaa。如果没有指定名称,那么就是从默认的读取 -->  
  37.      <fmt:message key="address" bundle="${aaa}"></fmt:message>  
  38.      <br/>  
  39.      <a href="<c:url value='/jsps/c.jsp'/>">到网站的其它页面去看看</a>  
  40.   </body>  
  41.     
  42.     
  43. </html>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值