1.首先让我们来了解一下什么是jstl?
JSTL(JavaServer Pages Standard Tag Library),是jsp(java server pages)的标准标签库,由一系列标签构成的用于便捷操作服务端数据的标签的写法,语法类似于html,使用标签库可以彻底抛弃传统jsp中插入java代码的标签(<%%>和<%=%>).
jstl由以下标签构成:
c标签,
fmt标签,
sql标签,
xml标签,
fn标签,
其中属c标签和fmt标签最为常用.
jstl的使用方式:
1.使用jstl必须先引进两个核心的标签库文件:
standard.jar,jstl.jar(文末附下载资源).
2.将已经创建好的jsp文件中声明需要使用的标签库:
<!--引入标签库-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
c标签(核心标签)主要包含以下几种:
<c:out>
<c:set>
<c:forEach>
<c:if>
<c:choose>
jstl的使用案例:
1.首先创建一个学生实体类:
package com.softeem.entity;
import java.util.Date;
/**
* @author PaxtonWu 2020/8/25 19:19
*/
public class Student {
private int sno;
private String sname;
private String sex;
private Date birth;
private String school;
private boolean married;
public Student() {
}
public Student(int sno, String sname, String sex, Date birth, String school,boolean married) {
this.sno = sno;
this.sname = sname;
this.sex = sex;
this.birth = birth;
this.school = school;
this.married=married;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
@Override
public String toString() {
return "Student{" +
"sno=" + sno +
", sname='" + sname + '\'' +
", sex='" + sex + '\'' +
", birth=" + birth +
", school='" + school + '\'' +
", married=" + married +
'}';
}
}
2.然后在servlet中重写service方法,向集合中添加元素模拟数据库:
package com.softeem.servlet;
import com.softeem.entity.Student;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author PaxtonWu 2020/8/25 20:22
*/
@WebServlet("/stu")
public class StudentServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Student s1=new Student(10,"carlo","女",new Date(),"softeem",false);
Student s2=new Student(11,"judies","女",new Date(),"softeem",true);
Student s3=new Student(12,"rick","男",new Date(),"softeem",false);
Student s4=new Student(13,"carl","男",new Date(),"softeem",true);
Student s5=new Student(14,"negan","男",new Date(),"softeem",false);
List<Student> list=new ArrayList<>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
req.setAttribute("stus",list);
req.getRequestDispatcher("jstl.jsp").forward(req,resp);
}
}
通过req.setAttribute()方法保存数据,并将数据以请求转发的形式传递给jstl.jsp.
3.创建jstl.jsp文件将数据渲染到网页上:
<%--
Created by IntelliJ IDEA.
User: PaxtonWu
Date: 2020/8/25
Time: 20:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>jstl</title>
<style>
table{
margin: 0 auto;
width: 1200px;
border: 1px solid gray;
border-collapse: collapse;
}
td,th{
padding: 5px 10px;
border: 1px solid #b9b9b9;
}
tr{
transition: all .5s;
}
tr:hover{
background: lightgray;
}
</style>
</head>
<body>
<table>
<tr>
<%--<th><input type="checkbox"></th>--%>
<th></th>
<th>序号</th>
<th>学号</th>
<th>姓名</th>
<th>性别</th>
<th>生日</th>
<th>学校</th>
<th>婚否</th>
<th>操作</th>
</tr>
<c:forEach items="${stus}" var="s" varStatus="stat">
<tr style="background:${(stat.count mod 2 eq 0) ? '#eee':''}">
<td><input type="checkbox"></td>
<td>${stat.count}</td>
<td>${s.sno}</td>
<td>${s.sname}</td>
<td>${s.sex}</td>
<td>
<fmt:formatDate value="${s.birth}" pattern="yyyy年MM月dd日"></fmt:formatDate>
</td>
<td>${s.school}</td>
<td>${s.married ? "已婚" : "未婚"}</td>
<td>
<a href="">详情</a>
<a href="">删除</a>
</td>
</tr>
</c:forEach>
</table>
<br>
<select name="" id="">
<c:forEach begin="1900" end="2020" var="year">
<option value="${year}">${year}</option>
</c:forEach>
</select>年
<select name="" id="">
<c:forEach begin="1" end="12" var="month">
<option value="${month}">${month}</option>
</c:forEach>
</select>月
</body>
</html>
该代码使用table标签呈现表格数据,使用<c:forEach>标签循环遍历,使用fmt:formatDate实现日期格式化.
经过以上jsp渲染后的网页如下: