Giới thiệu về JSP và Servlet

Một phần của tài liệu Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR (Trang 56 - 67)

Giới thiệu JavaServerPages (JSP)

Công nghệ JavaServer Pages (viết tắt là JSP) còn ñược biết ñến với một

tên khác là Java Scripting Preprocessor - tạm dịch là "Bộ tiền xử lý văn

lệnh Java"- là công nghệ Java dựa trên nền J2EE ñể xây dựng những ứng dụng chứa nội dung trang Web ñộng như: HTML, DHTML, XHTML và XML. Công nghệ JSP có khả năng tạo ra những trang Web với nội dung linh hoạt, có vai trò quan trọng trong việc phát triển các ứng dụng Web. Công nghệ này cho phép người ta nhúng mã Java và một số hành ñộng xử lý ñược ñịnh trước (pre-defined actions) vào trong nội dung tĩnh của trang.

Một trang JSP (.jsp) là một trang HTML hay XML trong ñó có chứa mã Java, phần HTML chịu trách nhiệm về việc ñịnh dạng văn bản, mã chương trình xen lẫn trong văn bản dùng ñể diễn ñạt các thao tác xử lý dữ liệu hoặc nối kết với CSDL (Database). Trang Web truyền thống (dùng HTML) ñược trình chủ Web gửi ngay ñến cho máy khách (Client) khi có yêu cầu, còn các trang JSP phải chạy qua một guồng máy (Engine) riêng biệt, ở ñó phần mã chương trình ñược tách ra khỏi trang JSP, ñược thi hành và kết quả xử lý ñược ghi trở vào trang Web ñang xét, tạo thành trang HTML thuần tuý. Trang JSP khi chạy, mã Java sẽ ñược biên dịch thành JavaServlet và Servlet này chạy trên máy ảo Java (JVM) ở phía máy chủ (Web Server). Mã Java ñược biên dịch khi máy khách truy xuất trang JSP lần ñầu tiên. Tập tin .jsp có cấu trúc giống như tập tin .html truyền thống, nhưng khác ở chỗ là tập tin .jsp có xen lẫn mã Java. Mã Java ñược tách biệt với phần HTML thông thường bằng cặp dấu <% và %>.

Cơ chế hoạt ñộng của JSP

Công nghệ JSP gắn liền với Servlet. Mã Java trong trang JSP ñược biên dịch thành Servlet khi trình duyệt phía khách (Client) truy xuất trang JSP lần

Trang 57 ñầu tiên. Quy trình diễn ra như sau : Mã Java ñược tách ra khỏi nội dung bình thường của trang JSP, tạo thành mã nguồn của Servlet. Kết quả xử lý của Servlet ñược thay vào chỗ biểu thức JSP trong trang Web ban ñầu (trang Web mà trình duyệt nhận ñược là trang HTML thuần túy).

Những ñiểm nổi bật của công nghệ JavaServerPages (JSP)

Tận dụng ñược sức mạnh của ngôn ngữ lập trình Java: Từ trước ñến nay chúng ta ñều biết ñến Java như là một công cụ hỗ trợ ñắc lực trong việc xây dựng các ứng dụng Web Client - side. Nhưng Java cũng còn là một môi trường lý tưởng ñể tạo thành phần server cho ứng dụng Web. Do nền tảng của JSP dựa trên Java nên JSP cũng tận dụng ñược các ưu ñiểm trên. JSP cung cấp một phương pháp rất mạnh ñể xử lý yêu cầu từ Client, cũng như những ưu việt trong chế ñộ an toàn, chống rò rỉ bộ nhớ (memory leak) và hỗ trợ chế ñộ xử lý ña tuyến ñoạn (multithreading). Ngòai ra, môi trường Java ñã ñưa ra rất nhiều sự mở rộng cho việc phát triển các ứng dụng enterprise. JSP ngày nay ñã là một thành phần cốt lõi trong môi trường J2EE. Vì vậy, với công nghệ JSP,

Trang 58 người ta hoàn toàn có thể tạo ra ñược những ứng dụng có quy mô lớn với chất lượng cao.

Quy trình phát triển, triển khai và duy trì phát triển ứng dụng Web trở nên dễ dàng và nhanh chóng: JSP ñã làm ñơn giản hóa và tăng tốc quy trình phát triển ứng dụng Web. Thay cho việc phải viết một chương trình Java, giờ ñây người ta chỉ cần tạo một trang HTML, thêm các thẻ tựa XML (XML - like tags) và nếu cần thiết, sử dụng thêm các ñoạn scriptlet. Bằng việc hỗ trợ các thư viện customized tag và mô hình phát triển dựa trên thành phần (component - based development), JSP không chỉ làm giảm công sức phải bỏ ra của những người phát triển mà nó còn cung cấp một cơ sở vững chắc cho các công cụ phát triển. Khi ñã ñược xây dựng, các trang JSP còn dễ bảo trì bởi sự tách biệt các xử lý nghiệp vụ (thường ñược ñặt trong các thư viện customized tag hay các thành phần JavaBeans) ra khỏi giao tiếp, hình thức của trang.

Tận dụng ñược những thành phần có thể dùng lại (reusable components): Hầu hết các trang JSP ñều dựa trên những thành phần xuyên nền (cross-platform components) có thể dùng lại (các thnh phần JavaBeans hay Enterprise JavaBeans) ñể thực hiện những xử lý nghiệp vụ phức tạp. Những nhà phát triển có thể trao ñổi hay chia sẻ những thành phần chuyên trách xử lý chung (common operations), do ñó sẽ làm giảm ñáng kể chi phí khi xây dựng ứng dụng. Cách tiếp cận dựa trên thành phần của JSP ñã làm tăng tốc ñộ phát triển ứng dụng và cho phép ñạt ñược kết quả tối ưu trên sản phẩm sau cùng.

Tách biệt nội dung với giao diện: Với công nghệ JSP, người phát triển sử dụng các thẻ HTML hay XML ñể thiết kế giao tiếp trang Web, các thẻ JSP hay các ñoạn scriptlet ñể phát sinh nội dung ñộng của trang (nội dung này phụ thuộc vào yêu cầu của user). Các xử lý phát sinh nội dung ñược ñóng gói trong các thẻ hay thành phần JavaBeans và ñược liên kết lại trong scriptlet, sau ñó ñược thực hiện ở server. Do những xử lý cốt lıi ñă ñược ñóng gói trong các

Trang 59 thẻ Beans, Web master và page designer có thể hiệu chỉnh và làm việc trên trang JSP mà không ảnh hưởng ñến xử lý nghiệp vụ của trang. Các ñiều trên giúp bảo vệ các ñoạn code sở hữu ñộc quyền và vẫn ñảm bảo cho mọi HTML - based web Browser có thể truy xuất ñến các trang JSP theo yêu cầu.

Sự phát triển mở rộng và hỗ trợ công nghiệp rộng lớn: JSP ñược phát triển dưới Java Community Process. ðiều này ñảm bảo nó có một sự hỗ trợ công nghiệp rộng lớn của hầu hết các Web server và Application server. Hơn nữa, công nghệ này giờ ñây ñă ñược phát triển mở trong dự án của Apache Software Foundation. Với ñiều này, công nghệ JSP mới nhất sẽ có ñược một ảnh hưởng tầm cỡ thế giới trong công nghệ thông tin. Sun Microsystems ñược uỷ nhiệm việc duy trì tính ña nền và mở cửa công nghệ này.

Sự ñộc lập nền: Công nghệ JSP ñưa ra khả năng sử dụng lại ứng dụng trên bất kỳ nền và server nào (ñây cũng chính là khẩu hiệu nổi tiếng của ngôn ngữ Java : "Write Once, Run Anywhere"). Nó cung cấp một phương pháp hướng thành phần, ñộc lập nền trong việc xây dựng ứng dụng Web. Hầu hết Web server v Application server ñă và ñang ñưa ra những sản phẩm hỗ trợ công nghệ JSP. Sự hỗ trợ ña nền, rộng lớn này cho phép Web developer viết code JSP một lần nhưng có thể triển khai khắp mọi nơi.

ðơn giản hóa quá trình phát triển với các thẻ: Web page developer

không phải lúc nào cũng là một lập trình viên thông thạo với ngôn ngữ Script. Công nghệ JSP ñóng gói nhiều chức năng cần thiết trong việc phát sinh nội dung ñộng ở dạng dễ sử dụng, các thẻ JSP - specific XML tag. Các thẻ JSP chuẩn có thể truy xuất và khởi tạo những thành phần JavaBeans, thiết lập hay nhận về giá trị của thuộc tính, download applet, và thực hiện những xử lý mà nếu viết code sẽ khó khăn và mất nhiều thời gian. Công nghệ JSP có thể mở rộng thông qua sự phát triển của các customized tag library. Hiện nay ñă có khá nhiều các thư viện loại này, từ ñó giúp người phát triển trang Web có thể làm việc với những công cụ quen thuộc khi thực hiện những xử lý phức tạp.

Trang 60

Mô hình ứng dụng dụng công nghệ JavaServerPages (JSP): Một trang JSP sẽ ñược xử lý bởi một JSP Engine (ñược cài ñặt trên Web Server hay Application Server hỗ trợ công nghệ JSP). JSP Engine nhận yêu cầu từ client ñến trang JSP và phát sinh những phản hồi từ trang JSP nhận về Client. Những trang JSP ñược biên dịch thành JavaServlets. JavaServlets là một sự mở rộng của Java chuẩn, do ñó các nhà phát triển có thể truy xuất ñến môi trường ứng dụng Java ñầy ñủ với tất cả các sức mạnh và sự linh ñộng vốn có của họ Java. Khi một trang JSP ñược gọi lần ñầu tin nếu chưa tồn tại sẽ ñược biên dịch thành một Servlet class và ñược lưu trữ trong bộ nhớ của Server. ðiều này cho phép sự hồi ñáp nhanh chóng ñối với những yêu cầu tiếp theo ñến trang này.

Trang JSP có thể ñược sử dụng trong nhiều kiến trúc khác nhau và cũng có thể kết hợp với các Protocol, Components khác nhau. Một vài mô hình có thể có :

Mô hình ứng dụng ñơn giản: Trong một ứng dụng ñơn giản Browser sẽ trực tiếp gọi trang JSP. ðến lượt trang này lại phát sinh một yêu cầu (có thể thông qua JDBC ñể nhận thông tin từ Database) nhằm tạo ra kết quả ñáp ứng yêu cầu của Browser. Sau ñó tạo ra trang HTML chuẩn và gửi trả trang này về cho Browser.

Mô hình này giúp việc lập trình ñơn giản và nhanh chóng. Dễ dàng phát sinh nội dung dựa trên yêu cầu và trạng thái của tài nguyên. Tuy nhiên, gặp khó khăn khi có nhiều Client truy xuất ñồng thời những tài nguyên khan hiếm của hệ thống, do mỗi Client phải thiết lập hay chia sẻ kết nối ñến ti nguyên.

Trang 61 VD : Nếu một trang JSP truy xuất một Database, nó có thể tạo ra nhiều kết nối ñến Database, dẫn ñến ảnh hưởng ñến hiệu suất của

Database.

•••• Mô hình ứng dụng kết hợp với Servlet: Client gửi yêu cầu trực tiếp ñến JavaServlet. JavaServlet phát sinh nội dung ñộng, ñóng gói kết quả có ñược vào trong Bean, tiếp theo gọi trang JSP. Trang JSP này sẽ truy xuất nội dung ñộng của Bean và gửi kết quả (dữ liệu HTML) ñến Browser. Phương pháp này tạo nên nhiều thành phần có thể dừng lại và chia sẻ giữa nhiều ứng dụng.

•••• Mô hình kết hợp với công nghệ Enterprise JavaBeans: Trang JSP

cũng có thể hoạt ñộng như một MiddleTier trong một kiến trúc Enterprise JavaBeans. Trong trường hợp này trang JSP tương tác với những tài nguyên Back-end dựa trên một thành phần Enterprise JavaBeans.

Chu trình sống của Servlet và JSP

Chu trình sống của servlet bắt ñầu ñược hệ thống gọi nạp vào bộ nhớ cho

ñến khi nó bị loại khỏi trình chủ Web server vì không còn cần ñến nữa. Quá trình sống của servlet trải qua các giai ñoạn sau:

•••• Nạp servlet Tùy theo ñiều kiện, một servlet có thể nạp vào bộ nhớ ở 3 thời ñiểm khác nhau: khi server khởi ñộng, khi ngừoi quả trị yêu cầu hoặc khi trình duyệt triệu gọi servlet từ máy khách. Hầu hết các Web server ñiều cho phép bạn chọn danh sách servlet sẽ ñược ưu tiên nạp lúc Web server khởi ñộng. Tuy tốn ít thời gian hơn nhưng sau ñó

Trang 62 servlet ñã trong trạng thái sẵn sàng có thể phục vụ trình khách bất kỳ lúc nào.

•••• Khởi tạo servlet Trình chủ Web server khởi tạo servlet bằng cách gọi ñến phương thức init () mà servlet cài ñặt. Phương thức này chỉ gọi một lần duy nhất. Chúng ta có thể lợi dụng cơ hội này ñể khởi tạo các biến toàn cục mà servlet sẽ sử dụng sau này.

•••• Thực thi servlet Khi trình duyệt hoặc các trang JSP triệu gọi servlet thông qua ñịa chỉ URL, trình chủ Web server sẽ chính thức gọi servlet thực thi thông qua các phương thức như doGet (), doPost () hoặc service (). Ví dụ khi chúng ta gọi trực tiếp servlet từ ñịa chỉ URL, phương thức doGet () của servlet sẽ ñược gọi. Nếu chúng ta gọi servlet thông qua thao tác post cua thẻ <form> thì phương thức doPost () sẽ ñược gọi. Sau khi các phương thức này ñược gọi thực thi xong, servlet vẫn giữ lại trong bộ nhớ ñể phục vụ cho các lần triệu gọi tiếp theo. ðây cũng chính là ưu ñiểm làm cho servlet thực thi nhanh các ứng dụng CGI.

•••• Dọn dẹp servlet Servlet không giữ lại trong bộ nhớ vĩnh viễn, sẽ ñến lúc cần loại servlet khỏi bộ nhớ. Ví dụ như khi nhà quản trị muốn dừng hệ thống, muốn Webserver khởi ñộng lại ñể giải phóng rác trong bộ nhớ tăng hiệu suất thực hiện…. Trước khi chấm dứt, Web server sẽ gọi ñến phương thức hủy destroy () của servlet. ðây là cơ hội ñể servlet thực hiện một số thao tác dọn dẹp cần thiết như lưu dữ liệu xuống ñĩa, ghi nhớ trạng thái của servlet ñể phục vụ cho lần khởi ñộng sau, ñóng kết nối với cơ sở dữ liệu…. Và mặc dù Java có thể tự ñộng thu gom rác trong bộ nhớ nhưng nếu chúng ta ñã cấp phát một khối lượng bộ nhớ lớn cho servlet trong quá trình làm việc, chúng ta nên thực hiện giải phóng chúng trong phương thức destroy ().

Chu trình sống của JSP: tương tự như chu trình sống của servlet, trang

Trang 63 JSP, gọi thực thi và loại trang khỏi bộ nhớ. Chu trình sống của JSP trải qua các giai ñoạn sau:

•••• Biên dịch trang JSP: Khi trình duyệt yêu cầu trang JSP, ví dụ triệu gọi trang JSP bằng URL http://localhost:8080/index.jsp Web server sẽ kiểm tra trang JSP ñã ñược biên dịch hay chưa. Nếu chưa biên dịch hoặc ñã biên dịch nhưng trang JSP mới vừa thay ñổi trong mã nguồn thì Web server sẽ thực hiện biên dịch trang JSP. Quá trình biên dịch JSP thực tế là chuyển trang JSP thành servlet. File biên dịch . class của trang sẽ ñược ñặt trong thư mục ñệm. Như chúng ta thấy, quá trình biên dịch trang chỉ diễn ra một lần. Nếu trang ñã biên dịch và sau ñó chúng ta không có thay ñổi gì trong trang nguồn thì quá trình biên dịch sẽ không xảy ra, do ñó tốc ñộ thực thi trang sẽ nhanh hơn. Sau khi trang ñã ñược biên dịch, mã trang sẽ ñược nạp vào bộ nhớ ñể thực thi.

•••• Nạp trang Kể từ giai ñoạn này, quá trình nạp trang tương tư như servlet. Chỉ có một khác biệt ñó là servlet chỉ ñược nạp một lần trong khi mã trang JSP mặc dù ñã biên dịch nhưng phải nạp lại nhiều lần mỗi khi Web server nhận ñược yêu cầu trang từ trình duyệt.

•••• Khởi tạo Khi nạp mã trang thành công, Web server sẽ gọi ñến phương thức khởi tạo trang. Và mặc dù, JSP ñược biên dịch ra servlet như phương thức khởi tạo cho trang JSP lại mang tên jspInit () chứ không phải là init () như servlet.

•••• Thực thi Sau quá trình khởi tạo, Web server sẽ gọi ñến phương thức _jspService (). Phương thức _jspService sẽ chuyển cho chúng ta hai lớp ñối tượng HttpServletRequest và HttpServletResponse ñể ñọc và ghi kết xuất trả về trình khách.

•••• Dọn dẹp Khi trang JSP ñã thực thi xong, trình chủ Web server sẽ gọi phương thức jspDestroy () ñể giải phóng mã trang khỏi bộ nhớ. Tương tự như trong servlet, chúng ta có thể cài ñặt phương thức jspDestroy ()

Trang 64 thực hiện chức năng giảp phóng vùng nhớ hoặc ñóng kết nối trả tài nguyên về cho hệ thống.

3.2.2. Log4j

Giới thiệu

Chèn các câu log trong ứng dụng là kĩ thuật debug cấp thấp rất ñược ưa chuộng, nguyên do không phải bất kì hệ thống nào ta cũng có thể dễ dàng debug ñược. Ví dụ như các ứng dụng multithread, các ứng dụng phân tán. Sử dụng log giúp ta dễ dàng theo dõi ứng dụng, dễ dàng bắt lỗi khi hệ thống gặp trục trặc.

Log4j là một thư viện Java cho phép xuất ra các câu lệnh log cho các mục ñích khác nhau.

Log4j chỉ có 3 khái niệm cơ bản là : Logger ,Appender và Layout . Logger bắn messages ra appender theo một layout nào ñó ( hay gọi là kiểu dáng ).

Logger tương tự như một thành phần ẩn của ứng dụng bắt những yêu cầu bắn messages mà ñưa messages ra. Mỗi một lớp trong ứng dụng có thể có một logger hoặc sử dụng chung logger. Log4j cung cấp một root logger mà tất cả các logger khác trong chương trình của bạn sẽ kế thừa từ root logger này.

Logger cần biết nơi nào nó sẽ gứi message ñến ñó là lý do mà appender góp mặt. Log4j hỗ trợ nhiều loại appender tùy thuộc vào mục ñích : FileAppender - viết ra file, ConsoleAppender - viết ra màn hình, JDBCAppender viết vào CSDL,.... Nhưng File và Console là hai appender thường dùng nhiều nhất.

Logger và appender kết hợp lại ñưa message ra nơi cần thiết nhưng ñịnh

Một phần của tài liệu Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR (Trang 56 - 67)

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

(94 trang)