JAVA学习篇--JSTL基金会
JSTL什么
JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完好的开放源码的JSP标签库。
为什么要用JSTL
我们JSP用于开发信息展现页很方便;也能够嵌入java代码(scriptlet、表达式和声明)代码用来实现相关逻辑控制。
看以下程序。但这样做会带来例如以下问题:
jsp维护难度添加;出错提示不明白。不easy调试; 分工不明白;(即jsp开发人员是美工,也是程序猿);
终于添加程序的开发成本;
<% if (session.getAttribute(“user”).equals(“member”)) { %>
<p>Welcome, member!</p>
<% } else { %>
<p>Welcome, guest!</p>
<% } %>
由来:
JSTL的初衷是为了将前台美工同开发分开。非常好的实现分层开发的目标。我们知道大多数的美工是对标签比較熟悉
JSTL的最大优势
1:让页面代码看起来更加整洁。显示逻辑一目了然,风格统一,易于维护
2:大量使用JSTL提供的逻辑操作(比如迭代、推断),能够大大降低JSP中脚本代码(Scriptlets)的数量
3:非常好的实现了分层的思想!
4:对于美工人员来说更加easy学习和掌握,由于美工的一部分工作就是和各种标签打交道
5:并且相同能够对其进行自己定义扩展!
弊端:
1,为前台美工人员,维护人员添加了学习成本
使用简单介绍:
假设要使用JSTL,则必须引用jstl.jar和standard.jar两个包。
并在jsp文件的顶部增加下面内容:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
主要标签分类:
<c:> 核心标签库
包含与表达式相关的标签,输出JSP页面内容时的流程制标签,迭代操作标签,生成和操作URL的标签.
JSTL核心标签库(C标签)标签共同拥有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
<fmt:> 格式化标签库
定义了用来格式化数据(尤其是数字和日期)的操作还支持使用本地化资源束进行JSP页面的国际化
<fn:> Function标签库
提供了一组经常使用的 EL函数,主要用于处理字符串,在 JSP 中能够直接使用这些函数
JSTL一般配合EL一起使用,因此先看看EL.
EL(Expression Language)目的:为了使JSP写起来更加简单
语法结构:${expression}
举例:< %=request.getParameter(“username”)% > 等价于 ${ param. username }
以下我们来应用JSTL来改动一下jsp的页面:
使用JSTL之前:
<td>
<select name="category" class="select1" id="category">
<%
for (int i=0; i<itemCategoryList.size(); i++) {
ItemCategory ic = (ItemCategory)itemCategoryList.get(i);
String selectedString = "";
if (item.getItemCategory().getId().equals(ic.getId())) {
selectedString = "selected";
}
%>
<option value="<%=ic.getId() %>" <%=selectedString %>><%=ic.getName() %></option>
<%
}
%>
</select>
</td>
使用JSTL之后:
<td>
<select name="category" class="select1" id="category">
<!-- 遍历list数组。将值存放到itemCategory中 -->
<c:forEach items="${itemCategoryList}" var="itemCategory">
<c:set var="selectedString"/>
<!-- 假设item.itemCategory.id等于itemCategory.id -->
<c:if test="${item.itemCategory.id eq itemCategory.id}">
<!-- 将selected的值存放到selectedString变量中 -->
<c:set value="selected" var="selectedString"/>
</c:if>
<option value="${itemCategory.id }" ${selectedString }>${itemCategory.name }</option> </c:forEach> </select> </td>
总结:
对于JSTL来说。它对jsp页面进行了进一步的拆分。将jsp页面中的JAVA代码,隔离出来,不必要美工去关心java代码的实现。仅仅考虑界面的美化就可以,这样职责单一,分工明白。
在做DRP项目总结时。深刻体会到,事实上我们如今学的好多技术实际都是抽象的不断扩展和延伸。是为了程序的复用性和易用性添加!我们都是在不断抽象。不断总结。不断简单化地进行学习!让我们的程序更加面向变化。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
JAVA学习篇--JSTL基金会的更多相关文章
- JAVA学习篇--静态代理VS动态代理
本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者 ...
- JAVA学习篇--JAVA两种编程模式控制
在Drp项目中,解说了两种编程模式Model 1和Model2.以下是对这两种模式的简单理解.以及因为Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对照学习一下. ...
- Java学习篇之---json-lib(Maven)
json-lib(Maven) java中用于解释json的主流工具有org.json.json-lib与gson.本篇文章介绍json-lib. 项目中要用到json-lib.在pom.xml文件里 ...
- JAVA学习篇--javaweb之Filter具体解释
在DRP项目中,多次提到了Filter,它攻克了字符集的统一设置以及统一控制简单WebCache,从中我们能够体会到.它给我们带来的优点不不过降低代码量这么简单,它的出现避免了我们每一个页面反复的编写 ...
- JAVA学习篇--Java类加载
由来: 与普通程序不同的是,Java程序(class文件)并非本地的可执行程序(解释性语言). 当执行Java程序时.首先执行JVM(Java虚拟机),然后再把Javaclass载入到JVM里头执行, ...
- Java学习——JSTL标签与EL表达式之间的微妙关系
原文总结的太好了,忍不住记录.转发. 原文地址:http://blog.csdn.net/u010168160/article/details/49182867 目录(?)[-] 一EL表达式 EL相 ...
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...
- java学习之EL和JSTL
0x00前言 EL和JSTL都是JSP的内容的拓展,都是开发的一些东西,稍微学习记录一下,避免以后忘记 0x01EL 0x1基本用法 概念:Expression language 表达式语言 作用:替 ...
- Java多线程(学习篇)
Java多线程:(学习篇) 1.什么是线程 2.线程状态 3.线程中断 4.线程交互 5.同步机制 6.锁机制 7.堵塞队列与堵塞栈 8.条件变量.原子量.线程池等 9.线性安全类和Callable与 ...
随机推荐
- 【Oracle】物理体系结构
一.ORACLE 物理体系结构 原理结构图 各部分解释: PGA: 私有内存区,仅供当前发起用户使用. 三个作用 用户登录后的session信息会保存在PGA. 运行排序.假设内存不够,orac ...
- 9patch(.9)怎么去掉自己画上的黑点/黑线
在自己制作.9.png图片的时候,制作之后所制作的图片上面会显示出制作的痕迹,也即是图片区域上会显示小黑点和黑线.那么为了真正的利用.9.png图片的使用效果.这些瑕疵当然是不能出现的了.因此,要想办 ...
- 构建自己的Java并发模型框架
Java的多线程特性为构建高性能的应用提供了极大的方便,可是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题须要细心的考虑,一不小心就会出现一些微妙的,难以调试的错误. 另外.应用逻辑和线程逻辑 ...
- Java Map 迭代
Map迭代 有两种 道路 遍历 Map该方法: 1 Set<K> KeySet(): 获取全部的键,得到set集合,迭代, 通过get( key)获取值! 2 Se ...
- Java / Android 基于Http的多线程下载的实现
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线程现在的例子,就帮忙实现了,在此分享下~ 先说下 ...
- js控制图片缩放、水平和垂直方向居中对齐
已測试兼容 IE6,IE7,IE8,火狐FF,谷歌chrome. 这里使用了jquery插件,假设你不使用jquery,略微改造一下也非常快. 网上查了些资料,用css控制兼容性不好,看去非常揪心.于 ...
- quartz.net持久化和集群
首先你应该使用的是持久化的quartz,所有定时任务的情况都是保存在数据库表总的,每次启动时,scheduler容器都是按照qrtz_triggers等表内存储的信息来执行定时任务(主要包括cron表 ...
- 返璞归真 asp.net mvc (3) - Controller/Action
原文:返璞归真 asp.net mvc (3) - Controller/Action [索引页] [源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者 ...
- Java 对象的生命周期
Java对象的生命周期 在Java中,对象的生命周期包含下面几个阶段: 1. 创建阶段(Created) 2. 应用阶段(In Use) 3. 不可见阶段(Invisib ...
- UVA 11149 - Power of Matrix(矩阵乘法)
UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...