You are on page 1of 6

1

Using Java JSP Standard Tag Library (JSTL)


https://itphutran.com/huong-dan-su-dung-jsp-standard-tag-library-jstl-trong-java/
1. JSTL là gì?
JSTL là viết tắt của cụm từ JSP Standard Tag Library (JSTL) là một thư viện thẻ chuẩn cung cấp các thẻ để
kiểm soát hành vi trang, lặp đi lặp lại và các lệnh điều khiển, các thẻ quốc tế hóa, và các thẻ SQL, JSTL được
viết ngay tại trang JSP.
Từ sự phát triển của Taglibs và những nhược điểm khi xử lý code business logic cũng như những người mới
học Java trở nên khó hiểu hơn thì JavaServerPages Standard Tag Library (JSTL) được sinh ra cùng với đó
JSTL kết hợp với biểu thức Expression language (EL), JSTL đã loại bỏ scriptlet khi viết code trong trang
JSP.
2. Điều kiện cần để sử dụng Standard Tag Library (JSTL)
Để sử dụng JSTL trong các trang JSP của bạn, bạn cần phải tải về các thư viện JSTL cho bộ chứa Servlet
(container servlet) của bạn.Thông thường những thư viện chúng ta đặt trong thư mục WEB-INF/lib của project.
Và nếu project của bạn là Maven thì bạn cần phải khai báo các thư viện này trong pom.xml.
 Nếu Project bình thường các bạn cần download thư viện JSTL tại đây:
http://www.java2s.com/Code/Jar/j/Downloadjstljar.htm
3. Các thư viện thẻ chuẩn của Standard Tag Library (JSTL)
Dựa vào trang chủ của thư viện JSTL chúng ta có 5 loại chính như sau:
Chức năng Mô tả – Khai báo
Chứa các lệnh điều khiển như như if, choose when otherwise,vòng lặp như forEach…. Để
Các thẻ cơ bản sử dụng JSTL core tags, bạn cần khai báo vào trong trang JSP đang sử dụng như sau:
(Core Tags)
 <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
Các thẻ định dạng Thông thường loại thẻ này dùng để định dạng và quốc tế hóa, thường sử dụng như để định
và địa phương hóa dạng số, ngày tháng năm…muốn sử dụng bạn cần khai báo vào trong trang JSP đang sử
(quốc tế hóa). dụng như sau:
(Formatting and
Localization Tags)  <%@ taglib uri=”http://java.sun.com/jsp/jstl/fmt” prefix=”fmt” %>

Các thẻ JSTL SQL cung cấp các hỗ trợ cho việc tương tác với cơ sở dữ liệu quan hệ
Các thẻ SQL như MySql, SQL server, Oracle … Thông thường chúng ta sử dụng loại thẻ này để truy
(SQL Tags) xuất CSDL, muốn sử dụng bạn cần khai báo vào trong trang JSP đang sử dụng như sau:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/sql” prefix=”sql” %>
Chức năng chính của loại thẻ này là phân tích và đọc dữ liệu từ file XML.Muốn sử dụng
Các thẻ XML bạn cần khai báo vào trong trang JSP đang sử dụng như sau:
(XML Tags)
 <%@ taglib uri=”http://java.sun.com/jsp/jstl/xml” prefix=”x” %>
Thẻ JSTL cung cấp một số chức năng mà chúng ta có thể sử dụng để thực hiện các toán tử
Các thẻ hàm JSTL thông dùng, thông thường là String như nối chuỗi… Muốn sử dụng bạn cần khai báo vào
(JSTL Functions trong trang JSP đang sử dụng như sau:
Tags)
 <%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn” %>

4. Ý nghĩa các thẻ Standard Tag Library (JSTL)


2

 Core Tags – Các thẻ tandard Tag Library (JSTL) cơ bản


Tên thẻ Ý nghĩa
<c:catch> Catch những exception xảy ra trong code body
<c:choose> Chọn 1 trong nhiều đoạn mã để thi hành khi thỏa mãn điều kiện nào đó
<c:forEach> Vòng lặp quét hết tập hợp nào đó
<c:forToken> Vòng lặp quét hết 1 chuỗi nào đó theo chuỗi phân cách
<c:if> Thi hành đoạn code khi thỏa mãn điều kiện
<c:import> Import một URL nào đó
<c:otherwise> Xác định giá trị mặc định cho <c:choose>
<c:out> Gửi output cho JspWriter hiện hành
<c:param> Xác định 1 tham số URL cho <c:import> hay <c:url>
<c:redirect> Điều hướng request sang URL mới
<c:remove> Xóa 1 đối tượng trong 1 scope nào đó
<c:set> Tạo 1 đối tượng trong 1 scope nào đó
<c:url> Tạo 1 URL
<c:when> Khai báo điều kiện trong <c:choose>
 Các thẻ định dạng và địa phương hóa – Formatting Action:
Tên thẻ Ý nghĩa
<fmt:bundle> Xác định resoure bundle cho các messge đi kèm trong thẻ fmt:bundle
<fmt:setBundle> Xác định resoure bundle và gán vào 1 biến để dùng sau này
<fmt:formatDate> Định dạng ngày theo 1 vùng địa lý nào đó
<fmt:formatNumber> Định dạng số theo 1 vùng địa lý nào đó
<fmt:message> Truy xuất vào 1 message trong bundle
 Các thẻ SQL (SQL Tags) trong JSTL
Thẻ Miêu tả
<sql:setDataSource> Tạo một DataSource đơn giản chỉ thích hợp cho prototype
Thực thi SQL query được định nghĩa trong phần thân của nó hoặc thông qua thuộc tính
<sql:query>
sql
Thực thi SQL update được định nghĩa trong phần thân của nó hoặc thông quan thuộc tính
<sql:update>
sql
<sql:param> Thiết lập một parameter trong một lệnh SQL tới giá trị đã xác định
<sql:dateParam> Thiết lập một parameter trong một lệnh SQL tới giá trị java.util.Date đã xác định
Cung cấp các phần tử database action được lặp với một Connection đã chia sẻ, thiết lập để
<sql:transaction >
thực thi tất cả các lệnh
 Các thẻ XML (XML Tags) trong JSTL
Thẻ Miêu tả
<x:out> Giống <%= … >, nhưng dành cho các XPath Expression
<x:parse> Sử dụng để parse XML data được xác định hoặc thông qua một thuộc tính hoặc trong phần thân
3

thẻ
<x:set > Thiết lập một biến tới giá trị của một XPath expression
Ước lượng XPath Expression và nếu nó là true, thì nó xử lý phần thân thẻ. Nếu điều kiện là
<x:if >
false, phần thân bị bỏ qua
<x:forEach> Lặp qua các node trong một tài liệu XML
Thẻ điều kiện đơn giản mà thiết lập một context cho hoạt động điều kiện loại trừ, được đánh dấu
<x:choose>
bởi <when> và <otherwise> trong JSTL
<x:when > Thẻ phụ của <choose> mà bao phần thân thẻ nếu Expression được ước lượng là ‘true’
<x:otherwise Thẻ phụ của <choose> mà theo sau các thẻ <when> và chỉ chạy khi nếu tất cả điều kiện trước là
> ‘false’
<x:transform
Áp dụng một phép biến đổi XSL trên một tài liệu XML
>
<x:param > Sử dụng cùng với thẻ transform để thiết lập một parameter trong XSLT stylesheet
 Các thẻ hàm JSTL(JSTL Functions Tags)
Hàm (function) Miêu tả
fn:contains() trong JSTL Kiểm tra nếu một chuỗi input chứa chuỗi phụ đã cho
fn:containsIgnoreCase() trong Kiểm tra nếu một chuỗi input chứa chuỗi phụ đã cho trong trường hợp không
JSTL phân biệt kiểu chữ
fn:endsWith() trong JSTL Kiểm tra nếu một chuỗi input kết thúc với suffix đã cho
fn:escapeXml() trong JSTL Các ký tự thoát mà có thể được phiên dịch như XML markup
fn:indexOf() trong JSTL Trả về index bên trong một chuỗi về sự xuất hiện đầu tiên của chuỗi phụ
fn:join() trong JSTL Kết hợp tất cả phần tử trong một mảng thành một chuỗi
fn:length() trong JSTL Trả về số item trong một tập hợp, hoặc số ký tự trong một chuỗi
Trả về một chuỗi là kết quả của việc thay thế một chuỗi input với một chuỗi
fn:replace() trong JSTL
đã cho
fn:split() trong JSTL Chia một chuỗi thành một mảng các chuỗi phụ
fn:startsWith() trong JSTL Kiểm tra nếu một chuỗi input bắt đầu với prefix đã cho
fn:substring() trong JSTL Trả về một tập con của một chuỗi
fn:substringAfter() trong JSTL Trả về một tập con của một chuỗi ở sau một chuỗi phụ đã cho
fn:substringBefore() trong JSTL Trả về một tập con của một chuỗi ở trước một chuỗi phụ đã cho
fn:toLowerCase() trong JSTL Biến đổi tất cả ký tự của một chuỗi thành chữ thường
fn:toUpperCase() trong JSTL Biến đổi tất cả ký tự của một chuỗi thành chữ hoa
fn:trim() trong JSTL Gỡ bỏ các khoảng trống trắng từ hai đầu của một chuỗi
5. Áp dụng JSP Standard Tag Library (JSTL) quá các ví dụ
Trong phần này, tôi sẽ hướng dẫn các bạn những ví dụ cụ thể về JSTL trong jsp với phần core jstl, những phần
khác cũng hoàn toàn tương tự cách sử dụng:
Tạo các tệp sau:
Tệp SinhVien.java
public class SinhVien {
4

private int id;


private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SinhVien(int id, String name) {
super();
this.id = id;
this.name = name;
}
public SinhVien() {
super();
}
}

Tệp SinhVienController.java
import java.util.ArrayList;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
 
import com.itphutran.entities.SinhVien;
 
@Controller
@RequestMapping("/sinh-vien")
public class SinhVienController {
@GetMapping("")
public String index(ModelMap modelMap){
ArrayList<SinhVien> listSV = new ArrayList<SinhVien>();
listSV.add(new SinhVien(1,"Đoàn Phương Linh"));
listSV.add(new SinhVien(2, "Lưu Bị"));
listSV.add(new SinhVien(3, "Tào Tháo"));
listSV.add(new SinhVien(4, "Phú IT"));
modelMap.addAttribute("listSV",listSV);
return "index";
}
5

Sử dụng các thẻ JSTL – JSP Standard Tag Library:


 Sử dụng thẻ <c:forEach> -dùng để lặp quét hết danh sách nào đó:
Tại trang index.jsp để hiển thị danh sách từ controler truyền sang view, chúng ta áp dụng vòng lặp foreach của
thẻ tiêu chuẩn jstl như sau:
Tệp index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"  %>
<!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>Danh sách sinh viên</title>
</head>
<body style="margin:0 auto; width:1024px">
<h1>Danh sách sinh viên</h1>
<table width="100%" border="1" cellpadding="1" cellspacing="1">
<tr>
<th width="10%">Mã SV</th>
<th width="50%">Tên SV</th>
</tr>
<c:forEach items="${listSV }" var="objSV">
<tr>
<td>${objSV.id }</td>
<td>${objSV.name }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Sử dụng <c:if> được sử dụng để kiểm tra một điều kiện nào đó là đúng hay sai:
<c:if test="${listSV.get(2).id % 2 != 0}">
<p>Sinh viên ${listSV.get(2).name } có ID là ${listSV.get(2).id} số lẻ!</p>
</c:if>
c:choose – c:when – c:otherwise: Tương tự như trường hợp sử dụng if -> else if -> else if… else hoặc như
trường hợp switch case (c:choose – c:when – c:otherwise trong JSTL)

<c:choose>
<c:when test="${listSV.get(2).id % 2 != 0}">
<p>Sinh viên ${listSV.get(2).name } có ID là ${listSV.get(2).id} số lẻ!</p>
</c:when>
<c:otherwise>
<p>Sinh viên ${listSV.get(2).name } có ID là ${listSV.get(2).id} số Chẵn!</p>
</c:otherwise>
</c:choose>
6

You might also like