Mô hình hoạt động của JSP

Một phần của tài liệu Phát triển ứng dụng phần mềm trên máy chủ dựa trên công nghệ Java (Trang 65)

về cơ bản, JSP có thể được coi như một file HTML, trong đó có nhúng những

đoạn mã lệnh của Java. Đây là các lệnh sẽ được thực hiện vào thời điểm thực hiện ứng dụng. Vì vậy, mỗi file JSP về cơ bản rất giống file HTML và có thể được tạo

bởi người phát triển trang Web, những người có nhiệm vụ tạo dựng và duy trì hình

thức và cách thể hiện của các Web site. Rất nhiều công cụ thiết kế trang Web có khả

năng hỗ trợ việc phát triển các trang JSP.

Mô hình hoạt độne của JSP khi được gọi bởi ứng dụng khách được thể hiện trong hình vẽ sau:

Quá trình thực hiện JSP bao gồm hai giai đoạn là giai đoạn xử lý yêu cầu và giai đoạn dịch. Một yếu tố quan trọng trong bộ chứa Web là kết quả của mỗi yêu cầu đối với JSP là một lớp Java. Lớp Java đó chính là một Servlet. Lớp này thực hiện cài đặt giao diện javax.servlet.Servlet. Hai giai đoạn của quá trình thực hiện JSP là việc tạo ra lớp Servlet và việc gọi lớp Servlet này. [5]

3.2.2.1 G iai đoan I - die lí• •

Khi có yêu cầu 1 là yêu cầu đầu tiên tới JSP foo. jsp kể từ khi triển khai JSP trên máy chủ. Trong trường hợp này, lớp Servlet của JSP này sẽ không tồn tại. Bước đầu tiên trong giai đoạn này là chuyển file nguồn của JSP thành file nguồn Java để có thể dịch thành một Servlet là lớp cài đặt của JSP. Sau đó, .java file được biên dịch thành file .class biểu diển cho một lớp Servlet sau khi dịch. File class được lưu trên máy chủ, file .java có thể được lưu trên máy chủ hoặc không cũng được. Giai đoạn

- 6 6 -

dịch này được thực hiện một lần đối với mỗi JSP. Neu lớp Servlet đã được dịch có sẵn trên máy chủ, thì yêu cầu tới JSP sẽ được chuyển ngay sang giai đoạn II. [5]

3.2.2.2 G iai đoạn 11 - xử lý yêu cầu

Giai đoạn II là giai đoạn thực hiện việc gọi Servlet - lớp cài đặt của JSP để trả lời yêu cầu được gửi đến. Đối với yêu cầu 1 thì giai đoạn này được thực hiện ngay sau khi giai đoạn I kết thúc. Nếu Servlet chưa được tải vào bộ nhớ thì Servlet sẽ được tải vào bộ nhớ và thực hiện việc xử lý yêu cầu được gửi tới. Đối với yêu cầu 2, bộ chứa Web biết rang Servlet đã có sẵn và được tải trong bộ nhớ, nó sẽ thực hiện việc xử lý yêu cầu ngay khi nhận được yêu cầu này. Thông thường, trước khi thực hiện bộ chứa Web cũng kiểm tra xem file nguồn . jsp có bị thay đổi không. Ncu nó bị thay đổi thì sẽ được chuyển vào giai đoạn dịch để thực hiện việc dịch lại JSP này. Tất cả các yêu cầu sau đó sẽ được phục vụ bởi Servlet này cho đến khi ứne dụng ngừng hoạt động và Servlet được hủy bỏ. Quá trình tải vào, xử lý ycu câu, hủy bỏ của JSP hoàn toàn giống với Servlet mà đã đề cập ở phần trước. [5]

3.2.2.3 Giao diện HttpJspPage

Bộ chửa Web gọi lớp cài đặt của JSP giống như các Servlet khác. Phần trước đã nói rang lớp này cài đặt cho giao diện javax.servlet.Servlet nhưng nói một cách chính xác là cài đặt cho giao diện javax.servlet.jsp.JspPage là một hậu duệ của javax.servlet.Servlet. Cùng giống như Servlet, trong đặc tả JSP không có gì liên quan đến giao thức HTTP được thừa kế ở đây mà JSP có thể cung cấp việc xử lý ycu cầu/trả lời cho mọi giao thức. Tuy vậy, cũng giống như Servlet, một giao diện

riêng cho giao thức HTTP được cung cấp giúp thuận tiện hơn trong việc sử dụng.

Hình 3-7: Cây thừa kế cùa HttpJspPage

Giao diện HttpJspPage định nghĩa (trực tiếp hoặc thừa kế từ giao diện javax. servlet.jsp.JspPage) các phương thức trừu tượng sau:

Phương thức Mô tả

public void jsplnit() Phương thức này được gọi khi lớp cài đặt JSP được tải

vào. Tương tự như phương thức initộ của Servlct

public void jspDestroyO

Phương thức này được gọi khi lớp cài đặt JSP được chuyển ra khỏi bộ nhớ. Tương tự như phương thức

destroyO của Servlet public void js p S e rv ic e

(H ttpServletRequest, HttpServletResponse) throws ServletException

Được tự động tạo ra bởi bộ chứa Web dựa trên các nhãn JSP được nhúng trong JSP. Phương thức này được gọi mỗi khi có yêu cầu từ ứng dụng khách. Tương

tự như phương thức serviceQ của Servlet

3.2.2.4 Ví dụ về một JSP

Phần sau là mã nguồn của một JSP đơn giản, date. jsp, thực hiện việc hiện ngày tháng và thời gian hiện thời:

<! date. jsp: mã nguồn cúa JSP <HTML>

<HEAD><TITLE>Ngày tháng và thời gian </TITLE></HEAD> <BODY>

<P>Ngày tháng và thời gian hiện thời là: <% new java. Util. Date() %></P> </BODY>

- 68 -

</HTML>

Trong file này các nhãn của JSP dùng để hiển thị một chuồi biểu diễn đối tượna Java Date. Khi JSP được gọi, bộ xử lý JSP sẽ tạo ra mã nguồn cho lớp cài đặt của JSP. Mã nguồn này như sau:

// mã nguồn cùa lớp triển khai JSP date. jsp import javax. servlet. *;

import javax. servlet, http. *; import javax. servlet, jsp. *;

import javax. servlet, jsp. tagext. *; import java. io. PrintWriter;

import java. ¡0. lOException; import java. ¡0. InputStream; import java. ¡0. ObjectlnputStream; import java. util. Vector;

import org. apache, jasper, runtime. *; import java. beans. *;

import org. apache, jasper. JasperException; import java. io. ByteArrayOutputStream; import org. apache, jasper, compiler, ibmtsx. *; import org. apache, jasper, compiler, ibmdb. *; import java. sql. SQLException;

// Đây là khai báo cùa lớp, nó mớ rộng lớp org. apache, jasper, runtime. HttpJspBase

public class d a te js p _ 0 extends HttpJspBase { static char []OJspx_html_data =null;

static {

}

public d a te js p _0() {

}

private static boolean J s p x J n ite d =false;

public final void J s p x J n it() throws JasperException { ObjectlnputStream oin =null;

int numStrings =0;

// Đây là nội dung tĩnh cúa JSP được lưu trong file d a ta js p _ 0 . dat được tạo ra //trong quá trình dịch

InputStream fin =

this. getciass(). getClassLoader(). getResourceAsStream(”dateJsp_0. dat"); oin =new O bjectlnputstream (fin);

Jsp x_ h tm L d a ta = (char Oũ) oin. readObject(); } catch (Exception ex) {

throw new JasperException ("Unable to open data file"); }finally {

if (oin !=null) try {

oin. close();

} catch (lOException ignore) {

} }

}

//phương thửc này được gọi mỗi khi có yêu cầu được gừi đèn

public void JspS ervice (HttpServletRequest request, HttpServletResponse response) throws lOException, ServletException {

JspFactory JspxF actory =null;

//Khai báo các đối tượng ngâm định PageContext pageContext =null; HttpSession session =null; ServletContext application =null; ServletConfig config =null; JspW riter out =null; Object page =this; String value =null; try {

if (Jspx_inited ==false) { J s p x J n itO ; J s p x J n ite d =true;

}

Jsp xF acto ry =JspFactory. getDefaultFactoryO;

- 7 0 -

// và thực hiện khởi tạo

pageContext =JspxFactory. getPageContext (this, request, r e s p o n s e , t r u e , 8192, true);

application =pageContext. getServletContext(); config =pageContext. getServletConfigO; session =pageContext. getSession();

//một trong các đối tượng ngầm định là OutputStream được sử dụng đế viết kẽt quá trá lời out =pageContext. getOut();

//Nội dung tĩnh của JSP được viẽt ra Outputstream out. print (Jspx_htm l_data [0 ]);

//Dòng lệnh này thực hiện một nhãn JSP duy nhất trong file . jsp out. print (new java. Util. DateQ);

//Nội dung tĩnh cúa JSP sau nhãn được viết ra out. print (Jspx_htm l_data [1 ]);

}catch (Exception ex) {

if (out. getBufferSize() !=0) out. clearBufferQ;

pageContext. handlePageException (ex); Jcatch (Throwable t) {

if (out. getBufferSize() !=0) out. clearBuffer();

pageContext. handlePageException (new Exception (t.getMessageO)); }finally { out. flush(); JspxFactory. releasePageContext(pageContext); } } }

© Ngày th áng và thời gian - Microsoft internet Explorer ■ " » □ 0 0

File Edit View Favorites Tools Help 4 *

Q Back 0 S Lầ ! <p Search '$ ỉFavorites Media «0 5- . v . » Links »

N g à y tháng và th òi gian hiên thời là: W e d M ar 12 1 5 :3 5 :4 0 G M T + 0 7 :0 0 2 0 0 3

ấ ) Done - j My Computer

Hình 3-8: Kết quả thực hiện JSP 3.3 So sánh giữa Servlet và JSP

Do các trang JSP đều được chuyển thành các lớp Servlet cài đặt cho JSP nên về mặt lý thuyết tất cả những gì mà JSP làm được thì Servlet cũng có thể làm được. Tuy nhiên, JSP giúp phát triển ứng dụng đơn giản hơn so với Servlet vì không cần phải thực hiện các bước biên dịch và đăng ký trong bộ chứa Web. Tuy vậy, không phải JSP luôn luôn thuận tiện hơn Servlet.

JSP thực hiện việc trộn lẫn mã Java với HTML cho nên việc thiết kế JSP thường đơn giản và dễ bổ sung hơn so với Servlet. Tuy nhiên, đây là yếu tố không nên lạm dụng đối với JSP. Neu tập trung tất cả mã Java vào cùng với mã HTML, một khi ứng dụng mở rộng ra và trở nên phức tạp, việc bảo trì và nâng cấp ứng dụng Web với hàng trăm trang JSP sẽ trở nên rất khó khăn. Hơn thế nữa, trong quá trình phát triển theo nhóm việc trộn lẫn mã Java với mã HTML trong trang Web sẽ không có hiệu quả. Việc trộn lẫn này làm cho việc tách bạch giữa công việc phát triển ứng dụng của người lập trình và việc phát triển giao diện của người thiết kế trang Web. Điều này sẽ làm phá vỡ qui trình phát triển ứng dụng. Một hạn chế nữa của JSP là toàn bộ mã của JSP là dưới dạng văn bản. Vì vậy, không thể che dấu được mã nguồn của ứng dụng. Điều này có thể làm giảm tính an toàn cũng như tính bảo mật của ứng dụng.

- 72 -

Đối với Servlet tuy phải thực hiện biên dịch nhưng bù lại có tính bảo mật cao hơn. Chỉ cần cung cấp cho bộ chứa Web bản Servlet nhị phân sau khi đã biên dịch là đủ mà không cần phải cung cấp mã nguồn ban đầu. Mặt khác, các Servlet có thể tương tác với nhau để tạo ra những kết xuất tùy biến và đa dạng trước khi gửi trả lời cho ứne dụng khách. Servlet có thể được phân rã từ đơn thể của ứng dụng và được phát triển độc lập với nhau. Sau đó thực hiện việc kết ghép lại toàn một ứng dụng tone thể chung. Tuy nhiên, nhược điểm lớn nhất của Servlet là việc hiển thị thông

tin được thực hiện thông qua các lệnh printỉnị) hay printị), nên việc quản !ý và sửa

đổi các thông tin hiển thị rất khó khăn. Chính vì vậy, với các phần cần thực hiện hiển thị kết quả thì Servlet không thực sự phù hợp.

Do cả JSP và Servlet đều có ưu nhược điểm riêng, để phát huy được hiệu quả các công nghệ này đòi hỏi phải sử dụng chúng một cách hợp lý. Phân sau sẽ đê cập tới vấn đề này. [1]

3.4 Sử dụng Servlet và JSP trong các ứng dụng

3.4.1 Các trường hợp sử dụng Servlet

Các Servlet thường được sử dụng để thực hiện các xử lý của ứng dụng và tạo các dữ liệu dạng nhị phân. Servlet thường được sử dụng cho các mục đích sau:

• Dùng để cài đặt các dịch vụ: Servlet thường không được sử dụng để hiển thị thông tin trừ các thông tin dạng nhị phân. Thay vào đó, Servlet được dùng để cung cấp các dịch vụ của ứng dụng. Servlet có thể thực hiện mọi dịch vụ mà ứng dụng có thể cung cấp được như tạo khuôn mẫu, bảo mật, cá thể hóa, điều khiển ứne dụng và sau đó lựa chọn thành phần thực hiện hiển thị và nó chuyển yêu cầu hiển thị thông tin cho thành phần này để thực hiện hiển thị. • Dùng làm trình điểu khiển: Servlet là công nghệ thường được sử dụng cho

việc cài đặt các trình điều khiển trong bộ chứa Web. Các trình điều khiển này thực hiện việc xác định cách thức xử lý yêu cầu của người sử dụng và lựa chọn thành phần hiển thị thông tin tương ứng. Trình điều khiển kích hoạt các

xử lý của ứng dụng và thực hiện các quyết định. Tất cả các công việc này đều có tính chất thủ tục. Vì vậy, việc sử dụng các Servlet là hết sức phù hợp.

• Dùng để tạo các d ữ liệu dạng nhị ph â n : Các dữ liệu nhị phân được tạo bởi

Servlet thì tốt hơn. Các Servlet muốn sinh ra các dừ liệu nhị phân thì phải đặt kiểu nội dung thông tin là kiểu MIME. Servlet sẽ thực hiện viết các dừ liệu

dạng nhị phân ra đối tượng OutputStream được lấy từ ServletRequest. Mỗi

Servlet có thể viết dừ liệu ra OutputStream hoặc PrintWriter, nhưng không

thể viết ra cả 2 đổi tượng này đồns, thời. JSP không thể tạo được dừ liệu dạng nhị phân. [4]

3.4.2 Các trường hợp sử dụng JSP

JSP thườne được sử dụng đế tạo các kết quả dạng văn bản có định dạng hoặc không theo khuôn dạng nào cả. Các thành phần này được sử dụng trong các trường họp mà giá trị của dữ liệu thay đổi giữa các yêu cầu khác nhau nhưng cấu trúc của dữ liệu thi không thay đổi hoặc nếu có thay đổi thì thay đổi rất ít. Chính vì vậy, JSP thường được sử dụng trong các trường hợp sau:

• Dùng để hiển thị d ữ liệu: JSP được sử dụng có hiệu quả nhất là hiển thị các

dữ liệu dạng văn bản có cấu trúc. Các dữ liệu này thường dưới dạng HTML, XHTML và DHTML. Các thông tin được thể hiện ở đây có một phần là thông tin tĩnh với một số thành phần được thay thế bởi giá trị động tại thời điểm thực hiện.

• Dùng để sinh các d ữ liệu dạng XML: JSP là công nghệ rất tốt để tạo sinh

các dữ liệu XML có cấu trúc cố định. JSP được sử dụng để sinh ra các thông điệp XML theo các định dạng chuẩn và các giá trị thuộc tính thay đổi theo các yêu cầu được gửi đến. Các thông điệp XML có thể được tạo ra từ các khuôn mẫu hay thực hiện việc ghép nối nhiều thông điệp nhỏ thành một thông điệp lớn hơn.

- 7 4 -

• Dùng đế sinh các d ữ liệu văn bản không có cấu trúc: JSP không những có thể dùng để sinh các dừ liệu văn bản có cấu trúc mà còn có the sinh ra các văn bản không có cấu trúc như các văn bản dạn2 ASCII, độ rộng cột cố định hay sử dụng các ký tự ngăn cách. Một trong các ví dụ là sử dụng JSP để tạo các thư điện tử trả lời cho khách hàng.

Tóm lại, trong bộ chứa Web có hai loại thành phần khác nhau là JSP và Servlet, v ề cơ bản, JSP có thế được coi là một loại Servlet đặc biệt. Tuy vậy, mồi loại thành phần này đều có các ưu và nhược điểm khác nhau. Thành phần JSP thường được sử dụng cho việc hiển thị thông tin. Thành phần Servlet thường được sử dụng trong các công việc không đòi hỏi việc hiển thị thông tin. Ví dụ như thực hiện việc xử lý dừ liệu, điều khiển tiến trình xử lý, lựa chọn thành phần hiển thị. [4]

C h ư ơ n g 4 : ứ n g d ụ n g c ô n g n g h ệ J 2 E E t r o n g p h á t t r i ể n c á c ứ n g d ụ n g m ứ c x í

n g h i ệ p

4.1 Kiến trúc của ứng dụng mức xí nghiệp với J2EE

Các chương trước đã xem xét công nghệ J2EE nói chung và công nghệ cho các thành phần J2EE. Chương này sẽ xem xét việc sử dụng các công nghệ và các thành phần được đề cập ở trên được sử dụng như thế nào trong các ứng dụng.

Ở đây sẽ xem xét kiến trúc tổng quan của một ứng dụne mức xí nghiệp với công nghệ J2EE. Đồng thời cũng xem xét các khuôn mẫu phát triển của J2EE giúp giải quyêt các vấn đề đặt ra đối với các ứng dụng mức xí nghiệp nói chung và với J2EE nói riêng như thể nào.

Việc ứng dụng công nghệ J2EE và các khuôn mẫu phát triển sẽ được thể hiện trong phần này thông qua việc thiết kế một ứng dụng mẫu thực hiện chức năng của một ngân hàng điện tử.

4.1.1 Kiến trúc MVC

Cách tiếp cận phổ biến nhất hiện nay cho các ứng dụng sử dụng công nghệ J2EE là kiến trúc MVC (Model - View - Controller). MVC là kiến trúc rất phù hợp cho các ứng dụna, tương tác trên Web. Kiến trúc này đã được sử dụng từ trước khi công nghệ Java ra đời và được ứng dụng rất nhiều trong ngôn ngữ SmallTalk. Đặc điểm lớn nhất của kiến trúc này là thực hiện việc phàn chia các đối tượng thành các nhóm ricng biệt thực hiện chức năng xử lý dừ liệu và biểu diễn dữ liệu đế giảm thiểu tối đa sự phụ thuộc lẫn nhau của các đối tượng này.

Kiến trúc MVC chia ứng dụng thành các phần riêng biệt: mô hình, vùng nhìn và bộ điều khiển. Mỗi thành phần có một trách nhiệm riêng biệt và thực hiện nhiệm vụ khác nhau:

- 7 6 -

• Mô hình thực hiện việc biểu diễn các dừ liệu và các Logic nghiệp vụ cũng

Một phần của tài liệu Phát triển ứng dụng phần mềm trên máy chủ dựa trên công nghệ Java (Trang 65)

Tải bản đầy đủ (PDF)

(97 trang)