JSTL标签库
来源:互联网 发布:抠图软件 for mac 编辑:程序博客网 时间:2024/05/19 22:01
1. JSTL简介
JSTL全名JspServer Pages Standdard Tag Library(Jsp标准标签库),它是sun公司发布的一个针对JSP开发的新组件,它允许使用标签开发Jsp页面.
JSTL是一个标准的已制定好的标签库,它可以应用到很多领域.如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。
JSTL所提供的标签库主要分为五大类:
JSTL
前置名称
URI
范例
核心标签库
c
http://java.sun.com/jsp/jstl/core
<c:out>
I18N格式标签库
fmt
http://java.sun.com/jsp/jstl/fmt
<fmt:formatDate>
SQL标签库
sql
http://java.sun.com/jsp/jstl/sql
<sql:query>
XML标签库
Xml
http://java.sun.com/jsp/jstl/xml
<x:forEach>
函数标签库
fn
http://java.sun.com/jsp/jstl/functions
<fn:split>
2.核心标签库
功能分类
标签名称
表达式操作
out、set、remove、catch
流程控制
if、choose、when、otherwise
迭代操作
forEach、forTokens
URL操作
import、param、url、redirect
2.1<c:out>
功能: <c:out>主要用来显示数据的内容
属性列表:
名称
说明
必须
默认值
value
需要显示出来的值
是
无
default
如果value的值为null,则显示default的值
否
无
escapeXml
是否转换特殊字符,如:<转换成<
否
true
实例:使用核心标签库,并输出数据
步骤一:将标签库中所有的.jar包(内部是所有的标签处理器)放到/WEB_INF/lib下,将所有的.tld(内部是所有的标签库描述)放到/WEB-INF/tlds下
步骤二:在Jsp页面中引用核心标签(c_out.jsp)
<%@ pagecontentType="text/html;charset=gbk"language="java"%>
<%@ tagliburi="http://java.sun.com/jstl/core"prefix="c"%>
<%--default的两种使用方式--%>
<%--如果在uri中输入参数name=jgl,则显示输入的value中的值,否则显示默认信息(default)--%>
<c:outvalue="${param.name}"default="welecome jgl tomy website!"/>
<c:outvalue="${param.name}">welecome jgl to mywebsite!</c:out>
<%--value属性是必添的,escapeXml属性是true时,不解析特殊字符,false时,解析特殊字符--%>
<c:out value="${param.name}" ecapeXml="false"><c:out></c:out>
2.2<c:set>
功能: <c:set>主要用来将变量存储至JSP范围中或是JavaBean的属性或Map对象中。
属性列表:
名称
说明
必须
默认值
value
要被存储的值
否
无
var
欲存入的变量名称
否
无
scope
var变量的JSP范围
否
page
target
JavaBean或Map对象
否
无
property
指定target对象的属性
否
无
实例1:将变量设置到Jsp范围内,并输出
<%--将变量定义在Jsp范围内--%>
<%--value属性的两钟使用方式--%>
<c:setvar="username"value="jack"scope="session"/>
<c:setvar="pwd"scope="session">000</c:set>
<%--通过el表达式语言输出--%>
${sessionScope.username}
${sessionScope.pwd}
<%--通过jstl中<c:out>标签输出--%>
<c:out value="${sessionScope.username}"/>
实例2:将变量设置到javaBean对象内,并输出
<jsp:useBeanid="stu"class="net.pcedu.student"/>
<%--通过<c:set>标签给javaBean对象的age属性设值--%>
<c:setvalue="16"target="${stu}"property="age"/>
<%--输出javaBean对象的属性值--%>
年龄:<c:outvalue="${stu.age}"/>
2.3<c:remove>
功能:主要负责移除变量
属性列表:
名称
说明
必须
默认值
var
欲移出的变量名称
是
无
scope
Var变量的JSP范围
否
page
如:
<c:removevar="username"scope="session"/>
${sessionScope.username}—输不出结果
2.4<c:catch>
功能:主要用于捕获异常
属性列表:
名称
说明
必须
默认值
var
用来储存错误信息的变量
否
无
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%--捕获异常,并将异常信息存储在var变量中--%>
<c:catchvar="myexp">
<%
int i=0;
int j=3/0;
%>
</c:catch>
<h1>异常</h1>
<hr>
<c:outvalue="${myexp}"></c:out><%--输出异常--%>
<hr>
<h1>异常信息</h1>
<c:outvalue="${myexp.message}"/><%--获取异常信息--%>
<hr>
<h1>引起原因</h1>
<c:out value="${myexp.cause}"/><%--获取引起异常的原因--%>
2.5<c:if>
功能:主要用于进行if判断,如果为true,则输出标签体中的内容
名称
说明
必须
默认值
test
如果表达式的结果为true,则执行体内容,false则相反
是
无
var
用来存储test运算的结果(true或false)
否
无
scope
Var变量的JSP范围
否
page
实例:利用<c:set>标签设置javaBean的属性age,在jsp页面中获取age,如果age<18,输出相应信息
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%--jsp页面默认是true,EL表达式被忽略--%>
<%@ pageisELIgnored="false"%>
<%--定义一个javaBean对象--%>
<jsp:useBeanid="stu"class="net.pcedu.student"/>
<%--通过<c:set>标签给javaBean对象的age属性设值--%>
<c:setvalue="16"target="${stu}"property="age"/>
<%--输出javaBean对象的属性值--%>
年龄:<c:outvalue="${stu.age}"/>
<%--当if判断为true时,输出标签体的内容--%>
<c:iftest="${stu.age<18}"var="young"scope="session">对不起,未成年,不能访问这个网站...</c:if>
<%--输出if语句的判断结果--%>
判断结果:<c:outvalue="${sessionScope.young}"/>
2.6<c:choose>,<c:when>,<c:otherwise>
<c:when>中属性列表:
名称
说明
必须
默认值
test
如果表达式的结果为true,则执行本体内容,false则相反
是
无
实例:从javaBean中获取color属性,并根据不同的属性值显示不同的颜色
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%@ pageisELIgnored="false"%>
<%--定义一个Color对象--%>
<jsp:useBeanid="c"class="net.pcedu.Color"/>
<%--为Color对象设置属性--%>
<c:setvalue="blue"target="${c}"property="color"/>
<%--获取Color对象的属性值,并根据不同的属性值显示不同的颜色--%>
<c:outvalue="${c.color}"></c:out>
<c:choose>
<c:whentest="${c.coloreq 'red'}">
<fontcolor=redface="华文行楷">你选择的颜色是:<c:outvalue="${c.color}"/></font>
</c:when>
<c:whentest="${c.coloreq 'blue'}">
<fontcolor=blueface="华文行楷">你选择的颜色是:<c:outvalue="${c.color}"/></font>
</c:when>
<c:otherwise>
<fontcolor=greenface="华文行楷">你选择的颜色是:<c:outvalue="${c.color}"/>
</c:otherwise>
</c:choose>
2.7<c:forEach>
功能: <c:forEach>为循环控制,它可以将数组,集合(Collection)中的成员循序浏览一遍。
属性列表:
名称
说明
必须
默认值
var
用来存放现在指定的成员
否
无
items
被迭代的集合对象
否
无
varStatus
用来存放现在指的相关成员信息
否
无
begin
开始的位置
否
0
end
结束的位置
否
最后一个成员
step
每次迭代的间隔数
否
1
实例:
<%@ pagecontentType="text/html;charset=gbk"%>
<%@ tagliburi="http://java.sun.com/jstl/core_rt"prefix="c"%>
<%@ pageimport="java.util.*,net.pcedu.core.UserInfo"%>
<%--将javabean对象存放到集合中--%>
<%
List users=new ArrayList();
for(int i=0;i<5;i++)
{
UserInfo u=new UserInfo();
u.setName("jack-"+i);
u.setPwd("00"+i);
users.add(u);
session.setAttribute("users",users);
}
%>
<%--注意:EL中只可通过11个隐含对象来输出表达式中的内容(因此直接将List对象添加到EL表达式中不可用)--%>
<%--通过<c:forEach>迭代出集合中的信息>--%>
<h1>用户信息</h1>
<table>
<tr>
<th>用户名</th>
<th>密码</th>
<th>当前行的索引</th>
<th>已遍历的行数</th>
<th>是否第一行</th>
<th>是否最后一行</th>
</tr>
<c:forEachvar="user"items="${users}"varStatus="status"><%--加上begin="1"end="3" step="1"属性,将只显示前三条记录--%>
<tr>
<td><c:outvalue="${user.name}"/></td>
<td><c:outvalue="${user.pwd}"/></td>
<td><c:outvalue="${status.index}"/></td><%--输出当前行的索引号--%>
<td><c:outvalue="${status.count}"/></td><%--输出已遍历的行数--%>
<td><c:outvalue="${status.first}"/></td><%--输出当前行是否是第一行--%>
<td><c:outvalue="${status.last}"/></td><%--输出当前行是否是最后一行--%>
</tr>
</c:forEach>
</table>
<%--通过<c:forEach>输出从1到10的数据--%>
<c:forEachvar="num"begin="1"end="10"step="2">
<c:outvalue="->${num}"></c:out>
</c:forEach>
<%--通过<c:forEach>遍历数组,枚举,集合等--%>
<%
int[]intarr=newint[]{10,20,30,40,50};
String[]strarr=new String[]{"I","am","a","handsome","boy"};
Vector v=new Vector();
v.add("This");
v.add("is");
v.add("a");
v.add("Enumeration");
v.add("example");
Enumeration e=v.elements();
HashMap h=new HashMap();
h.put("hello","0");
h.put("hello1","1");
h.put("hello2","2");
h.put("hello3","3");
h.put("hello4","4");
request.setAttribute("intarr",intarr);
request.setAttribute("strarr",strarr);
request.setAttribute("e",e);
request.setAttribute("h",h);
%>
<br>
<h1>--遍历整形数组--</h1>
<%--遍历整形数组--%>
<c:forEachvar="i"items="${intarr}">
<c:outvalue="${i}"></c:out>
</c:forEach>
<br>
<h1>--遍历字符串数组--</h1>
<%--遍历字符串数组--%>
<c:forEachvar="s"items="${strarr}">
<c:outvalue="${s}"></c:out>
</c:forEach>
<br>
<h1>--遍历枚举--</h1>
<%--遍历枚举--%>
<c:forEachvar="ee"items="${e}">
<c:outvalue="${ee}"></c:out>
</c:forEach>
<br>
<h1>--遍历HashMap--</h1>
<%--遍历HashMap--%>
<c:forEachvar="hh"items="${h}">
<c:outvalue="${hh.key}"/>=<c:outvalue="${hh.value}"/>
</c:forEach>
2.8<c:forTokens>
功能:将字符串以指定的一个或多个字符分割开来
属性列表
名称
说明
必须
默认值
var
用来存放现在的成员
否
无
items
被迭代的字符串
是
无
delims
定义用来分割字符串的字符
是
无
varStatus
用来存放现在指定的相关成员信息
否
无
begin
开始位置
否
0
end
结束位置
否
最后一个成员
step
每次迭代的间隔数
否
1
实例:
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%--通过一个分割符将字符串划分为数组,并遍历出来--%>
<c:forTokensvar="ele"items="blue,red,green|yellow|pink,black|white"delims="|">
<c:outvalue="${ele}"/>||
</c:forTokens>
<br>
<%--通过多个分割符将字符串划分问数组,并遍历出来--%>
<c:forTokensvar="ele"items="blue,red!green|yellow;pink;black|white"delims="|;,!">
<c:outvalue="${ele}"/>||
</c:forTokens>
2.9<c:import>
功能: <c:import>可以把其他静态或动态文件包含至本身JSP网页。
属性列表:
名称
说明
必须
默认值
url
文件被包含的地址
是
无
context
相同容器下,其它web必须以“/”开头
否
无
var
储存被包含文件的内容
否
无
scope
var变量的JSP范围
否
page
charEncoding
被包含文件内容的编码格式
否
无
varReader
储存被包含的文件的内容
否
无
注意:<c:import>与<jsp:include>的区别
<jsp:include>只能包含和自己同一个Web应用程序下的文件;而<c:import>除了能包含和自己同一个Web应用程序的文件外,亦可以包含不同Web应程序或者是其它网站的文件。
实例:包含同一个web应用程序的文件和不同webweb应用程序的文件
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%--引入绝对路径的文件--%>
<%--注意:被引入的文件将被解析为html的形式嵌入引用文件--%>
<h1>引入绝对路径的文件</h1>
<c:importurl="http://127.0.0.1:8080/test/c_beimported.jsp"var="file"charEncoding="gbk"/>
<blockquote>
<pre>
<c:outvalue="${file}"></c:out>
</pre>
</blockquote>
<%--引入相对路径的文件--%>
<h1>引入相对路径的文件</h1>
<blockquote>
<pre>
<c:importurl="c_beimported.jsp"var="f"/>
<c:outvalue="${f}"></c:out>
</pre>
</blockquote>
<%--传递参数到被引入文件--%>
<h1>传递参数到被引入文件</h1>
<blockquote>
<pre>
<c:importurl="c_beimported.jsp"var="ff">
<c:paramname="name"value="jack"/>
</c:import>
<c:outvalue="${ff}"></c:out>
</pre>
</blockquote>
2.10.<c:url>
功能: <c:url>主要用来产生一个URL
名称
说明
必须
默认值
value
执行的URL
是
无
context
相同容器下,必须以“/”开头
否
无
var
储存被包含文件的内容
否
无
scope
var变量的JSP范围
否
page
实例:将一个url存放到一个变量中,并输出url
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%--将一个url存放到一个变量中,并输出url--%>
<c:urlvar="myurl"value="c_beimported.jsp"scope="session">
<c:paramname="name"value="jgl"/>
</c:url>
<c:outvalue="${myurl}"/>
2.11<c:redirect>
功能: <c:redirect>可以将客户端的请求从一个JSP网页导向到其它文件。
属性列表:
名称
说明
必须
默认值
url
导向的目标地址
是
无
context
相同容器下,必须以“/”开头
否
无
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ pagecontentType="text/html; charset=gb2312"language="java"%>
<%--通过<c:url>获得url--%>
<c:urlvalue="c_beimported.jsp"var="test"><c:paramname="name"value="jgl"/></c:url>
<%--通过<c:redirect>重定向到获得的url上--%>
<c:redirecturl="${test}"/>
<%--通过<c:url>获得url--%>
<c:urlvalue="c_beimported.jsp"var="t"></c:url>
<%--通过<c:redirect>重定向到获得的url上(在<c:redirect>内部传参)--%>
<c:redirecturl="${t}">
<c:paramname="name"value="admin"/>
</c:redirect>
3.SQL标签库
实例:通过数据源来连接数据库
步骤一:配置上下文中的<Resource>(test.xml)
<ContextdocBase="G:\jstlPro\WebRoot" path="/test"reloadable="true">
<Resource
name="jdbc/mydb"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
/>
</Context>
步骤二:编写DbHelper.java来进行连接
package net.pcedu.util;
importjava.sql.Connection;
import java.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
importjavax.sql.DataSource;
publicclass DbHelper {
DataSource ds;
Connection conn;
Statement stmt;
ResultSet rs;
public DataSourcegetDataSource()
{
//定义一个Context接口类型的变量
Contextcontext;
try {
//通过InitialContext(实现了Context接口的类)来实例化一个Context类型对象
context=new InitialContext();
//通过字符串名字查找到数据源对象
ds=(DataSource)context.lookup("java:comp/env/jdbc/mydb");
}catch (NamingException e) {
e.printStackTrace();
}
returnds;
}
public ConnectiongetConnection()
{
if(ds==null)
ds=getDataSource();
try {
//通过数据源来获得连接
conn=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
returnconn;
}
public StatementgetStatement()
{
if(conn==null)
conn=getConnection();
try {
//通过连接来创建一个会话
stmt=conn.createStatement();
}catch (SQLException e) {
e.printStackTrace();
}
returnstmt;
}
public ResultSetgetResultSet(String sql)
{
try {
if(stmt==null)
//通过会话来执行sql语句,并返回结果集
rs=stmt.executeQuery(sql);
}catch (SQLException e) {
e.printStackTrace();
}
returnrs;
}
publicstaticvoid main(String[]args)
{
DbHelper db=new DbHelper();
System.out.println(db.getConnection());
}
}
步骤三:在Jsp页面中判断是否连接成功(index.jsp)
<%@ pagecontentType="text/html;charset=gbk"%>
<jsp:useBeanclass="net.pcedu.util.DbHelper"id="db"/>
<%
out.println(db.getConnection());
%>
3.1Javax.naming.Context接口:
Javax.naming.Context接口表示一个命名上下文,定义了将对象(把连接数据库的资源封装成一个对象)和名字绑定,以及通过名字查询对象的方法。查询一个命名的对象,是通过调用Context接口的lookup方法。
资源文件的属性列表
属性
描述
name
指定资源相对于JAVA:COMP/ENV上下文的JNDI名
auth
指定资源的管理者,它有两个选项APPLICATION和Container
type
指定资源所属java类的完整限定名
maxActive
指定在连接池中数据库连接的最大数目,指定这个值需要参照使用的数据库所配置的最大连接数。取值为0,表示没有限制
maxIdle
指定连接池中保留的空闲的数据库连接的最大数目。取值-1表示没有限制
maxWait
指定等待一个数据库连接成为可用状态的最大时间,以毫秒为单位。如果设-1,表示没有限制
username
连接数据库用户名
password
连接数据库密码
driverClassName
指定JDBC驱动程序类名
url
指定数据库的URL
实例:SQL标签库中标签的使用
<%@ taglibprefix="c"uri="http://java.sun.com/jstl/core_rt"%>
<%@ taglibprefix="sql"uri="http://java.sun.com/jstl/sql_rt"%>
<%@ pagecontentType="text/html;charset=gb2312"language="java"%>
<%--从jndi名称空间中获得一个数据源--%>
<sql:setDataSource
var="sc"
dataSource="jdbc/mydb"
/>
<c:outvalue="${sc}"></c:out>
<%--创建普通的数据源--%>
<sql:setDataSource
var="shopcart"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/shopcart"
user="root"
password="admin"
/>
<c:outvalue="ok"/>
<%--使用数据源进行更新--%>
<sql:updatevar="up"dataSource="${sc}">
update user set pwd='123' where name='jack'
</sql:update>
<%--含参数的更新--%>
<sql:updatevar="up1"sql="updateuser set name=? where pwd=?"dataSource="${sc}">
<sql:paramvalue="rose"/>
<sql:paramvalue="123"/>
</sql:update>
<%--增加记录--%>
<sql:updatevar="up2"sql="insertinto user values(1002,'jgl','jgl')"dataSource="${sc}"/>
<c:outvalue="${up2}"></c:out><%--var中存放的是影响的行数--%>
<%--删除记录--%>
<sql:updatevar="up3"sql="deletefrom user"dataSource="${sc}"/>
<%--创建表
<sql:updatevar="up3" sql="create table student(name varchar(20))"dataSource="${sc}"/>
<c:out value="${up3}"></c:out>
--%>
<%--删除表--%>
<sql:updatevar="up4"sql="droptable student"dataSource="${sc}"/>
<%--使用数据源进行查询--%>
<sql:queryvar="query1"dataSource="${sc}">
SELECT * FROM user
</sql:query>
<tableborder="1">
<c:forEachvar="row"items="${query1.rows}">
<tr>
<td>name:<c:out value="${row.name}"/></td>
<td>pwd:<c:out value="${row.pwd}"/></td>
</tr>
</c:forEach>
</table>
<%--使用事务处理方式创建一个表--%>
<%--使用事务处理方式可以将要执行的sql语句放到<sql:transaction>元素中--%>
<sql:transactiondataSource="${sc}">
<sql:updatevar="newTable">
create table usertable (
nameid int primary key,
name varchar(80)
)
</sql:update>
</sql:transaction>
- 【JSTL】JSTL 标签库
- 【JSTL】标准标签库JSTL
- JSTL&EL JSTL标签库
- JSTL 核心标签库标签
- JSTL 核心标签库标签
- JSTL标签库,自定义标签
- JSTL标签库 fn标签
- JSTL标签库 fmt标签
- jstl库标签核心标签
- JSTL标签库:out标签
- JSTL 标签 ------ 核心标签库
- JSTL 标签库介绍
- JSTL标签库
- JSTL标准标签库
- JSTL标准标签库
- JSTL核心标签库
- jstl 函数标签库
- JSTL标签库
- or1200第一个程序
- 关于c++ stack一点小小的疑问
- Android Tabhost with FragmentActivity
- 模拟器iPhone5测试
- BIOS是如何从软盘加载系统引导程序的
- JSTL标签库
- MySql实现跨表查询
- android开发实战系列(19)-- 让用户转移到另一个应用程序
- ZOJ 1298 poj 1135 Domino Effect(最短路,dij)
- linux下防御ddos攻击
- Android的AlertDialog详解
- java_command
- Hive BI analytics: Visual Reporting
- Android中一直走马灯效果的TextView