Java标准设计规范:jsp页面只展示数据界面,不做数据处理;Servlet只做业务逻辑处理,不做界面展示
EL表达式的出现,是希望jsp页面中不在出现Java代码,便于维护和阅读
但是EL表达式有局限性:1.不能赋值,只能获取数据;
2.没有条件判断、循环遍历的功能
为了弥补El表达式的不足,推出了JSTL标签库。
JSTL:Java standard tag library:Java标准标签库
使用JSTL需要导入两个jar包 jstl-1.2.jar和standard-1.1.2.jar
放在WebContent\WEB-INF\lib文件夹下面,通过Build path导入到项目中
使用JSTL标签时,需要在jsp页面中通过taglib指令来导入 ,需要配置如下两个参数
uri="",标签所在路径 uri在导入的JSTL标签库的META-INF文件夹c.tld(核心标签库)文件中的
<uri>http://java.sun.com/jsp/jstl/core</uri>;标签中。
高版本的eclipse或者Javaee5.0以上的工程会自动提示以供选择 使用什么标签,都要设定对应的uri
prefix=""标签的前缀,在对应标签的<short-name>c</short-name>中可以找到
JSTL标签库中的标签,在导入以后,都是以前缀名作为标志的
JSTL标签中的c标签,被称为核心标签
JSTL标签库包含有:核心标签库(c标签):主要封装的是一些基本的核心业务逻辑
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
格式化和国际化标签库(fmt标签):主要封装的是一些进行数据格式化和国际化的业务。比如如期格式化等。
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
数据库标签库(aql标签):主要封装的是操作数据库的业务逻辑
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
xml标签库(x标签) :主要封装的是一些解析xml数据的业务逻辑
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="xml"%>
JSTL函数标签库(fn函数):主要封装的是常见函数。如string。
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
重点掌握:核心标签库(c标签) 函数标签库(fn标签)格式化和 国际化标签库(fmt标签)
核心标签库包括:
1.c:out标签:<c:out escapeXml="" default="" value="">
标签作用:向页面输出指定内容
escapeXml:指定是否输出为xml格式输出 ,只能接受参数true/false
true:会对输出的数据进行转义(转义只针对特殊字符)
false:不会对输出内容进行转义
default:指定默认的输出值
value:输出的内容。可以是<%= %>表达式和EL表达式
<c:out value="${hehe1}"></c:out>
等价于pageContext.getAttribute("hehe1");
2.c:set标签:<c:set scope="" value="" property="" var="" target=""></c:set>
标签的作用:设置一个域或者集合中的属性
var:指定域中的属性名
value:指定域中的属性值
scope:指定域对象
target:指定集合名或者对象名 ,即赋值的目标。可以是EL表达式
property:指定集合的属性名或者对象的属性名,即需要赋值的对象属性
2.1保存数据:在设置值的时候可以通过scope:指定数据存放的域对象
<c:set var="hehe1" value="hehe"></c:set>
默认情况下数据放在pageContext域中
保存的值可以通过EL表达式取出 ,不能直接用<%= %>表达式取出
${hehe }或者<c:out value="${hehe1}"></c:out>
2.2可以给域中的对象赋值
<%
//创建对象
User user = new User();
//把对象放到域中
pageContext.setAttribute("user", user);
//给对象赋值
%>
<c:set target="${user}" property="name" value="dslfkl"> </c:set>
<c:set target="${user}" property="name" value="password"> </c:set>
获取设置的值
${user.name } ${user.password}
3.c:remove标签 <c:remove var="" scope=""/>
标签作用:删除域中的属性
var:指定要删除的属性的名称
scope:指定域名
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>Before Remove Value: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>After Remove Value: <c:out value="${salary}"/></p>
4.c:catch标签 <c:catch var=""></c:catch>
标签作用:捕获异常
var:指定异常对象以什么属性存储在page域中
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${catchException != null}">
<p>The exception is : ${catchException} <br />
There is an exception: ${catchException.message}</p>
</c:if>
5.c:if标签<c:if test=""></c:if>相当于if语句
标签作用:对于指定的条件语句,如果成立,则执行标签体内容
test:指定判断条件
6.c:choose标签 <c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
标签作用:实现if else的功能
<c:choose>:外部选择
<c:when test="">指定条件语句成立时执行的标签内容
test:指定判断的条件语句
<c:otherwise>指定的条件不成立时执行的标签内容
7.c:forEach标签<c:forEach items="" var=""</c:forEach>
标签作用:该标签实现的功能是Java中forEach的功能
属性 属性描述 是否必要 默认值
items 要被循环的信息 否 无
begin 开始的元素(0=第一个元素,1=第二个元素) 否 0
end 最后一个元素(0=第一个元素,1=第二个元素) 否 Last element
step 每一次迭代的步长 否 1
var 代表当前条目的变量名称 否 无
varStatus 代表循环状态的变量名称 否 无
items: 要迭代的对象或变量名
var: 迭代变量名
//准备数据
List<User> userList = new ArrayList<User>();
userList.add(new User("aa","aa"));
userList.add(new User("bb","bb"));
userList.add(new User("cc","cc"));
userList.add(new User("dd","dd"));
//把数据放进域中
pageContext.setAttribute("userList", userList);
<c:forEach items="userList" var="user">
姓名:${user.username} 密码:${user.password}
</c:forEach>
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
8.c:url标签 <c:url context="" scope="" value="" var="">
<c:param name="" value="">
标签作用:指定链接跳转时的参数
name:指定参数的属性名称
value:指定参数的值
</c:param>
</c:url>
标签作用:指定跳转链接
context:指定网站/网址
scope:指定域
value:指定属性的值
var:指定属性的名称
<c:url context="aa" scope="page" value="http://www.baidu.com" var="index">
<c:param name="name" value="hehe">
</c:param>
</c:url>
9.c:redirect标签(实现重定向功能)<c:redirect context="" url=""></c:redirect>
标签作用:重定向到指定页面
url:目标URL 无默认值
context:一个本地网络应用程序的名称,默认为当前应用
<c:redirect url="http://www.w3cschool.cc"/>
10.c:forTokens标签
标签作用:该标签实现的功能是Java中forEach的功能
属性 属性描述 是否必要 默认值
items 要被循环的信息 否 无
begin 开始的元素(0=第一个元素,1=第二个元素) 否 0
end 最后一个元素(0=第一个元素,1=第二个元素) 否 Last element
step 每一次迭代的步长 否 1
var 代表当前条目的变量名称 否 无
varStatus 代表循环状态的变量名称 否 无
delims 分隔符 是 无
items: 要迭代的对象或变量名
var: 迭代变量名
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
11.c:import标签
标签作用<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL
属性 属性描述 是否必要 默认值
url 需要检索和引入的页面的URL 是 无
context /紧接着一个本地网络应用程序的名称 否 当前应用程序
charEncoding 所引入的数据的字符编码集 否 ISO-8859-1
var 用于存储所引入的文本的变量 否 Print to page
scope var属性的作用域 否 Page
varReader 可选的用于提供java.io.Reader对象的变量 否 无
EL表达式的出现,是希望jsp页面中不在出现Java代码,便于维护和阅读
但是EL表达式有局限性:1.不能赋值,只能获取数据;
2.没有条件判断、循环遍历的功能
为了弥补El表达式的不足,推出了JSTL标签库。
JSTL:Java standard tag library:Java标准标签库
使用JSTL需要导入两个jar包 jstl-1.2.jar和standard-1.1.2.jar
放在WebContent\WEB-INF\lib文件夹下面,通过Build path导入到项目中
使用JSTL标签时,需要在jsp页面中通过taglib指令来导入 ,需要配置如下两个参数
uri="",标签所在路径 uri在导入的JSTL标签库的META-INF文件夹c.tld(核心标签库)文件中的
<uri>http://java.sun.com/jsp/jstl/core</uri>;标签中。
高版本的eclipse或者Javaee5.0以上的工程会自动提示以供选择 使用什么标签,都要设定对应的uri
prefix=""标签的前缀,在对应标签的<short-name>c</short-name>中可以找到
JSTL标签库中的标签,在导入以后,都是以前缀名作为标志的
JSTL标签中的c标签,被称为核心标签
JSTL标签库包含有:核心标签库(c标签):主要封装的是一些基本的核心业务逻辑
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
格式化和国际化标签库(fmt标签):主要封装的是一些进行数据格式化和国际化的业务。比如如期格式化等。
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
数据库标签库(aql标签):主要封装的是操作数据库的业务逻辑
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
xml标签库(x标签) :主要封装的是一些解析xml数据的业务逻辑
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="xml"%>
JSTL函数标签库(fn函数):主要封装的是常见函数。如string。
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
重点掌握:核心标签库(c标签) 函数标签库(fn标签)格式化和 国际化标签库(fmt标签)
核心标签库包括:
1.c:out标签:<c:out escapeXml="" default="" value="">
标签作用:向页面输出指定内容
escapeXml:指定是否输出为xml格式输出 ,只能接受参数true/false
true:会对输出的数据进行转义(转义只针对特殊字符)
false:不会对输出内容进行转义
default:指定默认的输出值
value:输出的内容。可以是<%= %>表达式和EL表达式
<c:out value="${hehe1}"></c:out>
等价于pageContext.getAttribute("hehe1");
2.c:set标签:<c:set scope="" value="" property="" var="" target=""></c:set>
标签的作用:设置一个域或者集合中的属性
var:指定域中的属性名
value:指定域中的属性值
scope:指定域对象
target:指定集合名或者对象名 ,即赋值的目标。可以是EL表达式
property:指定集合的属性名或者对象的属性名,即需要赋值的对象属性
2.1保存数据:在设置值的时候可以通过scope:指定数据存放的域对象
<c:set var="hehe1" value="hehe"></c:set>
默认情况下数据放在pageContext域中
保存的值可以通过EL表达式取出 ,不能直接用<%= %>表达式取出
${hehe }或者<c:out value="${hehe1}"></c:out>
2.2可以给域中的对象赋值
<%
//创建对象
User user = new User();
//把对象放到域中
pageContext.setAttribute("user", user);
//给对象赋值
%>
<c:set target="${user}" property="name" value="dslfkl"> </c:set>
<c:set target="${user}" property="name" value="password"> </c:set>
获取设置的值
${user.name } ${user.password}
3.c:remove标签 <c:remove var="" scope=""/>
标签作用:删除域中的属性
var:指定要删除的属性的名称
scope:指定域名
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>Before Remove Value: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>After Remove Value: <c:out value="${salary}"/></p>
4.c:catch标签 <c:catch var=""></c:catch>
标签作用:捕获异常
var:指定异常对象以什么属性存储在page域中
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${catchException != null}">
<p>The exception is : ${catchException} <br />
There is an exception: ${catchException.message}</p>
</c:if>
5.c:if标签<c:if test=""></c:if>相当于if语句
标签作用:对于指定的条件语句,如果成立,则执行标签体内容
test:指定判断条件
6.c:choose标签 <c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
标签作用:实现if else的功能
<c:choose>:外部选择
<c:when test="">指定条件语句成立时执行的标签内容
test:指定判断的条件语句
<c:otherwise>指定的条件不成立时执行的标签内容
7.c:forEach标签<c:forEach items="" var=""</c:forEach>
标签作用:该标签实现的功能是Java中forEach的功能
属性 属性描述 是否必要 默认值
items 要被循环的信息 否 无
begin 开始的元素(0=第一个元素,1=第二个元素) 否 0
end 最后一个元素(0=第一个元素,1=第二个元素) 否 Last element
step 每一次迭代的步长 否 1
var 代表当前条目的变量名称 否 无
varStatus 代表循环状态的变量名称 否 无
items: 要迭代的对象或变量名
var: 迭代变量名
//准备数据
List<User> userList = new ArrayList<User>();
userList.add(new User("aa","aa"));
userList.add(new User("bb","bb"));
userList.add(new User("cc","cc"));
userList.add(new User("dd","dd"));
//把数据放进域中
pageContext.setAttribute("userList", userList);
<c:forEach items="userList" var="user">
姓名:${user.username} 密码:${user.password}
</c:forEach>
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
8.c:url标签 <c:url context="" scope="" value="" var="">
<c:param name="" value="">
标签作用:指定链接跳转时的参数
name:指定参数的属性名称
value:指定参数的值
</c:param>
</c:url>
标签作用:指定跳转链接
context:指定网站/网址
scope:指定域
value:指定属性的值
var:指定属性的名称
<c:url context="aa" scope="page" value="http://www.baidu.com" var="index">
<c:param name="name" value="hehe">
</c:param>
</c:url>
9.c:redirect标签(实现重定向功能)<c:redirect context="" url=""></c:redirect>
标签作用:重定向到指定页面
url:目标URL 无默认值
context:一个本地网络应用程序的名称,默认为当前应用
<c:redirect url="http://www.w3cschool.cc"/>
10.c:forTokens标签
标签作用:该标签实现的功能是Java中forEach的功能
属性 属性描述 是否必要 默认值
items 要被循环的信息 否 无
begin 开始的元素(0=第一个元素,1=第二个元素) 否 0
end 最后一个元素(0=第一个元素,1=第二个元素) 否 Last element
step 每一次迭代的步长 否 1
var 代表当前条目的变量名称 否 无
varStatus 代表循环状态的变量名称 否 无
delims 分隔符 是 无
items: 要迭代的对象或变量名
var: 迭代变量名
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
11.c:import标签
标签作用<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL
属性 属性描述 是否必要 默认值
url 需要检索和引入的页面的URL 是 无
context /紧接着一个本地网络应用程序的名称 否 当前应用程序
charEncoding 所引入的数据的字符编码集 否 ISO-8859-1
var 用于存储所引入的文本的变量 否 Print to page
scope var属性的作用域 否 Page
varReader 可选的用于提供java.io.Reader对象的变量 否 无
<c:import var="data" url="http://www.w3cschool.cc"/>
<c:out value="${data}"/>
格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:parseDate> 解析一个代表着日期或时间的字符串
<fmt:bundle> 绑定资源
<fmt:setLocale> 指定地区
<fmt:setBundle> 绑定资源
<fmt:timeZone> 指定时区
<fmt:setTimeZone> 指定时区
<fmt:message> 显示资源配置文件信息
<fmt:requestEncoding> 设置request的字符编码
文章引用来自:http://blog.youkuaiyun.com/ning_xian_hong/article/details/45267875?ref=myread
<c:out value="${data}"/>
格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:parseDate> 解析一个代表着日期或时间的字符串
<fmt:bundle> 绑定资源
<fmt:setLocale> 指定地区
<fmt:setBundle> 绑定资源
<fmt:timeZone> 指定时区
<fmt:setTimeZone> 指定时区
<fmt:message> 显示资源配置文件信息
<fmt:requestEncoding> 设置request的字符编码
文章引用来自:http://blog.youkuaiyun.com/ning_xian_hong/article/details/45267875?ref=myread