PDA

View Full Version : Giới thiệu JSP


nhtuong
16-04-2007, 20:13
GIỚI THIỆU JSP



Mức độ: Căn bản

Tác giả: Nguyễn Hoài Tưởng (mailto:nhtuong@cit.ctu.edu.vn), nhtuong

16 tháng Tư, 2007

Bản PDF: IntroJSPPart01.pdf (http://nhtuong.110mb.com/IntroJSP_Part01.pdf)

Nội dung

Bài viết giới thiệu nền tảng căn bản của công nghệ JSP phiên bản 2.0. Bài viết cung cấp cho bạn cái nhìn tổng quát về JSP và bắt đầu viết một số trang Web nhỏ ứng dụng JSP. Do không có nhiều thời gian nên mình sẽ chia bài viết này thành 2 phần:
- Phần tổng quan và cài đặt.
- Phần căn bản JSP. (sẽ được giới thiệu sau)

Đối tượng

Đây là bài viết dành cho những lập trình viên bắt đầu học JSP, những người có kiến thức tốt về lập trình Java và HTML. Nếu bạn là một chuyên gia về JSP thì bài viết này có thể không phù hợp với bạn. Tuy nhiên nó vẫn hữu ích nếu bạn muốn tìm hiểu những thay đổi từ những phiên bản trước lên bản 2.0 của JSP.
Lưu ý bài viết nhấn mạnh giải thích cấu trúc và ý nghĩa của các thành phần có trong JSP chứ không đi sâu vào những kỹ thuật lập trình để tạo nên những ứng dụng cụ thể. Đây là nền tảng để bạn đi vào những ứng dụng riêng của mình.

Yêu cầu cấu hình

Để có thể chạy những đoạn code mẫu của bài viết bạn cần những yêu cầu tối thiểu cho JSP 2.0 sau:
- J2SE 1.3 hoặc cao hơn
- Application Server hỗ trợ Java Servlet 2.4 Specification (Tomcat 5.x)

Phần 1: Tổng quan về JSP

JSP là một trong những công cụ rất mạnh, dễ sử dụng và nền tảng của các nhà phát triển Web. JSP kết hợp HTML, XML, Java Servlet (một ứng dụng mở rộng thêm dành cho phía Server) và công nghệ JavaBeans (một lớp điển hình cho việc sử dụng đặc tính hướng đối tượng của Java, nó tương tụ như một class thông thường của Java) để tạo nên những ứng dụng độc lập và động trên môi trường Web với độ tin cậy (an toàn, bền vững) và sự tương tác người dùng với hiệu quả rất cao. Trong thực tế IBM và CNN là 2 trong số rất nhiều hãng sử dụng công nghệ này cho các ứng dụng Web của mình.

Như vậy chính xác JSP là gì? Điều thú vị ở đây là chúng ta có hai góc nhìn khác nhau từ 2 “nhà” khác nhau: đó là nhà thiết kế website và nhà lập trình Java. Người thứ nhất bảo rằng JSP là những đoạn code mở rộng thêm (các Servlet class) do các nhà lập trình tạo ra, để tôi có được những thao tác động cho các trang HTML của tôi. Tôi không cần phải học làm thế nào để lập trình Java. Với người thứ hai, anh ta nghĩ ở một mức cao hơn. Tôi có thể tạo ra những đoạn code đó, vì vậy tôi không phải nhờ các servlet class từ nơi khác mà tôi có thể nhúng trực tiếp các đoạn code xử lý bên trong trang HTML. Khi nào người dùng gọi thì tôi có ngay các thao tác để đáp ứng, không phải phụ thuộc vào thành phần đang lưu các servlet class.

Bây giờ bạn có thể xác định mình là ai để có thể chủ động hơn việc tìm hiểu JSP của mình.

Tiếp theo hình sau đây sẽ giới thiệu với bạn các thành phần cơ bản trong kiến trúc của một ứng dụng JSP:



http://iup.in/img/guest/hinh1.GIF

Hình 1: Kiến trúc JSP


Webserver là nơi tiếp nhận các lời gọi của client, nó có nhiệm vụ tìm kiếm các file JSP theo lời gọi của client. Sau đó, nếu tồn tại file JSP như lời gọi của client, nó sẽ yêu cầu JSP Engine thực hiện xử lý code JSP để trả kết quả về cho client. Nếu lời gọi từ client cần kết nối Cơ sở dữ liệu thì JSP Engine tiếp tục làm việc với Server Database để lấy dữ liệu cần thiết cho client.

Để hiểu rõ hơn, bạn có thể xem hình tiếp theo minh họa về hoạt động cho tiết của thành phần JSP Engine:

http://iup.in/img/guest/hinh2.GIF

Hình 2: Hoạt động của JSP

Có nhiều câu hỏi xoay quanh JSP và Servlet. JSP có phải là Servlet không? Tại sao tôi viết Servlet mà không gọi là trang Servlet mà gọi là trang JSP?
Câu trả lời là để chạy được một trang JSP thì tất cả các code của JSP phải được biên dịch sang Servlet sau đó tùy vào nội dung mà Servlet sẽ cho ra trang HTML với nội dung có được từ xử lý của các đoạn code JSP để trả lời yêu cầu của client.

Như vậy tại sao phải dung trung gian Servlet? Điều đáng lưu ý ở đây là bạn đang được tiếp cận với một công nghệ rất mạnh để lập trình Web theo mô hình Client-Server. Ở đây, Server là một Webserver chuyên phục vụ những yêu cầu thao tác từ phía client. Chỉ đơn thuần là xử lý. Chúng ta sẽ nói phần Server dữ liệu ở những bài viết sau.

Tất cả các xử lý của bạn sẽ được Webserver quản lý. Khi nào cần bạn có thể gọi nó, và cũng như vậy những người dùng ở những nơi khác cũng có thể gọi các xử lý đó để sử dụng mà không phải viết lại code Java. Họ không cần biết lập trình Java như thể nào? Đây là ưu điểm rất lớn của những ứng dụng được tổ chức theo mô hình Client-Server.


Ví dụ JSP đơn giản

HelloWorld.jsp

<HTML>
<HEAD><TITLE>Hello World JSP Example</TITLE></HEAD>
<BODY>
Hello World.
</BODY>
</HTML>

Ở đây tôi gọi đây là trang JSP. Nhưng tại sao nó chỉ là trang HTML bình thường thôi?

Như vậy điều cần quan tâm ở đây là chúng ta cần phải hiểu JSP có thể thừa kế lại những mã lệnh của HTML. Server JSP có thể hiểu những đoạn code HTML như là một thành phần của JSP. Khi client gọi trang HelloWorld.jsp thì Server JSP xử lý trang này và dịch các thẻ HTML và trả kết quả về cho client.

Trong trường hơp client chỉ nhận kết quả đơn thuần là một dữ liệu tĩnh, vì lần sau khi client gọi nội dung vẫn vậy! Bây giờ, bạn hãy xem tiếp ví dụ sau:

Ví dụ JSP động


HelloWorld2.jsp
<HTML>
<HEAD><TITLE>Hello World JSP Example w/Current Time</TITLE></HEAD>
<BODY>
Hello World. The local server time is
<%= new java.util.Date() %>.
</BODY>
</HTML>

Sự khác biệt ở đây là sau mỗi lần gọi trang HelloWorld2.jsp, client sẽ nhận được nội dung động đó là ngày hiện tại của hệ thống.


Ví dụ JSP dùng XML

<HTML>
<HEAD><TITLE>Hello World JSP Example w/ Current Time</TITLE></HEAD>
<BODY>
Hello World. The local server time is
<jsp:expression> new java.util.Date() </jsp:expression>.
</BODY>
</HTML>

Thay vì dùng thẻ <% và %>để bắt đầu và kết thúc cho đoạn code JSP, ta có thể dùng công nghệ XML để thay thế cho việc làm này bằng cách dùng thẻ đôi <jsp:expression> và </jsp:expression> mục đích của việc ứng dụng XML là định hướng được nội dung của đoạn code JSP nhờ vào tên của các thẻ XML.

Cài đặt

Đến đây xem như cơ bản bạn đã có cái nhìn tổng quát về JSP. Vấn đề tiếp theo là làm thể nào để chạy một đoạn code thật đơn giản để thấy được hoạt động của JSP.
Theo như yêu cầu về cấu hình ở phần trên, bạn sẽ phải cài đặt theo trình tự một số thành phần sau:

- Cài JDK (tải bản mới nhất từ www.sun.com ).
o Ví dụ: http://192.18.108.206/ECom/EComTicketServlet/BEGIN27623577F714D83BAC2A16F7E736A7C1/-2147483648/2068386795/1/819170/818954/2068386795/2ts+/westCoastFSEND/jdk-6u1-oth-JPR/jdk-6u1-oth-JPR:2/jdk-6u1-windows-i586-p.exe

- Set biến môi trường JAVA_HOME=[Đường dẫn tới thư mục cài đặt của bạn]
o Ví dụ: JAVA_HOME= C:\Program Files\Java\jdk1.5.0_09
- Cài Server Tomcat (tải bản mới nhất từ www.apache.org). Để thuận tiện bạn nên tải file cài đặt có phần mở rộng là *.exe
o Ví dụ: http://archive.apache.org/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.exe
- Set biến môi trường CATALINA_HOME=[Đường dẫn tới thư mục cài đặt của bạn]
o Ví dụ: CATALINA_HOME= C:\Program Files\Apache Software Foundation\Tomcat 5.5


http://iup.in/img/guest/hinh3.GIF

Hình 3: Set biến môi trường 1



http://iup.in/img/guest/hinh42.GIF

Hình 4: Set biến môi trường 2



http://iup.in/img/guest/hinh52.GIF

Hình 5: Set biến môi trường 3


- Khởi động Tomcat.
- Khởi động trình duyệt Web
o Ví dụ: Internet Explorer (C:\Program Files\Internet Explorer\IEXPLORE.EXE)

- Mở trang test của Tomcat bằng địa chỉ mặc định: http://localhost:8080. Nếu bạn thấy mèo con Tomcat là bạn đã thành công phần cài đặt.
- Viết trang JSP đầu tiên:
o Mở chương trình soạn thảo bất kỳ (ví dụ: Notepad), sau đó copy đoạn code mẫu HelloWorld2.jsp ở phần trên của bài viết này dán vào và lưu lại với tên tùy ý thích của bạn (ví dụ “HelloWorld2.jsp” ). Lưu ý, để dễ dàng cho việc test, theo khuyến cáo của tác giả, bạn nên lưu vào thư mục ROOT của Tomcat:
 Ví dụ: C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\ROOT
o Tắt Tomcat bằng cách click phải chuột vào icon của Tomcat ở thanh Taskbar ( ) và chọn “Stop service”
o Sau khi tắt bạn khởi động lại Tomcat 1 lần nữa bằng cách tương tự như trên nhưng chọn “Start service”
o Dùng trình duyệt Web xem kết quả của trang JSP đầu tiên của bạn bằng địa chỉ: http://localhost:8080/[tênfile_ban_vừa_lưu_ở_trên]
 Ví dụ: http://localhost:8080/HelloWorld2.jsp


http://iup.in/img/guest/hinh6.GIF

Hình 6: Kết quả trang HelloWorld2.jsp



HẾT PHẦN 1

nhtuong
17-04-2007, 18:24
.


http://iup.in/img/guest/phan2.JPG

Mức độ: Căn bản
Tác giả: Nguyễn Hoài Tưởng (mailto:nhtuong@cit.ctu.edu.vn), nhtuong
17 tháng Tư, 2007


Nội dung: Đây là phần tiếp theo của bài trước. Phần này trình bày thành phần Template Content của JSP.


Bản PDF: IntroJSP_Part02_template-content.pdf (http://nhtuong.110mb.com/IntroJSP_Part02_template-content.pdf)


http://iup.in/img/guest/template-content.JPG






Cú pháp JSP được chia làm 3 loại:
1. Nội dung mẫu (Template Content): Thường gọi là thành phần “tĩnh”, bao gồm những thành phần không phải là code của JSP.

2. Mã ngữ cảnh (Scripts): Bao gồm các khai báo (declarations), biểu thức (expressions) và những đoạn scripts của Java do chính bạn xây dựng (scriptlets) mà được nhúng vào trang JSP.

3. Chỉ thị (Directives): Đây là những chỉ thị lệnh bạn đặt vào trang JSP để báo cho Webserver biết làm thế nào để tạo ra trang JSP của bạn, ví dụ như những file mà bạn cần include.

4. Thao tác (Actions): Đây là các hàm ở mức cao hơn dưới dạng các thẻ tùy biến kiểu XML dùng để thay cho việc sử dụng các mã ngữ cảnh (scripts). Các thao tác chuẩn bao gồm: tạo (create), sửa (modify), hoặc các JavaBeans xử lý.


Ứng với mỗi loại ở trên ta sẽ có những cách viết mã khác nhau:

http://iup.in/img/guest/element.JPG

Nội dung mẫu là gì?

Nội dung mẫu không hẳn là một thành phần của JSP. Nhớ lại ví dụ đơn giản HelloWorld1.jsp có thể gọi đây là một nội dung mẫu vì tất cả các code của nó đều ở dạng HTML. Tóm lại, nội dung mẫu là thành phần tĩnh của JSP.
Bạn có thể xem một ví dụ mẫu sau đây:

HelloWorld4.jsp

<jsp:directive.page import="java.util.Date"/>
<HTML>
<HEAD><TITLE>Hello World JSP Example w/Current Time</TITLE></HEAD>
<BODY>
Hello World. The local server time is <%= new Date() %>.
</BODY>
</HTML>

Ở đầu trang ta include một directive vào để sử dụng thư viện java.util.Date sau đó dùng hàm Date() để lấy ngày hiện tại của hệ thống. Đây đều là những thành phần của JSP. Điều ghi nhớ là ngoài các thành phần này sẽ là thành phần mẫu (tĩnh) của JSP.


Chú thích (Comments)

Chú thích HTML

Cú pháp:
<!-- I am an HTML comment -->

Ý nghĩa:
Thông thường đây là những dòng chú thích cho những dòng HTML mà bạn muốn thông báo cho người dùng khi họ xem source code của bạn nhưng không hiển thì bên ngoài trình duyệt, như thông tin bản quyền về đoạn code nào đó của bạn chẳng hạn.

HelloWorld5.jsp

<!-- The time is <%= new java.util.Date() %> -->
<HTML>
<HEAD><TITLE>Hello World JSP Example</TITLE></HEAD>
<BODY>
Hello World.
</BODY>
</HTML>

Chú thích ẩn

Cú pháp:

<%-- I am a comment --%>

Ý nghĩa:
Đây là những chú thích dành cho riêng bạn cho những dòng code HTML, người dùng khi view source code không thể thấy được bạn muốn ghi chú gì. Chủ yếu là nhằm che dấu thông tin ghi chú của bạn.

HelloWorld5.jsp

<%-- This is our oft-repeated Hello World example: --%>
<HTML>
<HEAD><TITLE>Hello World JSP Example</TITLE></HEAD>
<BODY>
Hello World.
</BODY>
</HTML>

Chú thích theo ngôn ngữ Java

Cú pháp:
/*cho
chú thích
nhiều dòng*/
//cho chú thích một dòng

Ý nghĩa:
Chú thích của bạn trong đoạn code JSP.

HelloWorld7.jsp
<jsp:directive.page import="java.util.*"/>
<jsp:declaration>
/* date is a new member variable, initialized when we are instantiated.
It can be used however we want, such as:
out.println("Instantiated at " + date); // display our "birth" date
*/ Date date = new Date();
</jsp:declaration>
<HTML>
<HEAD><TITLE>Hello World JSP Example</TITLE></HEAD>
<BODY>
Hello World.<BR>
This page was loaded into memory at <%= date %>.<BR>
The current time is <%= new Date() %>
</BODY>
</HTML>

Quy luật Escape

Trên đây tôi vừa minh họa cho bạn cách dùng một số ký tự đặt biệt dùng để ghi chú những chú thích của bạn. Như vậy thì vấn đề đặt ra là làm sao bạn in ra được chính những ký tự đặt biệt mà bạn dùng để ghi chú đó, ví dụ: <% , %> ,‘ , “, \
Xuất phát từ nhu cầu đó, người ta nghĩ ra một quy luật xuất những ký tự đặc biệt dùng một ký tự đặc biệt khác được gọi là escape (“\”). Sau đây là bảng ví dụ:


http://iup.in/img/guest/escaperule.JPG


HelloWorld8.jsp

<HTML>
<HEAD><TITLE>Hello World JSP Escape Sequences</TITLE></HEAD>
<!--
This page was run at <%= new java.util.Date() %>, according
to <\%=new Date() %\>
-->
<BODY>
<P>Hello World.<BR>
The local server time is <%= new java.util.Date() %>.<BR>
The time is computed using the JSP expression
<I>&lt;%=new Date()%&gt;.</I></P>
<P>The escaping sequence in the comment uses the JSP defined
escape sequence, but that won't work within the normal HTML
content. Why not? Because HTML also has escaping rules.</P>
<P>The most important HTML escaping rules are that '&lt;' is
encoded as <I>"&amp;lt;"</I>, '&gt;' is encoded as
<I>"&amp;gt;"</I>, and '&amp;' is encoded as <I>"&amp;amp;"</I>.
</P>
</BODY>
</HTML>

Ngoài ra, đối với đoạn mã HTML, để in ra những ký tự đặc biệt nói trên bạn dùng bảng code chuyển đổi sau đây:


http://iup.in/img/guest/escaperule_html.JPG

philubonmat
17-04-2007, 21:26
Cám ơn nhtuong nhiều nghe, tiếp đi bạn