JSP标签和JSTL

来源:http://www.sh-fengwen.com 作者:瘦身美容 人气:52 发布时间:2019-09-05
摘要:在这篇文章中,我将为大家介绍一种基于JSP且灵活有趣的技术,那就是JSTL.JSTL全称为Java Server Pages Standard Tag Library.虽然JSP已经变的非常流行,但JSTL在基于SQL数据库的简单、快速的前后台

在这篇文章中,我将为大家介绍一种基于JSP且灵活有趣的技术,那就是 JSTL.JSTL全称为Java Server Pages Standard Tag Library.虽然JSP已经变的非 常流行,但JSTL在基于SQL数据库的简单、快速的前后台开发中还是没有被广泛的 应用。一旦你了解了JSTL,你就会了解到它的优点,并发现在你作为程序员的日常 工作中,它已经被应用到了很多方面。我这里假设你已经熟悉HTML,能理解基本的 SQL语句,和Jsp的基础知识。因为下面的内容要涉及到这些知识。

Java的5个标签库:核心(c)、格式化(fmt)、函数(fn)、SQL(sql)、XML(x)

电子游戏美高梅网址,JSTL是一个已经被标准化的标记库集合,她支持迭代、条件、XML文档的解析 ,国际化,和利用SQL与数据库交互的功能。起初,JSTL规范一直由JCP(Java Community process program)组织下的JSR #52 发展完善,"JCP肩负着Java 技术 发展的重任"--官方网站这样评价。JCP作为一个开放性的组织,他同时吸收正式 的会员和非正式会员.JCP对于Java技术规范的形成与发展发挥了重要的主导作用 。JSTL主要包括四个基本部分的标记库:Core,XML,国际化,和对SQL的支持。由于 这篇文章的主要是以其中的SQL部分的应用来快速了解JSTL,所以我们这篇文章只 介绍了 Core和SQl标签库的一些基本功能。

  SQL、XML库不推荐使用

这项技术简单而且功能强大,足以和PHP、ColdFusion一较高下.他在拓展Java 的应用领域方面有足够的能力,这些领域不只包括大型的可再升级的Web应用程序 ,对于仅拥有简单主页的Web程序一样没问题。这允许你在建立站点的时候可以避 免那些经常考虑的XML的集成和与数据库的连接。正如我刚才提到的一样,JSTL的 关键点就是简单易用。还有,那就是JSTL是基于JSP构建的, 他允许我们使用所有 的Java技术,这一点我们有必要记住。

核心标签库(c)

开始之前,我们需要弄清楚怎样才能运行JSTL.由于是基于JSP技术的,所以我 们运行它就需要一个能够编译JSP的容器,这里我们使用免费的JSP容器:TOMCAT ( 超出了本文所讲述的范围。毫无疑问,这个软件产品现在已经很普及了,而且关于 如何安装的文档资料也是很多。这里假设您已经安装并成功配置了这个容器,你 只需再安装JSTL运行所需文件即可,它可以从这里下载 正的安装它,只需要将其中的.JAR文件包含到你的应用程序的WEB-INF/lib目录下 即可,稍后我会具体说到该怎么做.

//taglib指令

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

因为我们要在一个支持标准SQL的数据库上运行程序,你需要在你的电脑上安 装有一个数据库。数据库的类型有许多种,这里我选择了MySql。我之所以选择他 的原因在于首先,我们需要展示JSTL对于构造简单快速的应用程序领域所起的作用 ,同时能和一直在这个领域处于主导地位的PHP+MySql有所比较;第二点那就是 MySql是可以免费下载并包含有一个针对JAVA的JDBC驱动.总之,为了使用下面的 例子,你需要下载一个MYSQL服务器 ( MySql Connector/J JDBC驱动程序 就是MySql control center j/index.html),这个产品可以让你非常容易的操作管理Mysql数据库文件。全部下 载完成后,你需要安装mysql和mysql Control Center。另外还有就是mysql的 JDBC驱动需要放到你的web应用程序中的/Web-INF/lib目录中。

   <c:out>

在创建程序代码之前,你需要创建并填写数据库表。关于这方面的主题文章也 相当广泛,具体如何操作超出了本文的范围。这里我推荐给你我们上面提及的一 个可视化的管理工具 MySQL Control Center.你可以用他来创建一个用来运行程 序的测试用户,数据库以及创建一个测试表,并填写若干记录。关于登陆名及密 码 数据库名称这些配置环境参数,你应该记住他们,稍后需要应用到我们的代码中 。

//<c:out>标签用于在JSP中输出内容
//有value、default、escapeXml三个属性
//escapeXml用于对保留xml字符(<、>、'、"、、&)转义,设为false禁止转义
<c:out value="${someValue}" default="${defaultValue}"/>
//default可以写在标签内,用于设置默认值
<c:out value="${someValue}">${defaultValue}</c:out>

现在,你就可以准备创建自己的第一个JSTL应用程序了它需要我们做下面一些 事情:

  <c:if>

整个实例程序代码包括两个文件Hello.jsp和 Continue.jsp

//<c:if>用于控制是否渲染标签内的内容
//有test、var、scope三个属性
//test值为假,标签中的所有内容都会被忽略
<c:if test="false">
    这的内容都会被忽略
</c:if>

Hello.jsp文件允许你输入数据库名称、登陆名称、登陆密码、数据库表名。 Continue.jsp:接受Hello.jsp中的数据信息并且连接数据库,并对数据库中的表 执行一个Select请求.

  <c:choose>、<c:when>、<c:otherwise>

下面是这个系统所有的代码文件,我将逐一进行解释。这些代码相当简单,对 于代码的结构,我相信你即使没有我的解释你也能理解的.

//<c:choose>不包含属性,只作为<c:when>、<c:otherwise>的父标签
//<c:choose>中至少包含一个<c:when>,至多包含一个<c:otherwise>,并且只能是最后一个标签
<c:choose>
//<c:when>只包含一个test属性
    <c:when test="someCondition">if</c:when>
    <c:when test="someCondition">else if</c:when>
    <c:otherwise>else</c:otherwise>
</c:choose>

1: <!-- Hello.jsp --> 2: <html> 3: <head> 4: <title>Hello</title> 5: </head> 6: <body bgcolor="#ffffff"> 7: <h1>Please, enter all necessary information and click OK.</h1> 8: <form method="post" action="Continue.jsp"> 9: <br>Your login to database: <input type="text" name="login" size="15"> 10: <br>Your password to database: <input type="password" name="password" size="15"> 11: <br>Your database name: <input type="text" name="database" size="15"> 12: <br>Your database table: <input type="text" name="table" size="15"> 13: <br><br><input type="submit" name="submit" value=" OK "> 14: </form> 15: </body> 16: </html>

  <c:forEach>、<c:forTokens>

(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到 你的代码文件中。)

//<c:forEach>类似于java中的for循环
//有items、begin、end、step、var、varStatus六个属性
//java中的for循环
for(int i=0;i<100;i++)
    out.printfln(i);
//用<c:forEach>表示
//step默认值是1,可以不写
<c:forEach var="i" begain="1" end="100" step="1">i</c:forEach>
//items表示要遍历的集合、数组、Map、Iterator、Enumeration
//varStatus代表循环状态的变量名称
<c:forEach items="lists" var="student">
    ${student.name}
    ${student.number}
</c:forEach>
//<c:forTokens>的items是字符串
//<c:forTokens>标签与<c:forEach>标签有相似的属性,只多一个delims属性,delims是分隔符
<c:forTokens items="google,runoob,taobao" delims="," var="name"><c:out value="${name}"/></c:forTokens>

上面就是所有Hello.jsp的源代码,很惊奇吧,他仅仅是纯粹的HTML代码,就 这么简单,我想应该没有注释的必要了.我之所以将这些代码片段包含进文章中就 是为了展示一下JSTL集成到那些需要快速扩充额外功能的HTML站点中是多么的简 单.让我再为你展示一下Continue.jsp的全部代码,看过之后,你就会对 JSTL有 些了解了。

   <c:url>

1: <!-- Continue.jsp --> 2: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 3: <@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %> 4: <c:set var="h" value="localhost"/> 5: <c:set var="l" value="${param.login}"/> 6: <c:set var="p" value="${param.password}"/> 7: <c:set var="d" value="${param.database}"/> 8: <c:set var="t" value="${param.table}"/> 9: <html> 10: <head> 11: <title>Continue</title> 12: </head> 13: <body bgcolor="#ffffff"> 14: <sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://${l}/${d}?user=${u}&password=${p}"/> 15: <sql:query var="result"> 16: SELECT * FROM <c:out value="${t}"/> 17: </sql:query> 18: <c:forEach var="row" items="${result.rowsByIndex}"> 19: <c:out value="${row[0]}"/> <br> 20: </c:forEach> 21: </body> 22: </html>

//<c:url>标签可以正确的对url编码,常配合<c:param>使用
//有value、context、var、scope四个属性
//context用于指定根路径
//路径是/index.jsp
<c:url  value="/index.jsp" context="/"/>
//路径是/store/item.jsp
<c:url  value="/item.jsp" context="/store"/>
//var指定了用于创建和保存URL结果的EL变量,默认作用域是page,通过scope属性更改作用域
<a href="<c:url  value="/index.jsp" var="homeUrl" scope="request"/>">测试url</a>

(请注意文本左侧的数字只是为你提供一些标记信息,你不需要将他们输入到 你的代码文件中。)

   <c:redirect>

这就是我们所有的代码了,是不是非常不错?现在我门来解释一下上面这些代 码的作用。

//<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,丢失<c:redirect>之后所有内容,可以和<c:param>一起使用
//有url、context两个属性
<c:redirect url="http://www.baidu.com"/>

行1 是 HTML 的注释说明。

   <c:import>

行2--3 这些 JSP 标签是为了引用外部的 标签库,更确切的说这里是引用了 JSTL库中的 Core 和SQL标签库部分。我们为他们都设置了前缀名称,以便于我们 通过这些前缀名称访问被引入的标签库中的功能方法。

//可以获取特定url资源的内容,这些内容可以保存在响应、字符串变量、Reader变量中,可以和<c:param>配合使用,用于指定url中的查询参数
//有url、content、charEncoding、var、scope、varReader六个属性
//url可以使相对路径、绝对路径
//charEncoding,当资源未返回Content-Type时使用
//scope指定var的作用域
//varReader中的Reader变量只能在<c:import>标签内,不可以和var、<c:param>一起使用
//以下代码打印百度源码
<c:import var="data" url="http://www.baidu.com"/>
<c:out value="${data}"/>

行4---8正如 Hello.jsp 真正运行的样子,他将请求continue.jsp, Continue.jsp获得请求后就需要得到并解析来自Hello.jsp的若干变量,我们使用 了这样的方式${param.YOUR_VAR}。在第4行<c:set标签,将变量${h}设置为 "localhost",第五行变量${l}将获取我们在 Hello.jsp中的login文本域中输入的 信息,第6,7,8行的变量将分别获得来自Hello.jsp中用户所输入的密码,数据 库名称,数据表名称。

  <c:param>

行9--13是一些我经常用来常见HTML网页头的简单的HTML标签,马上,重要的 功能马上要到了。

//<c:param>标签用于设定跟url有关参数
//有name、value两个属性
<c:url var="myURL" value="main.jsp">
    <c:param name="name" value="abc"/>
    <c:param name="url" value="www.baidu.com"/>
</c:url>
<a href="/<c:out value="${myURL}"/>">
//输出:/main.jsp?name=abc&url=www.baidu.com

行14,我们试图用我们先前获得的mysql驱动程序(com.mysql.jdbc.Driver)建 立数据库连接,在URL中,我们指明数据库连接所需要的参数,象数据库名称,主 机名称,登陆名及登陆密码。依此,我们可以用其它任何的JDBC驱动程序连接其 相对的数据库。如果我们需要连接其他的SQL数据库,只需更改这个 URL就够了。

  <c:set>、<c:remove>

行15--17 这里我们执行了一个Select 查询,请特别注意第16行,我们使用了 另一个JSTL功能函数<c:out 用来输出我们所获取的数据表名称,这里我们同样 可以使用其他的SQL命令,比如说 INSERT,DELETE,等等。要执行这些没有返回值 的查询请求,你就需要使用<sql:update JSTL功能函数了。他可以直接执行他们 就象<SQL:query一样,只是执行它是不需要特别指定结果变量来存储语句执行返 回的结果。

//<c:set>标签用于设置变量值和对象属性
//有value、target、property、var、scope五个属性
//修改对象的值
<c:set target="${someObject}" property="someProperty" value="hello"/>
//给某个变量赋值
<c:set var="salary" scope="session" value="${2000*2}"/>

//<c:remove>标签用于移除一个变量,如果未指定作用域,所有名称匹配的都会被移除
//有var、scope两个属性
<c:remove var="salary"/>

行18--20 既然我们执行了上面的SELECT查询语句,我们就应该把他的返回结 果显示出来。<c:forEach 就是JSTL 中一个具有迭代功能的函数,执行它时,我 们通过${result.rowsByIndex}将返回的每一个数据行信息返回给变量${row},紧 接着在第19行, 我们通过<c:out value="${row[0]}"/>显示返回的每个数据行 的第一个数据列中的值。只要你的数据表中包含的字段,你都可以通过改变变量 ${row}中的数字大小来对请求表中的任意一个字段中的值对他们进行访问。

格式化标签库(fmt)

行21--22是HTML 页脚

  国际化和本地化组件

在你亲自创建JSTL应用程序过程中,可能你还没有发现它有多么的强大,但你 应该能够意识到JSTL的功能函数的简单和高效性,试想有了JSTL,整合出一个基于 SQL的新闻专栏是何等的快速,集成你现有的web站点是何等的容易。

    国际化和本地化由3个部分组成

很好,我们的代码很容易理解的,即使一个非专业程序员的话,打个比方就算 是一个设计师也能够读懂它,理解它,还可能进行部分的修改,起码是页面布局 上的修改。

    1.文本之间不同语言的转换

正如我们开始的时候所提到的,为了使我们的JSTL代码正常的运行,我们需要 安装Mysql Connector/J 中的JAR 文件,当然还有 JSTL。因为我们使用了Tomcat 这个JSp 容器,你需要在Tomcat的文件目录Webapps下创建你自己的文件夹,将你 的Hello.jsp 、Continue.jsp文件放在你创建的文件目录中,在你创建的目录中 你还要创建一个叫做WEB-INF 的文件夹,将你的配置文件Web.xml放在里面, web.xml文件如下:

    2.日期、时间、货币、百分比的格式化

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app />

    3.外国货币和本地货币的转换(通常可忽略)

接下来我们还需要在WEB-INF下创建一个叫做lib的子目,并将下列文件放进去 :

    在JSTL中提供了i18n标签用于处理文本之间不同语言的转换,提供了格式化标签处理日期、时间、货币、百分比的格式化

jstl.jar

//taglib指令
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

本文由美高梅游戏平台网站发布于瘦身美容,转载请注明出处:JSP标签和JSTL

关键词:

上一篇:JSP页面传值中文乱码的简单解决方法

下一篇:没有了

最火资讯