Bài 5 JSP (Java Server Pages)

JSP (Java Server Pages) cho phép ta chèn các đoạn mã Java vào trong các tập tin văn bản dạng HTML hay XML. Sauđó, các tập tin này sẽ được chuyển đổi thành Java Servlets để thực hiện việc tạo các trang web động.

pdf71 trang | Chia sẻ: lylyngoc | Lượt xem: 1607 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Bài 5 JSP (Java Server Pages), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI 5 JSP (Java Server Pages) LẬP TRÌNH ỨNG DỤNG MẠNG I 5 GIẢNG VIÊN: VÕ TẤN DŨNG G V : V õ T ấ n D ũ n g 2PHẦN 1 GIỚI THIỆU JSP G V : V õ T ấ n D ũ n g 3• JSP (Java Server Pages) cho phép ta chèn các đoạn mã Java vào trong các tập tin văn bản dạng HTML hay XML. Sau đó, các tập tin này sẽ được chuyển đổi thành Java Servlets để thực hiện việc tạo các trang web động. • Công nghệ Java Server Pages hiện đang là một phương pháp tạo web động thu hút sự chú ý của các nhà phát triển ứng dụng web. JSP cung cấp phương tiện đơn giản để tạo ra những trang web động. • Công nghệ JSP là một thành phần trong họ Java, sử dụng ngôn ngữ Java như là ngôn ngữ kịch bản (script). Hiện nay JSP cùng với các thành phần JavaBean, Enterprise JavaBean tạo nên sức mạnh cho họ Java trong việc xây dựng các ứng dụng web. JSP LÀ GÌ? G V : V õ T ấ n D ũ n g 4• Trang JSP đơn giản hiện thị ngày tháng hiện hành A simple date The time on the server is • Server xử lý thành phần của JSP để chuyển đổi thành dữ liệu tĩnh trên trang HTML để trình bày trên Web browser JSP LÀ GÌ? G V : V õ T ấ n D ũ n g 5• Khi người sử dụng gọi trang JSP lần đầu tiên, Web Server triệu gọi trình biên dịch dịch trang JSP (trong trường hợp này là JDK) thành tập tin Java, kế đến tập tin java (Java Servlet) này sẽ biên dịch ra class. Chạy class để sinh ra các trang HTML. CƠ CHẾ LÀM VIỆC CỦA JSP G V : V õ T ấ n D ũ n g 6Ví dụ: một trang JSP Một trang JSP: <!-- File jsp001.jsp 02/13/2010 --> My First JSP Page Hello, JSP World! Isn't this fun Kết qua sinh ra tại Web Browser: My First JSP Page Hello, JSP World! 0 1 2 3 4 5 6 7 8 9 10 Isn't this fun G V : V õ T ấ n D ũ n g 7PHẦN 2 COMMENTS DECLARATIONS EXPRESSIONS G V : V õ T ấ n D ũ n g 8• Phần này giới thiệu về các cú pháp (syntax) sau đây: • Comments (các ghi chú) • Declarations (các khai báo) • Expressions (các biểu thức) COMMENTS,DECLARATIONS,EXPRESSIONS G V : V õ T ấ n D ũ n g 9• Comments: là những chú thích, ghi chú được chèn vào để giải thích cho người đọc code HTML hoặc JSP dễ hiểu. Servlet không biên dịch thành phần này. • Trang JSP chứa hai loại comments là: • Hidden comment (hay còn gọi là JSP comment). • Output comment (hay còn gọi là HTML comment). • Output comments được xuất vào HTML file để gửi đến client. • Hidden comment chỉ hiển thị trong source code của trang JSP mà không xuất vào HTML file để gửi đến client. Hidden comment là ẩn đối với HTML file. COMMENTS (các ghi chú) G V : V õ T ấ n D ũ n g 10 • Cú pháp của Output Comments: ] --> • Cú pháp này sinh ra một ghi chú được thấy trong HTML file. HTML file này được sinh ra bởi JSP file. • Trong cú pháp này ta thấy Output comment có thể chứa hay không chứa một biểu thức (expression) của JSP. Những gì chứa trong dấu ngoặc vuông có nghĩa là tùy chọn. Biểu thức JSP (expression) sẽ được tìm hiểu ở các slide sau. OUTPUT COMMENTS G V : V õ T ấ n D ũ n g 11 Ví dụ: đây là một code mẫu chứa trong tập tin jsp0002.jsp <!-- File jsp002.jsp 02/13/2010 Mô tả các ghi chú nhằm xuất ra file HTML. Mô tả các ghi chú ẩn - hidden comments. Cũng mô tả các biểu thức - expressions. cuối ghi chú --> <!-- Date and time is --> OUTPUT COMMENTS G V : V õ T ấ n D ũ n g Trong ví dụ này, xuất liệu Date và Time được sinh ra bởi biểu thức nhúng trong comment nhưng Date và Time này cũng không xuất hiện trong Web Browser (dù Date và Time này có xuất hiện trong HTML file). 12 Đây là file HTML được sinh ra từ file JSP của slide trước. Nhưng file HTML này không xuất gì ra Web Browser cả. <!-- File jsp002.jsp 02/13/2010 Mô tả các ghi chú nhằm xuất ra file HTML. Mô tả các ghi chú ẩn - hidden comments. Cũng mô tả các biểu thức - expressions. cuối ghi chú --> OUTPUT COMMENTS G V : V õ T ấ n D ũ n g Với cách chèn biểu thức vào ghi chú trong JSP cho phép ta thực hiện ghi chú động (dynamic comments) trên HTML file. 13 • Hidden comment được dùng để ghi chú trong các file JSP nhưng không xuất ra các file HTML khi gửi xuống client. Cú pháp: • JSP engine bỏ qua, không xử lý bất kỳ code nào nằm trong hidden comment. Do đó hidden comment cũng không xuất hiện ở Web Browser phía client. • Ta thấy có bốn ký tự --%> nằm trong cú pháp của hidden comment. Cho nên nếu muốn chúng xuất hiện là chuỗi trong hidden comment thì ta phải viết là --%\> (có dấu xuyệt) HIDDEN COMMENTS G V : V õ T ấ n D ũ n g 14 • Declaration được dùng để khai báo các biến (variable) các phương thức (method) được dùng sau đó trong các JSP source file. Cú pháp declaration (chú ý dấu chấm than): Ví dụ: Tầm vực (Scope): • Một declaration có tầm vực trong một trang (page scope). Có nghĩa là một khai báo (declaration) biến hay hàm trong một trang sẽ được sử dụng hợp lệ bởi các scriptlets, expressions và các declarations khác trong cùng một JSP source file. DECLARATIONS (các khai báo) G V : V õ T ấ n D ũ n g 15 Theo Sun, có một số nguyên tắc sử dụng cho các JSP declarations: • Một declaration phải chứa ít nhất một phát biểu khai báo hoàn chỉnh. • Có thể khai báo nhiều biến (variables) hoặc phương thức (methods) trong một thẻ (tag) declaration, nhưng phải cách nhau bởi dấu chấm phẩy. • Các declaration phải hợp lệ trong các ngôn ngữ kịch bản (scripting language) được dùng trong JSP file. Các declaration phải phù hợp với đặc tả của ngôn ngữ Java. • Một đặc tả phải được kết thúc bằng một dấu chấm phẩy. Nguyên tắc này giống với nguyên tắc dành cho Scriptlet, nhưng khác với nguyên tắc dành cho một Expression. • Ta phải khai báo một biến hoặc là một phương thức trước khi sử dụng chúng trong file JSP. • Cũng có thể dùng một biến hoặc một phương thức được khai báo trong packages imported bởi Page Directive, vì thế không cần phải khai báo lại chúng lần nữa trong một declaration. DECLARATIONS (các khai báo) G V : V õ T ấ n D ũ n g 16 • Cú pháp cho một tag (thẻ) để khai báo một biểu thức như sau (chú ý dấu bằng theo sau dấu %): • Biểu thức chứa trong thẻ sẽ được tính toán, sau đó kết quả được chuyển sang chuỗi (String) để chèn vào file HTML với vị trí tương ứng của nó trong JSP file. EXPRESSIONS (các biểu thức) G V : V õ T ấ n D ũ n g 17 <!-- File jsp003.jsp 02/13/2010 Illustrates declarations and expressions. end comment --> Some JSP expression follow a = b = a/b = The date is Ví dụ G V : V õ T ấ n D ũ n g Some JSP expression follow a = 100 b = 2 a/b = 50 The date is Sat Feb 13 12:25:16 ICT 2010 18 • Chúng ta vừa mới khảo sát: • Output comments: ] --> • Hidden comments: • Declarations: • Expressions: Tóm tắt G V : V õ T ấ n D ũ n g 19 PHẦN 3 SCRIPTLET (mẩu kịch bản) G V : V õ T ấ n D ũ n g 20 • Thẻ (tag) scriptlet dùng để chứ một đoạn mã Java rồi được nhúng (chèn) vào trong mã HTML. • Một scriptlet có thể chứa số lượng bất kỳ các phát biểu (statements) các khai báo biến (variable), khai báo phương thức (method) hoặc biểu thức (expressions). • Cú pháp của scriptlet như sau: CÚ PHÁP SCRIPTLET G V : V õ T ấ n D ũ n g 21 Theo Sun, ta có thể dùng scriptlets cho các việc sau đây: • Dùng khai báo biến, khai báo phương thức sẽ được dùng trong file JSP. • Viết các biểu thức hợp lệ (tương tự như phần khai báo biểu thức expression của phần trước). • Sử dụng bất kỳ đối tượng tiềm ẩn (implicit) hoặc bất kỳ đối tượng nào đã được khai báo bằng thẻ (thẻ này sẽ được trình bày ở các slide sau). • Để viết bất kỳ phát biểu hợp lệ nào (statement). Các phát biểu này phải phù hợp với quy định cú pháp, văn phạm của ngôn ngữ Java. Dùng Scriptlet để làm gì? G V : V õ T ấ n D ũ n g 22 • Ví dụ: • Ví dụ: • Ví dụ: • Với Scriptlet, JSP cho phép ta nhúng và thực thi các Servlet, JavaBean, Java Code. Ví dụ Scriptlet G V : V õ T ấ n D ũ n g 23 a = b = c = The date is Ví dụ Scriptlet G V : V õ T ấ n D ũ n g Kết quả tại Web Browser phía Client: a = 100 b = 2 c = 50 The date is Sat Feb 13 14:17:45 ICT 2010 0 1 2 3 4 5 6 7 8 9 10 24 • Chúng ta đã học được các thẻ sau: Output comments: <!-- comment [ ] --> Hidden comments: Declarations: Expressions: Scriptlets: Tóm tắt G V : V õ T ấ n D ũ n g 25 PHẦN 4 DIRECTIVE (chỉ hướng) G V : V õ T ấ n D ũ n g 26 Phần này trình bày hai loại Directive: • Include Directive. • Page Directive. Cú pháp: Nếu có nhiều thuộc tính thì dùng cú pháp sau: <%@ directive attribute1="value1" attribute2="value2" ... attributeN="valueN" %> DIRECTIVE G V : V õ T ấ n D ũ n g 27 • Include directive được dùng để chèn một file vào trong một trang JSP khi trang JSP được biên dịch. • File được chèn vào trang JSP được gọi là included file. Included file có thể là: • JSP file. • HTML file. • Text file. • File được viết code bằng ngôn ngữ Java. • Khi chèn file, chú ý cẩn thận để included file không có chứa các thẻ như , , , hoặc . Bởi vì cả nội dung của included file được thêm vào JSP file, nếu có các thẻ đó trong included file sẽ gây đụng độ với các thẻ tương tự trong JSP file. • Chú ý: một số trình duyệt web chấp nhận đụng độ, một số trình duyệt không chấp nhận đụng độ. INCLUDE DIRECTIVE G V : V õ T ấ n D ũ n g 28 • Ví dụ: INCLUDE DIRECTIVE G V : V õ T ấ n D ũ n g 29 <!-- File jsp005.jsp 02/15/2010 Illustrates the JSP Include Directive--> The date and time produced by an include file: Include an HTML file here: Ví dụ: INCLUDE DIRECTIVE (jsp005.jsp) G V : V õ T ấ n D ũ n g 30 <!-- File jsp005a.jsp 02/15/2010 Illustrates the Include Directive See jsp005.jsp --> <%-- Produce a String containing the current date and time --%> Ví dụ: INCLUDE DIRECTIVE (jsp005a.jsp) G V : V õ T ấ n D ũ n g 31 <!-- File jsp005a.html 02/15/2010 Illustrates the Include Directive See jsp005.jsp --> An included HTML file Ví dụ: INCLUDE DIRECTIVE (jsp005a.html) G V : V õ T ấ n D ũ n g 32 The date and time produced by an include file: Mon Feb 15 14:47:47 ICT 2010 Include an HTML file here: An included HTML file Ví dụ: INCLUDE DIRECTIVE (kết quả) G V : V õ T ấ n D ũ n g 33 Sự khác nhau giữa static include và dynamic include: • Cú pháp static include: • Ví dụ: • Cú pháp dynamic include: • Ví dụ: is • Static Include: nội dung văn bản của included file sẽ được chèn vào JSP file. Việc này xảy ra ở giai đoạn translation. Nó giống như cắt dán văn bản. • Dynamic Include: included file sẽ được dịch riêng với JSP file. Kết quả (response) sau khi dịch của included file sẽ được chèn vào JSP file. Việc này xảy ra ở giai đoạn run-time. • Static include không thể chấp nhận truyền đối số, còn dynamic include thì chấp nhận truyền đối số. Static includes chạy nhanh hơn dynamic includes INCLUDE DIRECTIVE G V : V õ T ấ n D ũ n g 34 • Page directive được dùng để định nghĩa các thuộc tính áp dụng cho cả một trang JSP và bất cứ static file nào được chèn vào nó bằng Include Directive hoặc . Trang JSP và các static file được chèn vào nó được gọi là một translation unit. • Cú pháp đơn giản: • Ta có thể sử dụng page directive nhiều lần để thiết lập giá trị cho các thuộc tính trong một JSP page (translation unit). Nhưng nếu dùng cho thuộc tính import thì chỉ được sử dụng không quá một lần. • Ta có thể đặt page directive bất cứ chỗ nào trong translation unit và nó có tầm vực trên cả một translation unit. Để khai báo rõ ràng và dễ hiểu thì nên đặt các page directive ở đầu trang JSP chính. PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 35 Cú pháp đầy đủ của Page Directive: <%@ page [ language="java" ] [ extends="package.class" ] [ import= "{ package.class | package.* }, ..." ] [ session="true|false" ] [ buffer="none|8kb|sizekb" ] [ autoFlush="true|false" ] [ isThreadSafe="true|false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true|false" ] %> PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 36 Ý nghĩa của các thuộc tính của Page Directive: • language: Chỉ định ngôn ngữ lập trình sẽ được sử dụng (ngôn ngữ kịch bản) trong trang văn bản JSP. Hiện nay trang JSP chỉ sử dụng một ngôn ngữ duy nhất đó là Java. • extends: chỉ định địa chỉ lớp cha của lớp mà trang jsp cần sử dụng. • import: đây là thuộc tính rất quan trọng, thường sử dụng cho bất kỳ trang JSP nào cần đến các lớp của Java cũng như của người sử dụng. Với thuộc tính này ta có thể chỉ ra lớp cụ thể hoặc tập hợp các lớp cần dung. • session: nếu có giá trị là true, trang JSP của ta có thể sử dụng “phiên giao dịch” để trao đổi và lưu giữ thông tin giữa các trang JSP với nhau. Ngược lại, trang JSP không thể dung các đối tượng session cho bất cứ công việc gì. Giá trị mặc định của thuộc tính này là true. • buffer: chỉ định kích thước vùng đệm cần dung cho trang JSP (tính theo kilobytes). Giá trị mặc định là 8KB. Thuộc tính này dung với thuộc tính autoFlush. (flush:làm sạch). PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 37 Ý nghĩa của các thuộc tính của Page Directive (tiếp theo): • autoFlush: giá trị mặc định là true. Nếu mang giá trị false, một exception sẽ phát sinh để báo lỗi khi bộ đệm tràn. • isThreadSafe: cho phép tính chất đa luồng hay không. Nếu mang giá trị true, động cơ JSP được phép gửi nhiều yêu cầu đến trang JSP cùng một lúc (mang tính chất đồng thời). Ngược lại, với giá trị false, chúng ta chỉ có thể nhận tại mỗi thời điểm một yêu cầu. Thuộc tính này có giá trị mặc định là true. • info: chỉ định những thông tin về trang JSP có thể truy cập thông qua hành vi Servlet.getServletInfo(). • errorPage và isErrorPage: phục vụ cho dò tìm lỗi khi phiên dịch trang JSP, khi isError là true thì các exception sẽ chuyển đến trang chỉ định trong errorPage. • contentType: dung để mã hóa trang văn bản JSP trước khi gửi tới trình duyệt. Giá trị mặc địnhcho mimeType là text/html và characterSet mặc định là IS0-8859-1. PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 38 Một số ví dụ về Page Directive: • • • • • PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 39 Ví dụ: The date and time produced by a Date object using the import page directive to provide the path to the Date class: The default String representation of a Button object produced by using the wildcard version of the import page directive to provide the path to the Button class: Information about the page provided by the info attribute of a page dirctive and accessed using the getServletInfo() method of the Servlet class. PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 40 • Kết quả: The date and time produced by a Date object using the import page directive to provide the path to the Date class: Tue Feb 16 17:02:57 ICT 2010 The default String representation of a Button object produced by using the wildcard version of the import page directive to provide the path to the Button class: java.awt.Button[button0,0,0,0x0,invalid,label=The Label] Information about the page provided by the info attribute of a page dirctive and accessed using the getServletInfo() method of the Servlet class. Info about the page PAGE DIRECTIVE G V : V õ T ấ n D ũ n g 41 PHẦN 5 ACTIONS G V : V õ T ấ n D ũ n g 42 • Các JSP actions được sử dụng để điều khiển các hành vi của servlet engine. Ta có thể dùng actions để tự động chèn một file, sử dụng một JavaBean trong JSP, chuyển tiếp từ một trang JSP đến một trang web khác hoặc sinh ra một HTML file. • Các actions được trình bày ở đây gồm có: • jsp:include • jsp:useBean • jsp:setProperty • jsp:getProperty • jsp:forward • jsp:plugin ACTIONS G V : V õ T ấ n D ũ n g 43 • Action này được dùng để chèn một tập tin khác vào trong tập tin JSP. Action này chèn file bên ngoài vào khi file đó được yêu cầu trong file JSP chính. Khi thực hiện các thao tác trong tập tin được chèn vào rồi thì JSP Engine mới thực hiện các công việc còn lại của trang JSP chính. • Cú pháp: <jsp:include page=“{relative URL | <%= expression %>}" flush="true" /> • Trong đó: page=“{relative URL | }" chỉ định vị trí tập tin cần gắn vào hoặc biểu thức thuộc kiểu String có giá trị là địa chỉ URL tương đối. • Ví dụ: • • • jsp:include Action G V : V õ T ấ n D ũ n g 44 • Được dùng để tải những thành phần thêm vào (plugin) cho Web Browser khi cần thi hành một applet hoặc một Bean nào đó. Action này cũng dùng thay cho các thẻ và thẻ có sẵn trong ngôn ngữ HTML. • Ví dụ: <jsp:plugin type=applet code="Molecule.class" codebase="/html"> <jsp:param name="molecule" value="molecules/benzene.mol" /> Unable to load applet jsp:plugin Action G V : V õ T ấ n D ũ n g 45 • Cú pháp: <jsp:plugin type="bean | applet" code="classFileName" codebase="classFileDirectoryName" [ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align="bottom | top | middle | left | right" ] [ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ] [ jreversion="JREVersionNumber | 1.1" ] [ nspluginurl="URLToPlugin" ] [ iepluginurl="URLToPlugin" ] > [ [ <jsp:param name="parameterName" value="{parameterValue | }" /> ]+ ] [ text message for user ] jsp:plugin Action G V : V õ T ấ n D ũ n g 46 Trong đó: • type="bean | applet“: cho biết loại đối tượng mà plug-in sẽ thực thi. Ta phải xác định hoặc là Bean hoặc là Applet. Không có giá trị default cho thuộc tính này. • code="classFileName“: tên tập tin class cần thi hành. • codebase="classFileDirectoryName": đường dẫn đến thư mục chứa tập tin Java class. Nếu không cung cấp giá trị cho thuộc tính này thì đường dẫn chứa JSP file đang gọi thẻ này sẽ được sử dụng. • name="instanceName“: tên đối tượng Bean hoặc Applet (instance of the Bean or applet). • archive="URIToArchive, ...“: danh sách các đường dẫn đến các tập tin lưu trữ (archive files) sẽ được nạp trước để phục vụ cho lớp chính. Các đường dẫn cách nhau bởi dấu phẩy. (còn ở slide tiếp theo) jsp:plugin Action G V : V õ T ấ n D ũ n g 47 Trong đó: • align="bottom | top | middle | left | right“: Cho biết vị trí xuất hiện của image, object, hoặc applet là ở dưới, ở trên, ở giữa, bên trái, bên phải tùy thuộc vào vị trí của thẻ xuất hiện trong file JSP. • height="displayPixels" width="displayPixels“: chiều cao và chiều rộng của vùng chứa của object hoặc applet trong trang web. • hspace="leftRightPixels" vspace="topBottomPixels“: khoảng cách theo các chiều ngang (h-horizon) và chiều đứng (v-vertical) của vùng chứa của object hoặc applet. • jreversion="JREVersionNumber | 1.1“: version của Java Runtime Environment (JRE) mà applet hoặc Bean yêu cầu. Giá trị ngầm định là 1.1. • nspluginurl="URLToPlugin“ hoặc iepluginurl="URLToPlugin“: địa chỉ URL, nơi để tải xuống JRE plug-in cho trình duyệt Netscape Navigator hoặc Internet Explorer. (còn ở slide tiếp theo) jsp:plugin Action G V : V õ T ấ n D ũ n g 48 • [ <jsp:param name="parameterName" value="{parameterValue | }" /> ]+: các tham số và các giá trị cần để truyền cho applet hoặc bean. Để truyền nhiều tham số thì ta có thể dùng nhiều thẻ trong thẻ . • Giá trị của thuộc tính name là một chuỗi có phân biệt hoa thường để cho biết tên của thuộc tính của Bean hoặc applet sẽ nhận giá trị trong thuộc tính value. Thuộc tính value là