Xu Hướng

Game

Thủ Thuật

Học Tập

Tâm Sự

Office

PhotoShop

no image
JavaServer Pages (JSP) là một công nghệ lập trình Server-Side mà cho bạn khả năng xây dựng các ứng dụng trên Web động, độc lập nền tảng. JSP có quyền truy cập tới toàn bộ gia đình Java APIs, bao gồm JDBC API để truy cập Enterprise Database. Loạt bài này sẽ hướng dẫn bạn cách sử dụng Java Server Pages (JSP) để phát triển các ứng dụng Web theo các bước đơn giản và dễ dàng.
Sử dụng JSP, bạn có thể thu thập input từ người dùng thông qua các Webpage Form, trình bày các record từ một Database hoặc đăng ký quyền ưu tiên của người dùng, truy cập các thành phần JavaBeans, truyền điều khiển giữa các page và chia sẻ thông tin giữa các Request, page, …
Dưới đây là danh sách các bài hướng dẫn học JSP cơ bản và nâng cao:
MỤC LỤC

Cơ bản về JSP

  • JSP - Giới thiệu
  • JSP - Tổng quan
  • JSP - Cài đặt môi trường
  • JSP - Cấu trúc
  • JSP - Vòng đời (Life Cycle)
  • JSP - Cú pháp
  • JSP - Directive
  • JSP - Action
  • JSP - Đối tượng ẩn (Implicit)
  • JSP - Client Request
  • JSP - Server Response
  • JSP - Http Code
  • JSP - Xử lý Form
  • JSP - Filter
  • JSP - Xử lý Cookie
  • JSP - Session Tracking
  • JSP - Upload File
  • JSP - Date
  • JSP - Page Redirect
  • JSP - Hit Counter
  • JSP - Auto Refresh
  • JSP - Gửi Email
  • JSP nâng cao
  • JSP - Standard Tag Library (JSTL)
  • JSP - Truy cập Database
  • JSP - XML Data
  • JSP - JavaBean
  • JSP - Custom Tags
  • JSP - Expression Language (EL)
  • JSP - Xử lý ngoại lệ (Exception)
  • JSP - Debug
  • JSP - Bảo mật
  • JSP - Đa ngôn ngữ
Loạt bài hướng dẫn JSP cơ bản giúp bạn hiểu các khái niệm cũng như tính năng cơ bản của Java Server Pages (JSP) để phát triển các ứng dụng Web. Chúng tôi cung cấp hàng loạt ví dụ minh họa cũng như trình bày chi tiết từng chủ đề, từ đó giúp bạn thích thú với bài học hơn, giúp nâng cao kiến thức của bạn.
Bạn nên biết về các ứng dụng Web làm việc qua HTTP, về Web Server, về trình duyệt web. Ngoài ra, bạn nên trang bị cho mình kiến thức về phát triển ứng dụng Web bởi sử dụng bất kỳ ngôn ngữ lập trình nào.
no image

JavaServer Pages (JSP) là gì?

JavaServer Pages (JSP) là một công nghệ để phát triển các Webpage mà hỗ trợ nội dung động, giúp các lập trình viên chèn java code vào trong các HTML page bằng việc sử dụng các JSP tag đặc biệt, hầu hết bắt đầu với <% và kết thúc với %>.
Một thành phần JavaServer Pages (JSP) là một loại Java Servlet, được thiết kế để thực hiện vai trò của một giao diện người dùng (User Interface) cho một ứng dụng Java Web. Lập trình viên Web viết JSPs như là các text file mà kết nối HTML code hoặc XHTML code, phần tử XHTML, và các JSP actions và câu lệnh JSP được nhúng.
Sử dụng JSP, bạn có thể thu thập input từ người dùng thông qua các Webpage Form, trình bày các record từ một Database hoặc đăng ký quyền ưu tiên của người dùng, truy cập các thành phần JavaBeans, truyền điều khiển giữa các page và chia sẻ thông tin giữa các Request, page, …

Tại sao sử dụng JSP?

JavaServer Pages (JSP) thường hoạt động với cùng mục đích như các chương trình độc lập bởi sử dụng Common Gateway Interface (CGI). Nhưng JSP thường có một số lợi thế trong khi so sánh với CGI:
  • Hiệu năng tốt hơn đáng kể bởi vì JSP cho phép nhúng các phần tử động trong chính các HTML page thay vì phải có một CGI file riêng biệt.
  • JSP luôn luôn được biên dịch trước khi nó được xử lý bởi Server, không giống như CGI/Perl mà yêu cầu Server tải một trình thông dịch (Interpreter) và Target Script mỗi khi trang được yêu cầu.
  • JavaServer Pages (JSP) được xây dựng ở trên cùng của Java Servlet API, vì thế, giống Servlet, JSP cũng có quyền truy cập tới tất cả Enterprise Java APIs mạnh mẽ, bao gồm JDBC, EJB, JAXP, …
  • Các JSP page có thể được sử dụng để kết nối với Servlet mà xử lý Business logic, mô hình được hỗ trợ bởi Java Servlet.
Cuối cùng, JSP là một phần toàn bộ của Java EE, một Platform đầy đủ cho các ứng dụng lớp Enterprise. Nghĩa là, JSP có thể hoạt động như là một phần trong các ứng dụng đơn giản nhất cũng như các ứng dụng phức tạp.

Lợi thế của JSP

Dưới đây là các lợi thế của việc sử dụng JSP khi so sánh với các công nghệ khác:
  • So với Active Server Pages (ASP): Lợi thế của JSP có thể coi là gấp đôi. Đầu tiên, các phần động được viết bằng Java, không phải bằng Visual Basic hoặc ngôn ngữ MS khác, vì thế nó mạnh mẽ hơn và dễ dàng để sử dụng hơn. Thứ hai, nó thích hợp cho các Hệ điều hành khác, không chỉ là Microsoft Web Server.
  • So với Pure Servlets: Nó tiện lợi hơn khi viết (và sửa đổi) HTML, vì có nhiều lệnh printIn hơn.
  • So với Server-Side Includes (SSI): SSI chỉ dành cho các thể đơn giản, không dành cho các chương trình "thực" mà sử dụng Form Data, tạo kết nối Database.
  • So với JavaScript: JavaScript có thể tạo HTML động trên Client nhưng lại tương tác khó khan với Web Server để thực hiện các tác vụ phức tạp như truy cập Database và xử lý hình ảnh, …
  • Với Static HTML: Tất nhiên, HTML thông thường không thể chứa thông tin động.
Môi trường lập trình là nơi bạn phát triển các chương trình JSP của bạn, test chúng và sau đó là run.
Chương này hướng dẫn bạn chi tiết cách cài đặt môi trường JSP theo các bước sau:

Cài đặt Java Development Kit

Bước này bao gồm tải Java Software Development Kit (SDK) và thiết lập biến môi trường PATH.
Bạn có thể tải SDK từ: Java SE Downloads.
Sau khi tải về, bạn theo các chỉ dẫn đã cho để cài đặt và định cấu hình cho cài đặt. Cuối cùng, thiết lập các biến môi trường PATH và JAVA_HOME để tham chiếu tới thư mục mà chứa java và javac, soạn java_install_dir/bin và java_install_dir.
Nếu bạn đang chạy trên Windows và cài đặt SDK trong C:\jdk1.5.0_20, bạn đặt dòng sau trong C:\autoexec.bat file:
set PATH=C:\jdk1.5.0_20\bin;%PATH%
set JAVA_HOME=C:\jdk1.5.0_20
Trên Windows NT/2000/XP, bạn cũng có thể nhấp chuột phải trên My Computer, chọn Properties, và chọn Advanced, sau đó là Environment Variables. Cuối cùng, bạn update giá trị PATH và nhấn nút OK.
Trên Unix (Solaris, Linux, …), nếu cài đặt SDK trong /usr/local/jdk1.5.0_20 và bạn sử dụng C Shell, bạn đặt dòng sau vào trong .cshrc file của bạn:
setenv PATH /usr/local/jdk1.5.0_20/bin:$PATH
setenv JAVA_HOME
/usr/local/jdk1.5.0_20
Nếu bạn sử dụng một Development Environment (IDE) ví dụ như Borland JBuilder, Eclipse, IntelliJ IDEA, hoặc Sun ONE Studio, bạn biên dịch và chạy một chương trình đơn giản để xác nhận rằng IDE biết nơi bạn cài đặt Java.

Cài đặt Web Server: Tomcat

Một số Web Server, hỗ trợ JavaServer Pages và Servlets, là có sẵn trên thị trường. Một số chúng là miễn phí và Tomcat là một trong số đó.
Apache Tomcat là một sự triển khai phần mềm mã nguồn mở của JavaServer Pages (JSP) và các công nghệ Servlet, và có thể hoạt động như là một Stanalone Server để kiểm tra JSP và Servlet. Apache Tomcat có thể được tích hợp với Apache Web Server. Sau đây là các bước để cài đặt Tomcat:
  • Tải phiên bản mới nhất của Tomcat từ: http://tomcat.apache.org/.
  • Sau khi tải, mở và đặt trong vị trí thích hợp. Ví dụ, trong C:\apache-tomcat-5.5.29 trên windows, hoặc /usr/local/apache-tomcat-5.5.29 trên Linux/Unix và tạo biến môi trường CATALINA_HOME trỏ tới các vị trí này.
Tomcat có thể được bắt đầu bởi thực thi các lệnh sau trên thiết bị Windows:
 %CATALINA_HOME%\bin\startup.bat

ho
c

C
:\apache-tomcat-5.5.29\bin\startup.bat
Tomcat có thể được bắt đầu bởi thực thi các lệnh sau trên thiết bị Unix (Solaris, Linux, …):
$CATALINA_HOME/bin/startup.sh

ho
c

/usr/local/apache-tomcat-5.5.29/bin/startup.sh
Sau khi khởi động thành công, các ứng dụng web mặc định được include với Tomcat sẽ là có sẵn bởi việc chạy http://localhost:8080/. Nếu mọi thứ là ổn, thì nó hiển thị kết quả sau:
Tomcat Home page
Các thông tin bổ sung về định cấu hình và chạy Tomcat có thể được tìm thấy trong Document được bao tại đó, cũng như trên: http://tomcat.apache.org
Tomcat có thể bị dừng bởi thực thi các lệnh sau trên thiết bị Windows:
%CATALINA_HOME%\bin\shutdown
ho
c

C
:\apache-tomcat-5.5.29\bin\shutdown
Tomcat có thể bị dừng bởi thực thi các lệnh sau trên thiết bị Unix (Solaris, Linux, …):
$CATALINA_HOME/bin/shutdown.sh

ho
c

/usr/local/apache-tomcat-5.5.29/bin/shutdown.sh

Thiết lập CLASSPATH

Khi Servlet không là một phần của Java Platform, Standard Edition, bạn phải thông báo các lớp Servlet tới bộ biên dịch (compiler).
Nếu bạn đang chạy trên Windows, bạn cần đặt các lệnh sau trong C:\autoexec.bat file:
set CATALINA=C:\apache-tomcat-5.5.29
set CLASSPATH=%CATALINA%\common\lib\jsp-api.jar;%CLASSPATH%
Trên Windows NT/2000/XP, bạn cũng có thể nhấp chuột phải vào My Computer, chọn Properties, và chọn Advanced, sau đó là Environment Variables. Cuối cùng, bạn update giá trị CLASSPATH và nhấn nút OK.
Trên Unix (Solaris, Linux, …), nếu bạn đang sử dụng C Shell, bạn đặt các dòng sau vào trong .cshrc file.
setenv CATALINA=/usr/local/apache-tomcat-5.5.29
setenv CLASSPATH $CATALINA
/common/lib/jsp-api.jar:$CLASSPATH
Ghi chú: Giả sử thư mục lập trình của bạn là C:\JSPDev (với Windows) hoặc /usr/JSPDev (với Unix) thì bạn cũng cần thêm các thư mục này vào trong CLASSPATH theo cách tương tự như bạn đã thêm ở trên.
Chìa khóa để tìm hiểu tính năng tầm thấp của JSP là hiểu vòng đời của nó.
Vòng đời của JSP có thể được định nghĩa như là toàn bộ tiến trình từ khi tạo ra đến khi hủy nó, tương tự như vòng đời của một Servlet, nhưng thêm một bước để biên dịch một JSP thành Servlet.
Sau đây là các giai đoạn trong vòng đời của của một JSP:
  • Biên dịch
  • Khởi tạo
  • Thực thi
  • Hủy
4 giai đoạn chủ yếu trong vòng đời của JSP là tương tự như vòng đời của Servlet và chúng như sau:
Vòng đời (Life Cycle) của JSP

Biên dịch JSP

Khi môt trình duyệt yêu cầu một JSP, đầu tiên JSP engine kiểm tra để biết có hay không nó cần biên dịch trang này. Nếu trang chưa được biên dịch, hoặc nếu JSP đã được sửa đổi từ lần sửa đổi cuối cùng, thì JSP engine biên dịch trang này.
Tiến trình biên dịch gồm 3 bước:
  • Parse một JSP
  • Biên dịch JSP thành một Servlet
  • Biên dịch Servlet đó.

Khởi tạo JSP

Khi một container tải một JSP, nó gọi phương thức jspInit() trước khi phục vụ bất kỳ yêu cầu nào. Nếu bạn cần thực hiện sự khởi tạo JSP riêng, ghi đề phương thức jspInit():
public void jspInit(){
// Initialization code...
}
Nét đặc trưng là, việc khởi tạo được thực hiện chỉ một lần và với phương thức int của Servlet, nói chung bạn khởi tạo các kết nối Database, mở các file, và tạo các bảng tra cứu trong phương thức jspInit.

Thực thi JSP

Giai đoạn này trong vòng đời JSP biểu diễn tất cả các tương tác với Request tới khi JSP đó bị hủy.
Bất cứ khi nào một trình duyệt yêu cầu một JSP và trang đã được tải và được khởi tạo, thì JSP engine triệu hồi phương thức _jspService() trong JSP đó.
Phương thức _jspService() nhận một HttpServletRequest và một HttpServletResponsenhư là các tham số của nó.
void _jspService(HttpServletRequest request, 
HttpServletResponse response)
{
// Service handling code...
}
Phương thức _jspService() của một JSP được triệu hồi một lần cho mỗi yêu cầu và nó chịu trách nhiệm tạo Response cho Request đó và phương thức này cũng chịu trách nhiệm tạo các phản hồi tới tất cả 7 phương thức của HTTP, ví dụ: GET, POST, DELETE, …

Hủy JSP

Giai đoạn hủy một JSP trong vòng đời JSP biểu thị khi nào thì một JSP bị gỡ bỏ khỏi một container.
Phương thức jspDestroy() trong JSP là phương thức hủy tương đương với trong Servlet. Ghi đè phương thức jspDestroy khi bạn cần thực hiện bất kỳ quá trình hủy nào, ví dụ như giải phóng kết nối với Database, hoặc đóng các file.
Phương thức jspDestroy() có form sau:
public void jspDestroy()
{
// Your cleanup code goes here.
Web Server cần một JSP engine ví dụ: Container) để xử lý các JSP page. JSP container có nhiệm vụ chặn các Request cho các JSP page. Bài hướng dẫn này sử dụng Apache, mà có JSP container có sẵn, để hỗ trợ phát triển các JSP page.
Một JSP container làm việc với Web Server để cung cấp môi trường runtime và các dịch vụ khác mà một JSP cần đến. Nó biết cách để hiểu các phần tử đặc biệt mà là một phần của JSP.
Sơ đồ sau minh họa vị trí của JSP container và JSP file trong một Web Application.
Cấu trúc JSP

Tiến trình JSP

Dưới đây là các bước giải thích cách Web Server tạo các Webpage bởi sử dụng JSP:
  • Với một trang thông thường, trình duyệt gửi một HTTP request tới Web server.
  • Web server nhận ra rằng HTTP request là cho một JSP page và chuyển nó tới một JSP engine. Điều này được thực hiện bởi sử dụng một URL hoặc một JSP page mà kết thúc với .jsp thay vì .html.
  • JSP engine tải JSP page từ đĩa và biến đổi nó thành một nội dung Servlet. Sự biến đổi này là rất đơn giản, trong đó tất cả Template Text được biến đổi thành các lệnh printIn() và tất cả phần tử JSP được biến đổi thành Java code mà triển khai các hành vi động tương ứng của trang.
  • JSP engine biên dịch Servlet thành một lớp có thể thực thi và chuyển Request ban đầu tới một Servlet engine.
  • Một phần của Web server triệu hồi Servlet engine tải lớp Servlet và thực thi nó. Trong quá trình thực thi, Servlet này tạo một output trong định dạng HTML, mà Servlet engine truyền tới Web server bên trong một HTTP response.
  • Web server chuyển HTTP Response tới trình duyệt của bạn nội dung HTML tĩnh.
  • Cuối cùng, trình duyệt web xử lý trang HTML đã được tạo một cách năng động bên trong HTTP response một cách chính xác như kiểu nó là một trang tĩnh.
Tất cả các bước trên có thể được minh họa trong sơ đồ sau:
Tiến trình xử lý của JSP
Nét đặc trưng là, JSP engine kiểm tra để biết có hay không một Servlet cho một JSP file là đã tồn tại và có hay không ngày sửa đổi JSP là cũ hơn Servlet đó. Nếu JSP là cũ hơn Servlet đã tạo của nó, thì JSP engine giả sử rằng JSP đã không thay đổi và Servlet đã được tạo đó vẫn kết nối với nội dung của JSP. Điều này làm cho tiến trình khác biệt hơn khi so với các ngôn ngữ Scripting khác (ví dụ như PHP) và vì thế nó nhanh hơn.
Trước khi hiển thị ra trình duyệt, tập tin JSP phải được biên dịch thành Servlet, dùng bộ biên dịch JSP (JSP compiler). Bộ biên dịch JSP có thể tạo servlet thành mã nguồn Java trước, rồi biên dịch mã nguồn ra tập tin .class dùng bộ biên dịch Java, hoặc có thể trực tiếp tạo mã byte code cho servlet từ trang JSP. Ngoại trừ giai đoạn phiên dịch, một JSP page được xử lý chính xác giống như một Servlet thông thường.
no image
JSP directive cung cấp các chỉ dẫn và chỉ lệnh tới container, nói cho nó cách để xử lý các mặt cụ thể của tiến trình xử lý JSP.
Một Directive trong JSP ảnh hưởng tới cấu trúc tổng thể của lớp Servlet. Nó thường có form sau:
<%@ directive attribute="value" %>
Directive có thể có các thuộc tính mà bạn có thể liệt kê dưới dạng các cặp key-value và được phân biệt bởi dấu phảy.
Các khoảng trống giữa ký hiệu @ và tên directive, và giữa thuộc tính cuối cùng và ký hiệu đóng %>, là tùy ý.
Có 3 loại thẻ directive trong JSP:
DirectiveMiêu tả
<%@ page ... %>Định nghĩa một thuộc tính page-dependent (phụ thuộc trang), như ngôn ngữ scripting, trang lỗi và các yêu cầu bộ đệm
<%@ include ... %>Include một file trong suốt giai đoạn phiên dịch
<%@ taglib ... %>Khai báo một thư viện thẻ, chứa các action tùy biến, được sử dụng trong trang đó

page Directive trong JSP

page Directive trong JSP được sử dụng để cung cấp các chỉ lệnh tới container mà liên quan tới JSP page hiện tại. Bạn có thể mã hóa page directive bất cứ đâu trong JSP page của bạn. Theo qui ước, page directive được mã hóa tại trên cùng của JSP page.
Sau đây là cú pháp cơ bản của page Directive trong JSP:
<%@ page attribute="value" %>
Bạn có thể viết XML tương đương với cú pháp trên như sau:
<jsp:directive.page attribute="value" />

Các thuộc tính của page directive trong JSP

Bảng dưới liệt kê các thuộc tính liên kết với page Directive trong JSP:
Thuộc tínhMục đích
bufferXác định một mô hình đệm cho Output Stream
autoFlushĐiều khiển hành vi của Output buffer của Servlet
contentTypeĐịnh nghĩa giản đồ mã hóa ký tự
errorPageĐịnh nghĩa URL của JSP khác mà báo cáo trên Java các unchecked runtime exception
isErrorPageChỉ rằng nếu JSP page này là một URL được xác định bởi thuộc tính ErrorPage của JSP page khác
extendsXác định một lớp cha mà Servlet đã tạo phải kế thừa
importXác định một danh sách các package hoặc class để sử dụng trong JSP khi lệnh import trong Java làm việc cho các lớp Java
infoĐịnh nghĩa một chuỗi mà có thể được truy cập với phương thức getServletInfo() của Servlet
isThreadSafeĐịnh nghĩa mô hình thread cho Servlet đã tạo
languageĐịnh nghĩa ngôn ngữ lập trình được sử dụng trong JSP page
sessionXác định có hay không JSP page tham dự trong các HTTP session
isELIgnoredXác định có hay không EL expression bên trong JSP page sẽ bị bỏ qua
isScriptingEnabledQuyết định nếu các phần tử scripting được cho phép sử dụng
Bạn có thể hiểu chi tiết hơn về các thuộc tính trên tại: Page Directive trong JSP.

Include Directive trong JSP

include Directive trong JSP được sử dụng để bao một file trong suốt giai đoạn phiên dịch. Directive này nói cho container sáp nhập content của file ngoại vi khác với JSP hiện tại trong quá trình phiên dịch. Bạn có thể mã hóa include directive bất cứ đâu trong JSP page.
Dưới đây là form chung cho include directive trong JSP:
<%@ include file="relative url" >
Tên file trong include directive là một URL quan hệ thực sự. Nếu bạn chỉ xác định một tên file mà không có đường liên kết, thì JSP compiler giả sử rằng file đó là trong cùng thư mục như JSP của bạn.
Bạn có thể viết XML tương đương với cú pháp trên:
<jsp:directive.include file="relative url" />
Bạn có thể kiểm tra chi tiết về include directive tại: Include Directive trong JSP.

Taglib Directive trong JSP

Java Server Pages API cho phép bạn định nghĩa các Custom Tags trong JSP, mà giống như các thẻ HTML hoặc XML và một thư việc thẻ (tag library) là một tập hợp các thẻ được định nghĩa bởi người sử dụng mà triển khai các hành vi tùy biến.
taglib directive khai báo rằng: JSP page của bạn sử dụng một tập hợp các Custom Tags, thông báo vị trí của thư viện, và cung cấp một phương thức để nhận diện các Custom Tags đó trong JSP page của bạn.
Cú pháp của taglib directive trong JSP như sau:
<%@ taglib uri="uri" prefix="prefixOfTag" >
Ở đây, giá trị thuộc tính uri biểu diễn một vị trí mà container có thể hiểu và thuộc tính prefix thông báo một container về các bit đánh dấu nào là các action tùy biến.
Bạn có thể viết XML tương đương với cú pháp trên như sau:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
Kiểm tra chi tiết hơn về taglib directive tại: Taglib Directive trong JSP.