1、JSTL简介
JSTL:( JSPStandard Tag Library ) JSP标准标签库
JSP标签是Sun公司定义的一套标准,由Apache组织基于这套标准开发的一套标签库后又转给Sun公司,被称为JSTL,成为了JavaEE5.0的核心
2、如何使用JSTL?
将JSTL标签对应的jar文件拷贝到WEB-INF/lib目录下
![](https://img-blog.csdn.net/20171009213539850?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVueGlhb2hhaTg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用taglib指令导入要使用的JSP标签 <%@taglib uri="" prefix=""%>
uri:JSP标签的命名空间
prefix:命名空间的前缀
3、JSTL标签库分类
core:核心标签库
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
fmt:格式化标签库
<%@taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
sql:数据库标签库
<%@taglib prefix="s" uri="http://java.sun.com/jstl/sql" %>
xml:xml标签库
<%@taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
JSTL 函数
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
4、常用的标签
if标签的使用:实现Java语言中if语句的功能:
<c:if test="codition" var="name" scope="applicationArea">
...
</c:if>
test:判断表达式返回true/false
var: 用于存储条件结果的变量
scope: var属性的作用域
forEach标签:实现对集合中对象的遍历
<c:forEach items="" var="" begin="" end="" step="" varStatus="">
--循环体代码--
</c:forEach>
其中,items指定要遍历的集合对象;
var指定当前成员的引用;
begin指定从集合的第几位开始;
end指定迭代到集合的第几位结束;
step指定循环的步长;
varStatus属性用于存放var引用的成员的相关信息,如索引等
web.xml:
user_list.jsp页面如下:
JSTL:( JSPStandard Tag Library ) JSP标准标签库
JSP标签是Sun公司定义的一套标准,由Apache组织基于这套标准开发的一套标签库后又转给Sun公司,被称为JSTL,成为了JavaEE5.0的核心
2、如何使用JSTL?
将JSTL标签对应的jar文件拷贝到WEB-INF/lib目录下
使用taglib指令导入要使用的JSP标签 <%@taglib uri="" prefix=""%>
uri:JSP标签的命名空间
prefix:命名空间的前缀
3、JSTL标签库分类
core:核心标签库
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
fmt:格式化标签库
<%@taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
sql:数据库标签库
<%@taglib prefix="s" uri="http://java.sun.com/jstl/sql" %>
xml:xml标签库
<%@taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
JSTL 函数
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
4、常用的标签
if标签的使用:实现Java语言中if语句的功能:
<c:if test="codition" var="name" scope="applicationArea">
...
</c:if>
test:判断表达式返回true/false
var: 用于存储条件结果的变量
scope: var属性的作用域
forEach标签:实现对集合中对象的遍历
<c:forEach items="" var="" begin="" end="" step="" varStatus="">
--循环体代码--
</c:forEach>
其中,items指定要遍历的集合对象;
var指定当前成员的引用;
begin指定从集合的第几位开始;
end指定迭代到集合的第几位结束;
step指定循环的步长;
varStatus属性用于存放var引用的成员的相关信息,如索引等
5、使用案例
本案例使用三层结构(表现层、服务层、持久层),在表现层(Userservlet)调用服务层的查询所有用户的方法查询所有的用户返回一个List集合,这里只是列出主要的步骤,查询方法的实现就不列出。
Users.java 如下:
package cn.sz.pojo;
import java.io.Serializable;
import java.util.Date;
public class Users implements Serializable {
private Integer userId;
private String loginName;
private String loginPwd;
private String realName;
private Date birthday;
private String userDesc;
private String money;
public Users() {
super();
}
public Users(Integer userId, String loginName, String loginPwd, String realName, Date birthday, String userDesc,
String money) {
this.userId = userId;
this.loginName = loginName;
this.loginPwd = loginPwd;
this.realName = realName;
this.birthday = birthday;
this.userDesc = userDesc;
this.money = money;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getUserDesc() {
return userDesc;
}
public void setUserDesc(String userDesc) {
this.userDesc = userDesc;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
}
表现层(Userservlet.java):
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 调用service层的查询方法
IUserService userbiz = new UserServiceImpl();
List<Users> list = userbiz.findAllUsers();
// 用request保存查询结果
request.setAttribute("list", list);
// 跳转到user_list.jsp页面
request.getRequestDispatcher("user_list.jsp").forward(request, response);
}
}
web.xml:
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>cn.sz.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
user_list.jsp页面如下:
<%--设置 isElIgnored="false",打开EL表达式的支持--%>
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8"
language="java"%>
<%--引入JSTL核心标签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%--引入JSTL格式化标签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%--引入JJSTL 函数标签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<h3>user_list.jsp显示用户信息页面</h3>
<table border="1" width="800" cellspacing="0">
<tr>
<th>编号</th>
<th>登录名</th>
<th>真实姓名</th>
<th>出生日期</th>
<th>个人简介</th>
<th>工资</th>
<th>操作</th>
</tr>
<c:if test="${list==null }">
<tr>
<td colspan="7">没有数据</td>
</tr>
</c:if>
<c:forEach items="${list }" var="u" varStatus="uindex">
<!-- count,index都表示行的索引号,count从1开始;index从0开始 -->
<!-- 如果是偶数行,为该行换背景颜色 -->
<tr <c:if test="uindex.count%2==0">bgcolor="gray"</c:if>>
<td>${u.userId }</td>
<td>${u.loginName }</td>
<td>${u.realName }</td>
<td>
<!--格式化时间--> <fmt:formatDate value="${u.birthday }"
pattern="yyyy-MM-dd HH:mm:ss" />
</td>
<td>
<!--截取15个字符,多余的用...代替--> <!-- ${u.userDesc } -->
${fn:substring(u.userDesc,0,15) } ${fn:length(u.userDesc)>15 ? "...":"" }
</td>
<td>
<!--格式化工资--> <fmt:formatNumber value="${u.money }"
pattern="¥0000.00" />
</td>
<td></td>
</tr>
</c:forEach>
</table>
</body>
</html>
结果: