JAVA学习篇--JSTL基础

JSTL是什么

JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。

为什么要用JSTL

我们JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet、表达式和声明)代码用来实现相关逻辑控制。看下面程序。但这样做会带来如下问题:

jsp维护难度增加;出错提示不明确,不容易调试; 分工不明确;(即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:对于美工人员来说更加容易学习和掌握,因为美工的一部分工作就是和各种标签打交道

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基础,布布扣,bubuko.com

时间: 2024-10-14 03:01:10

JAVA学习篇--JSTL基础的相关文章

JAVA学习篇--JSTL基金会

JSTL什么 JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完好的开放源码的JSP标签库. 为什么要用JSTL 我们JSP用于开发信息展现页很方便;也能够嵌入java代码(scriptlet.表达式和声明)代码用来实现相关逻辑控制. 看以下程序.但这样做会带来例如以下问题: jsp维护难度添加;出错提示不明白.不easy调试; 分工不明白;(即jsp开发人员是美工,也是程序猿); 终于添加程序的开发成本; <% if (session.getAttribu

JAVA学习篇--Java类加载

由来: 与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序(解释性语言).当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Javaclass加载到JVM里头运行,负责加载Javaclass的这部分就ClassLoader.中文叫做类加载器. 类加载器就好比一个代理,你需要什么,我通过类加载器将你需要的内容返回给你! 类加载器有什么作用? 当程序需要的某个类,那么需要通过类加载器把类的二进制加载到内存中. 解释: 类加载器也是Java类,因为其他是java类的

JAVA学习篇--javaweb之Filter详解

在DRP项目中,多次提到了Filter,它解决了字符集的统一设置以及统一控制简单WebCache,从中我们可以体会到,它给我们带来的好处不仅仅是减少代码量这么简单,它的出现避免了我们每个页面重复的编写相同的代码,减少了我们的工作量,而且给维护带来了极大的便利,那么它是如何实现统一管理的呢?既然它能统一管理某些重复的操作,那么它和AOP有什么关系呢? Filter简介 ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过

JAVA学习篇--静态代理VS动态代理

本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区别是什么呢? 2,通过学习动态代理了解到动态代理是一种符合AOP设计思想的技术,那么什么又是AOP? 下面是我对它们的理解! 代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对

JAVA学习篇--JSP实现原理

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难. 解决方案: 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java 

JAVA学习篇--ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为ThreadLoc

JAVA学习篇--JAVA的两种编程模式对比

在Drp项目中,讲解了两种编程模式Model 1和Model2,下面是对这两种模式的简单理解,以及由于Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对比学习一下. Model1 所谓Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应.用少量的JavaBean来处理数据库连接.数据库访问等操作. 代码示例:修改用户信息 主页面的js跳转: function

java学习篇(一)从网络下载图片

(1)在java中,通过网络,下载图片. import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * 通过URL,从网络下载图片 * @author TF */ public class Imag

JAVA学习_零基础学习JAVA方法_零基础学习JAVA思路

在学习JAVA前,对于一个真正初学者(也就是从零开始学习JAVA人员)的一个问题:什么是JAVA,然后才是怎么学习JAVA?JAVA是sun microsystems在1995年推出的高级编程语言,其分为Java SE.Java EE.Java ME三大体系,而JAVA SE是JAVA的基础,继JAVASE之后是JAVAEE,JAVA ME.JAVASE是JAVAEE的基础,Servlet.JSP是框架的基础.数据库方面个人建议学习oracle,当然其它的像 MySQL,MSSQL,都可以,只要