1. 简介
    1. JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。
    1. 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。
    1. JSTL是为了简化JSP页面,让它更加简洁尽量不包含Java代码,只进行数据显示而开发出来的一个标签库,弥补了JSP的不足。
  2. 特点
    1. 在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用服务器之间的移植。
    1. 简化了JSP和WEB应用程序的开发。
      1. 自从有了JSTL我们不再需要写大量的Java代码,只需要小小的几个标签即可完成大的功能,例如查询数据库、显示数据、逻辑判断等等。
  3. 使用
    1. JSTL要与EL(expression language)表达式语言结合使用,标签库作用是流程控制,如果想实现某个功能要与表达式联合起来,比如是函数与控制语句一样。
    2. 使用JSTL需要引入jstl.jar和standard.jar两个包。并在JSP文件中声明标签,如下
      1. 标签代码()
    3. 核心库Core,主要通过举例来说明
      1. Servlet代码
        1. 	@Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
          //将字符串赋值给request对象
          request.setAttribute("hello", "hello world");
          request.setAttribute("welcome", "<font color='red'>世界欢迎你!</font>"); request.setAttribute("v1", 9);
          request.setAttribute("v2", 10); //类结构
          Group group=new Group();
          group.setName("09生科一班");
          //数组对象
          List users=new ArrayList();
          for(int i=0;i<10;i++)
          {
          User user=new User();
          user.setAge(10);
          user.setName("李龙生"+i);
          user.setGroup(group); users.add(user);
          }
          //设置到request中
          request.setAttribute("users", users); //Map
          Map map=new HashMap();
          map.put("k1", "k1");
          map.put("k2", "k2");
          map.put("k3", "k3");
          map.put("k4", "k4");
          request.setAttribute("map", map); request.setAttribute("strTokens", "1,2,3,4,5");
          request.getRequestDispatcher("/Jstl_Core.jsp").forward(request, response);
          }
      1. JSP代码
        1. <body>
          <h1>测试JSTL核心库</h1>
          <br>
          <li>采用c:out标签</li><br>
          hello使用:<c:out value="123"></c:out><br>
          hello使用:<c:out value ="hello"></c:out><br>
          hello使用:<c:out value="${hello }"></c:out><br>
          hello使用:<c:out value="${hello123 }" default="没有值"></c:out><br>
          hello使用:<c:out value="${hello123 }" >没有值</c:out><br>
          hello使用:<c:out value="${welcome}" ></c:out><br>
          hello使用(escapeXml):<c:out value="${welcome}" escapeXml="true"></c:out><br>
          hello使用:${welcome} //测试大于、小于符号
          <li>condition action sample</li>
          <c:if test="${v1 lt v2 }">
          v1小于v2
          </c:if> <p>
          <li>c:when,c:choose,c:otherwise标签</li>
          <c:choose>
          <c:when test="${v1 gt v2 }">
          v1大于v2 </c:when>
          <c:otherwise>
          v1小于v2
          </c:otherwise>
          </c:choose> <p>
          <li>演示循环控制标签forEach</li>
          <table border="1">
          <tr>
          <td>用户名:</td>
          <td>年龄:</td>
          <td>班级:</td>
          </tr>
          //选择标签
          <c:choose>
          //条件标签
          <c:when test="${empty users }">
          <tr>
          <td colspan="3">没有符合条件的数据!</td>
          </tr>
          </c:when>
          //否则执行这里面内容
          <c:otherwise>
          <c:forEach items="${users}" var="user">
          <tr>
          <td>${user.name }</td>
          <td>${user.age }</td>
          <td>${user.group.name }</td>
          </tr>
          </c:forEach>
          </c:otherwise>
          </c:choose>
          </table> //循环map里面的键值对
          <li>Map循环</li>
          <c:forEach items="${map }" var="entry">
          ${entry.key },${entry.value }<br>
          </c:forEach>
          //将某个字符串,用指定的符号分割
          <h1>c:Tokens标签</h1>
          <c:forTokens items="${strTokens }" delims="," var="a">
          ${a }<br>
          </c:forTokens>
          //将某个页面导入到当前页
          <h2>c:import标签</h2>
          <c:import url="http://localhost:8080/drp4.5/login.jsp"></c:import> <h2>c:url,c:param标签</h2>
          <c:url value="http://localhost:8080/drp4.5/login.jsp" var="u">
          <c:param name="userId" value="long"></c:param>
          </c:url>
          ${u }
          </body>
    4. 格式化库Format
      1. Servlet代码
        1. @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
          request.setAttribute("today", new Date());
          request.setAttribute("n", 1234567.234);
          request.setAttribute("n", 0.01234); request.getRequestDispatcher("/jstl_fmt.jsp").forward(request, response);
          }
      1. JSP代码
        1. <body>
          <h1>test format date tag</h1>
          today(default)<fmt:formatDate value="${today }"/><br>
          today(type=date)<fmt:formatDate value="${today }" type="date"/><br>
          today(type=time)<fmt:formatDate value="${today }" type="time"/><br>
          today(type=both)<fmt:formatDate value="${today }" type="both"/><br>
          today(dateStype=short)<fmt:formatDate value="${today }" dateStyle="short"/><br>
          today(dateStype=full)<fmt:formatDate value="${today }" dateStyle="full"/><br>
          today(dateStype=long)<fmt:formatDate value="${today }" dateStyle="long"/><br>
          today(pattern="yyyy/mm/dd hh:mm:ss")<fmt:formatDate value="${today }" pattern="yyyy/mm/dd hh:mm:ss" var="u"/><br>
          ${u } <h2>digital format tag</h2>
          n(default)<fmt:formatNumber value="${n}"></fmt:formatNumber><br>
          n(pattern="###,###,###.####")<fmt:formatNumber value="${n}" pattern="###,###,###.####"></fmt:formatNumber><br>
          n(pattern="###,###,###.0000")<fmt:formatNumber value="${n}" pattern="###,###,###.0000"></fmt:formatNumber><br>
          n(groupingUsed="false")<fmt:formatNumber value="${n}" groupingUsed="false"></fmt:formatNumber><br>
          n(groupingUsed="false")<fmt:formatNumber value="${n}" maxIntegerDigits="12" minIntegerDigits="10"></fmt:formatNumber><br>
          n(maxFractionDigits="8" minFractionDigits="5")<fmt:formatNumber value="${n}" maxFractionDigits="8" minFractionDigits="5"></fmt:formatNumber><br> <h3>currency tag</h3>
          n(type="currency")<fmt:formatNumber value="${n }" type="currency"></fmt:formatNumber>
          n(type="currency" currencySymbol="$")<fmt:formatNumber value="${n }" type="currency" currencySymbol="$"></fmt:formatNumber>
          n(type="percent")<fmt:formatNumber value="${n }" type="percent"></fmt:formatNumber> </body>
  1. 目前应用
    1. JSTL可以跨多种服务器运行,方便了开发和程序的移植性,现在用这种标签在Web层开发的人也越来越多,需要灵活掌握和运用。

J2EE (十) 简洁的JSTL、EL的更多相关文章

  1. js/jstl/el的区别

    JavaScript 学习的路径:http://www.w3school.com.cn/js/js_intro.asp 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服 ...

  2. java,js,jstl,EL的简单交互

    EL全名Expression Language.EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能. 脚本编制元素是指页面中能够用于在JSP文件中嵌入java代码的元素. JSP标准标记库(j ...

  3. JSP JSTL EL

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

  4. JSTL&EL(程序员必看之一)

    EL表达式 可以在jsp页面中减少大量的Java代码.Expression Language,它是一种借鉴了javaScript和XPath的表达式语言. EL表达式定义了一系列的隐含对象和操作符,使 ...

  5. 通过JSTL+EL实现循环迭代

    使用前需要导入包 jstl.jar 和 standard.jar <%@ page language="java" import="java.util.*,com. ...

  6. 使用jstl+el表达式遇到的几个问题

    1.使用jstl访问Map<Integer,String>中的内容时总取不到? el表达式的一个bug,在解析数字的时候,会自动将数字转换成Long类型. 我的解决办法是,Map的key改 ...

  7. JSTL&EL

    JSTL <1> 实现了JSP页面代码的复用 <2> 使得可读性更强 导入 <%@ taglib uri="http://java.sun.com/jsp/js ...

  8. JSTL+EL表达式+JSP自定义框架案例

    不会框架不要紧,我带你自定义框架 前言:这标题说的有点大了,当一回标题党,之前在学JSP的时候提到了JSTL和EL表达式,由于一直钟情于Servlet,迟迟没有更新别的,这回算是跳出来了.这回放个大招 ...

  9. JavaWeb学习记录(十九)——jstl自定义标签库之传统标签

    一.传统标签 (1)JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. public void setPageContext(PageCo ...

随机推荐

  1. HTML5触摸屏touch事件使用实例1

    1.源码: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> ...

  2. dropdownlist 二级联动

    protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { GradeBind(); } } //绑定 ...

  3. js设置元素的onclick传参方法

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  4. Tomcat6.0数据源配置

    涉及context.xml和server.xml http://blog.csdn.net/onlymilan/article/details/5493485

  5. 经典shell面试题整理

    一.取出/etc/passwd文件中shell出现的次数 问题:下面是一个/etc/passwd文件的部分内容.题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/n ...

  6. Hadoop参数优化

    dfs.block.size 决定HDFS文件block数量的多少(文件个数),它会间接的影响Job Tracker的调度和内存的占用(更影响内存的使用), mapred.map.tasks.spec ...

  7. 用POP动画引擎实现弹簧动画(POPSpringAnimation)

    效果图: #import "ViewController.h" #import <POP.h> @interface ViewController () @proper ...

  8. python记录

    1. 序列的分片操作:需要提供两个索引作为边界,第1个索引的元素包含在分片内,第2个索引的元素不包含在分片内. 为了能让分片部分能够包含列表的最后一个元素,必需提供最后一个元素的下一个元素所对应的索引 ...

  9. PHP防止SQL注入的方法

    [一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...

  10. 文件头 MAGE_FILE_HEADER

    IMAGE_FILE_HEADER这个结构的定义如下: typedef struct _IMAGE_FILE_HEADER { 00h WORD Machine; //运行平台 02h WORD Nu ...