ung dung web voi jsp, servlet

32
A. Mở đầu Phần này tôi sẽ trình bày cho các bạn một cái nhìn tổng quan về lập trình web với Java, tổng quan về mô hình MVC, các khái niệm căn bản về Java servlet, JSP và ví dụ minh họa. Đối tượng đọc bài viết này là những người đã có kiến thức căn bản về HTML, lập trình Java. B. Nội dung I. Kiến trúc ứng dụng Web Java 1) WEB APPLICATION, COMPONENTS VÀ WEB CONTAINER Khi một đối tượng Web client (ví dụ như trình duyệt) giao tiếp với một ứng dụng J2EE, nó sẽ làm việc đó thông qua các đối tượng phía máy chủ được gọi là các thành phần Web (Web components). Thành phần Web ở đây được chia thành 2 loại là: Servlet (Java servlet) và JSP (Java server page).

Upload: biboy1629

Post on 03-Aug-2015

525 views

Category:

Documents


2 download

DESCRIPTION

fdsaf

TRANSCRIPT

Page 1: Ung Dung Web Voi JSP, Servlet

A. Mở đầu

Phần này tôi sẽ trình bày cho các bạn một cái nhìn tổng quan về lập trình web với Java, tổng quan về mô hình MVC, các khái niệm căn bản về Java servlet, JSP và ví dụ minh họa.Đối tượng đọc bài viết này là những người đã có kiến thức căn bản về HTML, lập trình Java.

B. Nội dung

I. Kiến trúc ứng dụng Web Java

1) WEB APPLICATION, COMPONENTS VÀ WEB CONTAINER

Khi một đối tượng Web client (ví dụ như trình duyệt) giao tiếp với một ứng dụng J2EE, nó sẽ làm việc đó thông qua các đối tượng phía máy chủ được gọi là các thành phần Web (Web components). Thành phần Web ở đây được chia thành 2 loại là: Servlet (Java servlet) và JSP (Java server page).

Page 2: Ung Dung Web Voi JSP, Servlet

Hình 1: Kiến trúc ứng dụng web java Các Web components chạy trên một Web container. Hiện nay Web container phổ biến là: Tomcat và resin. Tất cả các ứng dụng J2EE server chuẩn đều cung cấp các Web containers.Vai trò của Web container là cung cấp các dịch vụ hệ thống (System service) cho các Web components: Nhận yêu cầu dịch vụ từ client, chuyển thông điệp đến Web component phù hợp và quản lí vòng đời của các Web components. Ứng dụng web (Web application) là một gói triển khai bao gồm :

o Web components (Servlets và JSPs)o Tài nguyên tĩnh (như image,…)o Helper classes (Các lớp trợ giúp được sử dụng bởi Web components)o Thư viện (Library)o Deployment descriptor (File miêu tả thực thi)

Web application có thể được tổ chức thành một thư mục có các thư mục con và file (dạng chưa đóng gói) hoặc thành một *.war file (dạng đóng gói)

Page 3: Ung Dung Web Voi JSP, Servlet

2) CÁC CÔNG NGHỆ SỬ DỤNG TRONG ỨNG DỤNG WEB

Có rất nhiều công nghệ có thể dùng để xây dựng lên một ứng dụng Web, sau đây là các công nghệ được sử dụng chủ yếu:

Java Servlet API:Java Servlet API cho phép bạn xác định cụ thể các lớp HTTP. Một lớp servlet mở rộng khả năng của một máy chủ mà qua đó các ứng dụng trên máy chủ được truy cập bằng mô hình lập trình đáp ứng yêu cầu (request- response). Servlet có thể đáp ứng bất kì loại yêu cầu nào chúng chủ yếu được dùng để mở rộng các ứng dụng được lưu trữ bởi Web servers.

Java Server Page (JSP):JSP cung cấp một cách đơn giản, nhanh chóng để tạo nên một nội dung web động. JSP cho phép phát triển nhanh chóng các ứng dụng nền tảng Web mà không phụ thuộc vào máy chủ và hệ điều hành.

JavaServer Pages Standard Tag Library (JSTL):JSTL đóng gói các hàm cốt lõi được sử dụng chung bởi nhiều ứng dụng dựa trên công nghệ JSP. Thay vì việc pha trộn các tag từ nhiều nhà cung cấp trong ứng dụng của bạn, bạn chỉ cần thực thi một tập tiêu chuẩn của các tag.Việc tiêu chuẩn hóa này cho phép bạn triển khai các ứng dụng trên bất kì JSP container nào hỗ trợ JSTL và giúp ứng dụng thực hiện các tag một cách tối ưu.JSTL có thẻ iterator và conditional dùng để xử lí các luồng điều khiển, các thẻ phục vụ thao tác với tài liệu XML, các thẻ cho việc truy cập cơ sở dữ liệu dùng SQL, và các thẻ cho các chức năng thông thường.

JavaServer Faces Technology:JavaServer Faces là một framework giao diện người dùng (UI framework) cho việc xây dựng ứng dụng web. Thành phần chính của công nghệ JavaServer Face bao gồm một thành phần GUI framework, một mô hình linh hoạt để biểu diễn các thành phần trong các ngôn ngữ đánh dấu (markup) và các công nghệ đa dạng, và một bộ công cụ (RenderKit) tiêu chuẩn để thiết lập HTML markup.Chức năng này có sẵn thông qua các chuẩn Java APIs và các tập tin cấu hình dựa trên XML.

Java Message Service API:Gửi thông điệp (Message) là một phương pháp giao tiếp giữa các thành phần trong phần mềm hoặc ứng dụng. Một hệ thống thông điệp là một hệ thống ngang hàng, một máy khách trong hệ thống có thể gửi hoặc nhận tin nhắn từ bất kì một máy khách nào khác. Mỗi máy khách kết nối tới một đơn vị thông điệp sẽ cung cấp cơ sở cho việc tạo, gửi, nhận và đọc thông điệp. Bằng việc kết hợp công nghệ Java với tổ chức các thông điệp, Java Message Service (JMS) API cung cấp một công cụ mạnh mẽ để giải quyết vấn đề điện toán doanh nghiệp.

JavaMail API and the JavaBeans Activation Framework:Ứng dụng web có thể sử dụng tập lệnh của JavaMail để gửi đi các thông báo email. Trong việc kết hợp với phần mở rộng JavaMail, bạn có thể sử dụng các JavaBeans Activation Framework (JAF) API. API này cung cấp các dịch vụ tiêu chuẩn để xác định kiểu của một phần tùy ý trong dữ liệu, gói gọn việc truy cập vào nó, khám phá các phương thức có thể thực hiện với nó và tạo ra các thành phần thích hợp dựa trên kiến trúc thành phần JavaBeans để thực thi các phương thức.

Java API for XML Processing (JAXP):

Page 4: Ung Dung Web Voi JSP, Servlet

JAXP là Java API dùng để xử lí XML, nó là một phần trong Java SE platform, hỗ trợ cho việc xử lí các tài liệu XML bằng việc sử dụng Document Object Model (DOM), the Simple API for XML (SAX) và Extensible Stylesheet Language Transformations (XSLT). JAXP cho phép ứng dụng phân tích và chuyển đổi các tài liệu XML mà không phụ thuộc vào việc thực thi xử lí XML.

JDBC API:JDBC API cho phép bạn gọi các lệnh thực thi với cơ sở dữ liệu SQL từ các phương thức của ngôn ngữ Java. Bạn có thể sử dụng JDBC API trong một servlet, trang JSP, hoặc một Enterprise bean khi bạn cần truy cập cơ sở dữ liệu.

Hình 2: Các công nghệ xây dựng ứng dụng Java Web

3) CÁC BƯỚC PHÁT TRIỂN VÀ TRIỂN KHAI ỨNG DỤNG WEB

Viết code, biên dịch cho các Web components (Servlet hoặc JSP), các helper classes sử dụng bởi Web components Tạo các tài nguyên tĩnh (Images, các trang HTML,…) Viết file deployment descriptor (web.xml) Build ứng dụng Web (tạo file *.war hoặc thư mục dạng chưa đóng gói nhưng triển khai được) Triển khai ứng dụng Web trên một Web container, từ đó web client có thể truy cập ứng dụng qua URL

II. Tổng quan về MVC

Page 5: Ung Dung Web Voi JSP, Servlet

Hình 3: Kiến trúc mô hình MVC

1) KHÁI NIỆM VỀ MÔ HÌNH MVC

Ý niệm chính của mô hình này là tách biệt phần ánh xạ, lưu trữ và xử lý dữ liệu (Model) tách biệt hoàn toàn với thành phần trình bày giao diện kết quả cho người dùng hay phần giao diện giúp đón nhập nhập xuất cho người dùng (View). Ý niệm trên cho phép người lập trình có thể tách biệt công việc trong quá trình xây dựng chức năng cho ứng dụng và quá trình xây dựng giao diện cho người dùng. Bên cạnh đó, ý niệm trên cho phép việc thay đổi thành phần của dữ liệu sẽ không ảnh hưởng nhiều đến giao diện của người dùng vì mô hình đưa ra Model để không cho người dùng thao tác trực tiếp vào dữ liệu vật lý (Cơ sở dữ liệu hay là tập tin) mà

Page 6: Ung Dung Web Voi JSP, Servlet

phải thông qua Model, do vậy cho dù dữ liệu vật lý thay đổi cấu trúc nhưng cấu trúc Model cho việc truy cập, xử lý, lưu trữ dữ liệu sẽ không bị ảnh hưởng. Nhìn theo khái niệm các thành phần giao tiếp trên Model là tên hàm – tham số truyền (interface) ít khi thay đổi, nội dung thay đổi chính là cách thức cài đặt bên trong hàm. Nhưng nội dung đó người sử dụng chức năng trên giao diện không quan tâm vì đa số họ chỉ quan tâm interface là gì, giá trị nhập và kết xuất ra sao. Do vậy, đây là một tính chất linh hoạt và uyển chuyển của mô hình MVC. Ngoài ra, việc tách biệt rời rạc giữa Model và View theo phân tích của chúng ta đang thể hiện tính ưu việt. Tuy nhiên, một ứng dụng có rất nhiều Model và nhiều View, do vậy, mô hình cần có một thành phần lựa chọn và kết nối các thành phần này lại với nhau theo cách hiệu quả nhất. Controller là một trong những đối tượng đưa ra để đón nhận yêu cầu nhập xuất từ người dùng, xác định model tương ứng với view nhập để đưa model xử lý, kết quả xử lý của model sẽ được chuyển đến controller để controller xác định view kết xuất để đổ kết quả xử lý và hiển thị cho người dùng.

Như vậy ta có thể định nghĩa các thành phần trong mô hình MVC như sau:Model:

o Là các thành phần hỗ trợ ánh xạ dữ liệu vật lý lên bộ nhớ, lưu trữ dữ liệu tạm thời trên bộ nhớ, hỗ trợ các cách thức xử lý dữ liệu, hỗ trợ khả năng giao tiếp và trao đổi dữ liệu giữa các đối tượng khác trong bộ nhớ và cơ sở dữ liệu.o Mô hình hóa dữ liệu và hành vi trong xử lí nghiệp vụ.o Cụ thể là một đối tượng Object trong khái niệm của lập trình hướng đối tượng OOP và mang đầy đủ khái niệm và tính chất của một Object.o Trong ứng dụng Web của Java, Model sẽ là JavaBean hay Enterprise JavaBean hay Web Service.

View:o Là thành phần hỗ trợ trình bày dữ liệu hay kết quả ra màn hình, hỗ trợ nhập thông tin từ phía người dùng, biểu diễn kết quả của tầng business logic (model).o Các thành phần này có khả năng truy cập Model, truy xuất Model thông qua những hành vi mà Model cho phép nhưng View không thể thay đổi các thành phần trong Model.o Trong mô hình ứng dụng Web thì html, servlet, jsp … là những thành phần đại diện cho View.

Controller:o Là các thành phần hỗ trợ kết nối người dùng server, đón nhận yêu cầu người dùng, thực hiện chuyển xử lý, lựa chọn và cập nhật model và view tương ứng để trình bày về phía người dùngo Hỗ trợ kết nối giữa người model và view, giúp model xác định được view trình bàyo Trong mô hình ứng dụng Web thì Servlet đóng vai trò của Controller

2) KIẾN TRÚC MÔ HÌNH MVC2 (SERVLET-CENTRIC ARCHITECTURE)

Page 7: Ung Dung Web Voi JSP, Servlet

Hình 4: Mẫu thiết kế mô hình MVCCơ chế thực hiện:

o Web Browser gửi request đến server thông qua các control trên form HTML hay JSP, hay query string url hay qua cookies.o Servlet – Controller đón nhận request và xác định Model tương ứng để tạo ra instance của JavaBean để đón nhận các giá trị nhập từ request để lưu trữ và xử lýo Model thực hiện xử lý, kết nối dữ liệu vật lý dưới DBMS (nếu có) và trả kết quả trả về cho Controllero Kết quả xử lý được chuyển vào Servlet – Controller, Servlet Controller thực hiện tạo hay lựa chọn View để từ đó đưa kết quả xử lý hay dữ liệu lấy từ Model để cập nhật lại trang kết quả View.

Page 8: Ung Dung Web Voi JSP, Servlet

o Controller gửi View qua response cho người dùng để browser có thể trình bày dữ liệu trong Web Browser

Ưu điểm:o Tính tin cậy (reliability): việc chia từng phần riêng biệt giúp chúng ta sửa đổi từng thành phần riêng biệt, không ảnh hưởng, có thể thay thế thành từng phần tương đương, có thể chia công việc theo nhóm, biên dịch độc lập, tăng cường khả năng tích hợp với khả năng đúng đắn caoo Tính tương thích cao (compatibility): có khả năng sử dụng các loại công nghệ khác nhau không lệ thuộc vì chúng ta đã được tách biệt và khái niệm cho từng loại thành phần riêng biệto Tính tái sử dụng (reusable): chúng ta có thể sử dụng các thành phần chia cắt lại trong các ứng dụng khác hay sử dụng lại nhiều lần trong cùng một ứng dụng, tăng tính hiệu quả trong lập trìnho Khả năng triền khai nhanh chóng và bảo trì nhanh chóng (quick deploy and easy maintenance): vì các thành phần độc lập với nhau

3) WEB APPLICATION FRAMEWORKS

Phổ biến hiện nay là các framework dựa trên kiến trúc MVC model 2 Cung cấp các lớp và các interfaces cho lập trình viên sử dụng, mở rộng nhằm đáp ứng yêu cầu về mặt chức năng của các ứng dụng web hiện nay như:

o Nhận và chuyển tiếp các HTTP requests.o Gọi các phương thức từ tầng model.o Tổng hợp và chọn ra các View trả về cho client

Ưu điểm khi sử dụng framework:o Phân tách tầng presentation và các business logic thành các componentso Cung cấp 1 điểm điều khiển trung tâmo Cung cấp các tính năng mở rộngo Dễ dàng cho việc kiểm thử đơn vị (unit testing) và bảo trìo Nhiều công cụ hỗ trợo Ổn địnho Có cộng đồng hỗ trợ mạnh mẽo Đơn giản hóa chế độ đa ngôn ngữo Đơn giản hóa việc xác nhận đầu vàoo Định nghĩa các components chuẩn, cho phép tái sử dụngo Chỉ rõ cách thức phối hợp các components trong 1 ứng dụng

Một số Web application framework:o Apache Struts I và IIo Spring Framework MVCo JavaServer Faces (JSR-127)o Echoo Tapestryo Wicket

[++III. Cơ bản về Servlet và JSP]

1) KIẾN TRÚC J2EE

Page 9: Ung Dung Web Voi JSP, Servlet

Hình 5: Kiến trúc J2EE 1.2

2) VỊ TRÍ CỦA SERVLET VÀ JSPChúng chủ yếu nằm ở phía server và ở tầng biểu diễn trong nền tảng ứng dụng J2EE.

Page 10: Ung Dung Web Voi JSP, Servlet

Hình 6: J2EE Platform

3) SERVLET

3.1. Khái niệm

Khái niệm:o Là các đối tượng hoặc một đoạn chương trình trong Java, mở rộng chức năng của một HTTP server.o Được ánh xạ với một URL và được quản lí bởi container tương ứngo Chạy được trên tất cả các web servers và các application server chuẩno Không phụ thuộc vào platform và server.

Ưu điểm của Servlet:o Có rất nhiều công cụ của bên thứ 3 và nhiều server hỗ trợ servlet.o Truy cập được mọi Java APIso Độ tin cậy cao (Reliable), an toàn (secure), hiệu năng tốt, dễ mở rộng (scalability)

3.2. Mô hình Servlet request và response

Page 11: Ung Dung Web Voi JSP, Servlet

Hình 7: Mô hình xử lí Request của Servlet Request và Response

o Request: là thông tin được gửi từ client tới 1 server. Thông qua các thông tin chứa trong request mà server biết được ai tạo ra request, dữ liệu gì được user nhập vào và gửi đi, các HTTP header.

Http request bao gồm :o Headero Phương thức :

Get: Thông tin nhập vào trong form được truyền như một phần của URLPost: Thông tin nhập vào trong form được truyền trong nội dung thông điệpPut, Delete, …

o Dữ liệu kèm theo trong request (request data) Response : là thông tin gửi đến client từ 1 server. Có thể là dữ liệu dạng text (html, thuần text) hoặc dữ liệu binary (image). Nhiệm vụ của Servlet:

o Nhận client request (hầu hết ở dạng HTTP request).o Trích xuất một số thông tin từ request.o Xử lí nghiệp vụ (truy cập database, gọi EJBs,…) hoặc sinh ra nội dung mới.o Tạo và gửi trả response cho client (hầu hết ở dạng HTTP response) hoặc forward request cho servlet khác hoặc một trang JSP.

3.3. Vòng đời của servlet

Page 12: Ung Dung Web Voi JSP, Servlet

Hình 8: Vòng đời Servlet Khi một ứng dụng chưa được deploy vào trong server thì servlet chưa được khởi tạo (uninstantiated). Khi ứng dụng được deploy vào server thì container sẽ thực hiện khởi tạo instance cho servlet, trong lúc khới tạo kích hoạt hàm init. Lưu ý, hàm init chỉ được kích hoạt lần duy nhất khi deploy. Khi có một request đến servlet của người dùng, container đón nhận request và chọn instance bean bất kỳ tương ứng với yêu cầu để đáp ứng. Sau khi chọn được bean, container sẽ kích hoạt hàm service tương ứng. Lưu ý ở đây, ở lần yêu cầu thứ 2 thì container cũng sẽ chọn bean và kích hoạt hàm service tương ứng, do vậy, hàm service sẽ được gọi rất nhiều lần. Khi servlet được cập nhật mới hay server bị crash hay undeploy ứng dụng ra khỏi server – container, thì hàm destroy của servlet được kích hoạt. Nghĩa là servlet chỉ kích hoạt phương thức destroy lần cuối cùng duy nhất.

3.4. Các phương thức trong vòng đời Servlet

Container điều khiển vòng đời của một servlet và các phương thức trong vòng đời Servlet được gọi bởi container

init(): Được gọi một lần khi servlet được tạo thể hiện hóa lần đầu tiên. Ta sẽ thực hiện các khởi tạo trong phương thức này destroy(): Được gọi trước khi hủy một servlet instance, hàm này thực hiện thao tác dọn dẹp service(): trong lớp javax.servlet.http.HttpServlet là một phương thức cài đặt từ phương thức abstract trong lớp javax.servlet.GenericServlet. Hàm này gọi đến hai phương thức doGet() và doPost(). Ta không override phương thức này. doGet() và doPost() trong lớp javax.servlet.http.HttpServlet dùng để xử lí các HTTP GET, POST requests. Ta sẽ override các phương thức này trong servlet của mình để có xử lí phù hợp.

Sự khác biệt giữa phương thức service() với 2 phương thức doGet(), doPost() là

Page 13: Ung Dung Web Voi JSP, Servlet

phương thức service() nhận tham số là các requests và responses tổng quát, còn doGet() và doPost() nhận tham số là các HTTP requests và HTTP responses.

Hình 9: Minh họa phương thức Service()

Page 14: Ung Dung Web Voi JSP, Servlet

Hình 10: Minh họa phương thức doGet(), doPost()Những việc cần làm trong phương thức doGet() và doPost():

Trích xuất các thông tin gửi từ client (HTTP parameter) từ HTTP request Thiết lập, truy cập các thuộc tính của các đối tượng phạm vi (page, request, session, ServletContext) Thực hiện các xử lí nghiệp vụ (business logic) hoặc truy cập CSDL Tùy chọn chuyển tiếp request đến các web components khác (Servlet hoặc JSP) Sinh HTTP response và trả về cho client

3.5. Đối tượng phạm vi (Scope object)

Thông tin sẽ được chia sẻ giữa các web components thông qua thuộc tính của các Scope objects. Mỗi thuộc tính là một cặp (name, object). Đây là vùng không gian bộ nhớ (memory segment) được cung cấp cho mỗi ứng dụng web dùng để chứa các thông tin để giao tiếp với các thành phần khác trong server. Mỗi vùng không gian này tồn tại trong một khoảng thời gian nhất định tùy theo qui định cho từng loại

Page 15: Ung Dung Web Voi JSP, Servlet

Scope object.Các thuộc tính được tham chiếu trong các Scope objects thông qua phương thức getAttribute() và setAttribute()Có 4 loại Scope object được định nghĩa như sau:

Servlet context: Phạm vi truy cập là tất cả các web components trong 1 servlet context. Thời gian tồn tại từ lúc bắt đầu ứng dụng đến khi ứng dụng bị undeploy ra khỏi server hay server bị crash Session: Phạm vi truy cập là các web components xử lí request trong 1 session. Thời gian tồn tại là từ lúc mở trình duyệt đến đóng trình duyệt, hết thời gian session, session bị hủy, … Request: Phạm vi truy cập là từ các components xử lí request đó. Thời gian tồn tại từ lúc gửi request cho đến khi response. Page: Phạm vi truy cập là trong trang JSP tạo ra object đó.

4) JSP

4.1 Thế nào là nội dung tĩnh và nội dung động

Nội dung tĩnh (static content): là nội dung hiển thị như nhau cho tất cả mọi người, điển hình là các trang HTML tĩnh. Nội dung động (dynamic content): là nội dung được sinh ra và biến đổi tùy theo một số điều kiện nhất định. Các điều kiện đó có thể liên quan đến tài khoản người dùng, thời gian, giá trị mà user nhập vào thông qua form hoặc qua sự lựa chọn.

4.2 Khái niệm về công nghệ JSP

Công nghệ JSP:o Là công nghệ được xây dựng dựa trên nền tảng công nghệ Servlet.o Cho phép phân tách tầng business logic với tầng presentation để giúp ứng dụng Web dễ bảo trì, có khả năng tái sử dụng. Presentation gồm các file có dạng HTML hoặc XML/XSTL. Business logic được cài đặt trong các Java Beans hoặc các thẻ mở rộng (custom tags)o Dễ mở rộng nhờ các custom tags.o Một trang JSP là một tài liệu text, cho phép trả về nội dung động cho trình duyệt phía client.Một trang JSP thông thường bao gồm cả nội dung tĩnh như: HTML, XML và nội dung động như: mã lập trình, JavaBeans, custom tags.

Ví dụ một trang JSP hiển thị ngày tháng trong trình duyệt:<%@page import="java.util.Date"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!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>Using the date class</title></head><body><h1>Sử dụng lớp Date trong java</h1>

Page 16: Ung Dung Web Voi JSP, Servlet

The date is: <%= new Date() %></body></html>

Kết quả khi mở trang JSP bằng trình duyệt:

Hình 11 : Ví dụ minh họa

4.3 So sánh giữa Servlet và JSP

Hình 12: So sánh giữa Servlet và JSP Ưu điểm của JSP:

Page 17: Ung Dung Web Voi JSP, Servlet

o Tách biệt nội dung và cách thức trình bàyo Đơn giản hóa việc phát triển ứng dụng web với JavaBeans và custom tagso Hỗ trợ tái sử dụng nhờ sử dụng các componentso Tự động biên dịch lại các trang JSP khi có thay đổi mã nguồno Độc lập platform, dễ viết

Ưu điểm của JSP so với Servlet:o Servlet sử dụng lệnh println() để sinh các trang HTML, như vậy sẽ dẫn đến hạn chế trong việc bảo trì các trang HTMLo Khi servlet thay đổi thì phải biên dịch lại, deploy lạio JSP khắc phục được cả 2 hạn chế trên

Tuy nhiên ta cần đồng thời khai thác cả 2 công nghệ, sức mạnh của servlet là “controlling và dispatching” còn sức mạnh của JSP là “displaying”. Trong thực tế cả servlet và JSP được sử dụng trong mẫu thiết kế MVC, servlet xử lí phần Controller còn JSP xử lí phần View.

4.4 Kiến trúc JSP

Hình 13: Kiến trúc thiết kế ứng dụng Web Vòng đời của 1 trang JSP

Page 18: Ung Dung Web Voi JSP, Servlet

Hình 14: Vòng đời một trang JSP1 Người dùng gửi yêu cầu tới trang JSP thông qua trình duyệt1 Yêu cầu đó được chuyển tới web server1 Web server sẽ chuyển JSP vào bộ dịch để chuyển thành mã Servlet.1 Nếu file JSP được gọi không phải lần đầu thì sẽ đến bước 71 Tạo một servlet từ file JSP, tất cả các đoạn mã HTML sẽ được chuyển đổi sang lệnh println()1 Servlet sẽ được biên dịch thành một file class1 Tạo đối tượng servlet1 HTML thông qua phương thức output của servlet sẽ được trả về1 Browser hiển thị kết quả

Các phương thức trong giai đoạn thực thi:o jspInit(): Đọc tham số cấu hình, khởi tạo tài nguyên, làm bất kì công việc khởi tạo nào khác bằng việc override phương thức nàyo _jspService(): Phương thức này được gọi với mỗi request trong suốt vòng đời của JSP. Thực tế thì các business logic được viết ở trong hàm nàyo jspDestroy(): Đọc tham số cấu hình, giải phóng tài nguyên, làm bất kì công việc nào bằng cách override phương thức này

4.5 Kĩ thuật sinh nội dung động với JSP

4.5.1 Các kĩ thuật sinh nội dung động với JSP: Gọi mã Java trực tiếp trong JSP Gọi mã Java gián tiếp trong JSP Sử dụng JavaBeans Tự phát triển và sử dụng các custom tags

Page 19: Ung Dung Web Voi JSP, Servlet

Sử dụng các custom tags của bên thứ 3 hoặc JSTL Sử dụng mẫu thiết kế MVC Sử dụng model 2 framework đã được kiểm chứng

4.5.2 Kĩ thuật gọi mã java trực tiếp: Là kĩ thuật đặt tất cả mã nguồn java trong trang JSP, chỉ phù hợp với ứng dụng web đơn giản. Khó bảo trì, khó tái sử dụng, khó hiểu Phân tách giữa phần nội dung và phần trình bày là chưa rõ ràng, không nên dùng với loại ứng dụng web tương đối phức tạp.

4.5.3 Kĩ thuật gọi mã java gián tiếp Phát triển các lớp tiện ích độc lập, chèn vào trang JSP mã nguồn Java gọi đến các lớp tiện ích. Phân tách tốt hơn phần sinh nội dung (contents) với phần biểu diễn (presentation) so với kĩ thuật gọi mã java trực tiếp. Tái sử dụng, bảo trì tốt hơn so với kĩ thuật gọi mã java trực tiếp, tuy nhiên sự tách biệt giữa phần nội dung và phần biểu diễn chưa rõ ràng.

4.5.4 Sử dụng JavaBeans Phát triển các lớp tiện ích dưới dạng JavaBeans Khai thác được các hỗ trợ của JSP cho JavaBeans Dễ sử dụng hơn với người phát triển Web, dễ tái sử dụng, bảo trì hơn so với 2 cách đầu

4.5.5 Phát triển và sử dụng các custom tags Phát triển các đối tượng gọi là các custom tags (custom tag được thiết kế đặc biệt cho JSP) Mạnh mẽ hơn JavaBeans component Tái sử dụng, bảo trì tốt hơn, ổn định hơn Tuy nhiên, phát triển custom tags khó hơn tạo các JavaBeans

4.5.6 Sử dụng các custom tags của bên thứ 3 hoặc JSTL Có nhiều custom tags mã nguồn mở hoặc thương mại; JSTL là một tập chuẩn hóa các custom tags tối thiểu cho J2EE

4.5.7 Sử dụng mẫu thiết kế MVC Model : Sử dụng các công nghệ sẵn có như JDBC, hibernate,… View : Sử dụng JSP Controller : sử dụng Servlet

4.5.8 Sử dụng model 2 framework đã được kiểm chứngCó rất nhiều framework như: Spring, Apache struts, JavaServer Faces (JSF)…

4.6 Gọi mã nguồn Java sử dụng JSP Scripting elements

4.6.1 Khái niệmJSP scripting là các phần tử cho phép chèn mã nguồn Java vào servlet được sinh tương ứng cho trang JSPCó 3 dạng:Expressions: <%= Expressions %>Scriptlets: <% Code %>Declarations: <%! Declarations %>

4.6.2 Expressions

Page 20: Ung Dung Web Voi JSP, Servlet

Trong giai đoạn thực thi một trang JSP Expression được tính giá trị và chuyển thành một String, String này sau đó được chèn vào output của servlet tương ứng. Kết quả có được tương đương với câu lệnh trong Servlet sau : out.println(expression). Có thể sử dụng các biến được định nghĩa từ trước trong expression.Cú pháp : <%= Expression %> hoặc <jsp:expression> Expression </jsp:expression>.Chú ý : Ta không được dùng dấu ";"

4.6.3 ScriptletsScriptlet được sử dụng để chèn mã Java bất kì vào phương thức _jspService() của Servlet tương ứng.Có thể làm được các việc mà expressions không làm được như :

Thiết lập response headers và status codes Ghi log cho server Cập nhật CSDL Thực thi mã nguồn có điều khiển lặp, rẽ nhánh

Cú pháp: <% Java code %> hoặc <% jsp:scriptlet> Java code </jsp:scriptlet>4.6.4 Declarations

Declaration được sử dụng để định nghĩa các biến hoặc các phương thức sẽ được chèn vào trong lớp servlet tương ứng. Declaration nằm ngoài phương thức _jspSevice(), không được truy cập các đối tượng khai báo từ trước (implicit objects), thường được sử dụng với Expression hoặc Scriptlets.Cú pháp : <% ! Mã khai báo biến và phương thức %> hoặc<jsp:declaration> Mã khai báo biến và phương thức </jsp:declaration>

4.7 Include và forward tới các tài nguyên Web khác

4.7.1 Include các thành phần trong một trang JSPCó 2 kĩ thuật dùng để đính kèm một tài nguyên web trong 1 trang JSP

Sử dụng chỉ thị include Sử dụng phần tử jsp:include

4.7.2 Chỉ thị Include Được xử lí khi trang JSP được dịch thành servlet. Hoạt động của chỉ thị là chèn văn bản chứa trong file khác ( hoặc nội dung tĩnh hoặc 1 trang JSP khác) vào trong trang JSP đang xét Thường được sử dụng để đính kèm các thông tin banner, copyright, hoặc bất kì nội dung nào để tái sử dụng cho trang khác

Cú pháp: <%@ include file=”filename” %>4.7.3 Phần tử jsp:include

Được xử lí khi thực thi 1 trang JSP Cho phép chèn tài nguyên tĩnh hoặc động vào 1 file JSP

o Static: Nội dung của resource được chèn vào file JSP đang xéto Dynamic: Một yêu cầu được gửi tới resource cần được đính kèm, trang cần đính kèm (included page) sẽ được thực thi và kết quả sẽ được đính vào response rồi trả về cho trang JSP ban đầu.

Cú pháp:<jsp:include page =”includePage”/>4.7.4 Cách lựa chọn sử dụng 2 kĩ thuật include

Page 21: Ung Dung Web Voi JSP, Servlet

Chúng ta sẽ sử dụng chỉ thị include (include directive) nếu file ít khi thay đổi vì include directive chỉ chèn nội dung tĩnh nên xử lí nhanh hơn jsp:include Sử dụng jsp:include cho nội dung thay đổi thường xuyên Sử dụng jsp:include khi chưa quyết định được sẽ đính kèm trang nào cho đến khi main page được request.

4.7.5 Forward tới web component khác Cùng cơ chế như trong servlet. Cú pháp: <jsp:forward page=”abc.jsp” /> Thông qua phần tử này đối tượng request ban đầu sẽ được chuyển cho trang đích. Có thể đính thêm các tham số mới trước khi chuyển đi.

Ví dụ:*<jsp:forward page=”…”>*<jsp:param name = ”param1” value = ”value1”/>*</jsp:forward>

4.8 Directives

Directives là các thông điệp (message) chuyển đến JSP container, hướng dẫn cách biên dịch trang JSP Không sinh ra output Cú pháp : <%@ directive {attr = value} %>

Có 3 loại Directive: page: Chỉ ra các thuộc tính của trang JSP: <%@ page import = “java.util.*” %> include: Được sử dụng để đính kèm text hoặc mã nguồn khi dịch trang JSP thành Servlet.

<%@ include file = “header.html” %> Taglib: Chỉ ra một thư viện thẻ mà JSP container cần phải biên dịch<%@ taglib uri = “mytags” prefix = “codecamp” %> Chỉ thị <%@ page {name = value} %> dùng để đưa thêm các thông tin vào Servlet biên dịch từ trang JSP tương ứng. Cho phép chỉ ra:

o Import các class nào: <%@ page import = “ java.util.*” %>o Loại MIME sinh ra là gì: <%@ page contentType = "MIME-Type " %>o Xử lí đa luồng như thế nào: <%@ page isThreadSafe = “true” %> hoặc <%@ page isThreadSafe = “false” %>o Xử lí các lỗi không mong đợi: <%@ page errorPage = “errorpage.jsp” %>

4.9 JavaBeans components

JavaBeans là các lớp java có thể được tái sử dụng trong các ứng dụng. Bất kì một lớp java nào tuân theo các quy định thiết kế đều có thể trở thành một JavaBean.Trong một trang JSP có thể khởi tạo các JavaBeans và truy cập, thiết lập (get/set) các thuộc tính của nó.JavaBeans có thể chứa các xử lí nghiệp vụ hoặc truy cập cơ sở dữ liệu*Quy ước thiết kế JavaBeans:

JavaBeans có các thuộc tính (properties) Một thuộc tính có thể là: Read, write, read-only, write-only; tổ chức kiểu đơn hoặc kiểu mảng.

Page 22: Ung Dung Web Voi JSP, Servlet

Các thuộc tính được thiết lập và truy cập qua các phương thức setX, getX. JavaBeans phải có constructor mặc định Ưu điểm khi sử dụng JavaBeans trong các trang JSP

o Người thiết kế trang web không cần học Java.o Tách biệt rõ ràng giữa content và presentation.o Tái sử dụng mã nguồn hiệu quảo Chia sẻ đối tượng dễ dàng

5) VÍ DỤ ÁP DỤNG

Sau đây mình sẽ đưa ra một ví dụ ngắn hết sức đơn giản để các bạn hiểu rõ hơn về việc lập trình web với Servlet và JSP.Giả sử bạn muốn lập một trang mô phỏng một giỏ hàng trong cửa hàng bán đồ dùng văn phòng phẩm của bạn. Người mua sẽ thêm các mặt hàng trong danh sách sản phẩm của bạn vào giỏ, có thể tính được tổng số tiền phải trả cho toàn bộ giỏ hàng.Dưới đây là hướng dẫn cụ thể, sử dụng Eclipse:

Bước 1: Bạn tạo một cơ sở dữ liệu để chứa danh sách các mặt hàng trong cửa hàng của bạn.Ở đây ta dùng MySQL, tạo một cơ sở dữ liệu có tên là qlsp, trong đó có một bảng đặt tên là “sanpham”. Bảng này có 3 trường: msSP (Mã số sản phẩm), tenSP (Tên sản phẩm), dongia (Đơn giá cho mỗi loại sản phẩm).Ta lập một bảng biểu diễn danh sách các mặt hàng ví dụ như sau:

Hình 15 : Bảng cơ sở dữ liệuo Bước 2: Tạo các lớp đặc tả các đối tượng có liên quan đến giỏ hàng:

ControllerServlet.java: Lớp này đóng vai trò như thành phần Controller trong mô hình MVC, kế thừa lớp HttpServlet, có nhiệm vụ quản lí các tác vụ (request) của người dùng thông qua việc override phương thức doGet() và doPost(). DBActions.java: Lớp này đảm nhiệm việc kết nối với cơ sở dữ liệu, thực hiện việc truy vấn từng sản phẩm cũng như danh sách tất cả sản phẩm. Nó giống như thành phần Model trong mô hình MVC SanPham.java: Mỗi một đối tượng của lớp này biểu diễn cho một loại sản phẩm. MonHang.java: Lớp này mô tả cho một món hàng được đặt mua

Page 23: Ung Dung Web Voi JSP, Servlet

bao gồm loại sản phẩm đặt mua và số lượng của loại sản phẩm đó. GioHang.java: Lớp này biểu diễn cho một giỏ hàng với các thao tác thêm món hàng, xóa món hàng, lấy giỏ hàng, tính tiền của toàn bộ sản phẩm trong giỏ hàng.

o Bước 3: Tạo các file jsp tương ứng với các trang “GianHang.jsp”, “GioHang.jsp”, “ThanhToan.jsp”. Đặt các file này vào thư mục “WebContent”. Các file này tương đương với thành phần View trong mô hình MVC. Chú ý là trong ví dụ này phân biệt controller, view mang tính chất tương đối.

GianHang.jsp: File này biểu diễn giao diện khi khách hàng muốn truy cập giỏ hàng để tiến hành đặt sản phẩm. GioHang.jsp: Thực chất đây chỉ biểu diễn một bảng thống kê các sản phẩm trong giỏ hàng. Trong “GianHang.jsp” có include file này. ThanhToan.jsp: Thể hiện giao diện khi tính tổng tiền các sản phẩm có trong giỏ hàng.

o Bước 4 : Tạo file web.xml rồi đặt trong thư mục "WEB-INF".o Bước 5 : Copy thư viện dùng để kết nối với cơ sở dữ liệu vào trong thư mục lib. Chạy Tomcat server , rồi truy cập vào đường dẫn đến trang web.Giao diện chương trình :

Hình 16: Giao diện 1

Page 24: Ung Dung Web Voi JSP, Servlet

Hình 17: Giao diện 2

Hình 18: Giao diện 3

C. Kết luận

Page 25: Ung Dung Web Voi JSP, Servlet

Trên đây là những trình bày sơ lược, khái quát về công nghệ lập trình web với servlet và jsp. Nắm vững các khái niệm căn bản này sẽ giúp các bạn làm quen tốt hơn với các framework lập trình web liên quan đến java.