Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 93 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
93
Dung lượng
1,91 MB
Nội dung
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải Phần I: Phần I: JSP TECHNOLOGY JSP TECHNOLOGY Chương I: CĂN BẢN VỀ JSP JavaServer Pages (JSP) là một kỹ thuật server-side do đó chúng ta không thể thực hiện bất kỳ hành động nào ở client. JSP cho phép chúng ta tách thành phần động của trang ra khỏi thành phần tónh HTML. Rất đơn giản, chúng ta chỉ cần viết một tài liệu HTML bình thường rồi sau đó bao quanh mã của thành phần động trong các tag đặc biệt, hầu hết các tag bắt đầu với <% và kết thúc với %>. Ví dụ, đây là một phần của trang JSP, có kết quả trả về là “Thanks for reading jsp book.” với URL là http://www.jsp.com/thank.jsp? title= jsp Thanks for reading <i><%=request.getParameter(“title”)%><i>book. Kỹ thuật JSP là một thành phần trong đại gia đình Java; nó sử dùng ngôn ngữ kòch bản dựa vào ngôn ngữ lập trình Java, và các trang JSP được biên dòch thành servlets. Từ đó chúng ta cũng nhận biết được, JSP thì không phụ thuộc bất kỳ nền (platform) nào. Nó đáp ứng được khuynh hướng của Sun MicroSystem là “write one, run anywhere”. Các trang JSP có thể gọi các thành phần JavaBeans, Enterprise JavaBeans (EJB) hoặc custom tags để thực hiện các xử lý trên server. Và như thế, kỹ thuật JSP là thành phần chủ chốt trong kiến trúc khả chuyển của Java cho những ứng dụng dựa vào Web. Như đã biết, JSPs sẽ biên dòch thành servlets nhưng JSP không thể thay thế servlet vì các lý do sau: - Một số tác vụ được giải quyết rất tốt bằng servlet. Ví dụ, các ứng dụng xuất ra dữ liệu nhò phân hoặc chỉ xác đònh nơi gởi trở lại cho người dùng (bằng cách dùng response.sendRedirect) được dùng servlet thì tốt nhất. - Một số tác vụ khác lại được giải quyết rất tốt bằng JSP như các tình huống mà cấu trúc nền tảng của trang HTML là cố đònh nhưng các giá trò trong nó lại thay đổi. - Còn các tác vụ còn lại cần sự kết hợp cả servlet và JSP. Ví dụ, trong yêu cầu gốc được trả lời bằng một servlet mà thực hiện mọi công việc, lưu trữ các kết quả trong các Beans và điều phối yêu cầu này đến một trong những trang JSP có thể hiển thò nó. Svth: Đinh Lê Giang Trang 1 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải Cả ba đònh hướng này đều có chổ đứng của nó. Chẳng có đònh hướng nào hổ trợ đầy đủ cho mọi ứng dụng . Trước khi đi vào chi tiết công nghệ JSP, chúng tôi có một vài so sánh các công nghệ được sử dụng trong ứng dụng với các công nghệ khác. I.Một số so sánh các công nghệ được sử dụng với công nghệ khác? 1. MySQL Server. MySQL là hệ quản trò cơ sở dữ liệu quan hệ. Cơ sở dữ liệu là một tập dữ liệu có cấu trúc và được lưu trữ trong các bảng riêng biệt, mỗi bảng được lưu trong ba files với tên cơ sở dữ liệu là tên thư mục chứa các files đó. SQL được viết tắt từ Structured Query Language, là ngôn ngữ chuẩn phổ biến nhất để truy cập cơ sở dữ liệu. Sau đây là một số ưu và nhược điểm của MySQL với các hệ quản trò cơ sở dữ liệu khác: a) Ưu diểm. - Chạy được trên rất nhiều nền khác nhau như Unix, Windows, MacOS, …. - MySQL là hệ quản trò nhanh, nhỏ gọn. Các script files có thể chạy trên một số hệ quản trò khác như MS SQL Server, Oracle. - Theo một số web site thống kê, việc thực hiện các lệnh insert, update, delete nhanh nhất trong các hệ quản trò. - Miễn phí và mã nguồn mở (open source code). b) Khuyết điểm. - Chưa hổ trợ một số chuẩn ANSI SQL92 như không cho các câu select lồng nhau, select into table, khoá ngoại, triggers, stored procedures,… - Không có môi trường đồ hoạ. 2. So sánh JSP với các công nghệ khác. a) JSP với ASP. ASP là công nghệ tương đương từ Microsoft. JSP có ba lợi thế so với ASP. Svth: Đinh Lê Giang Trang 2 SGML HTML XML CDF SMIL CML MML Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải - Phần động được viết bằng Java, chứ không phải bằng các ngôn ngữ script như VBScript, JavaScript. Vì thế nó mạnh mẽ hơn tốt hơn đối với các ứng dụng phức tạp cần các thành phần sử dụng lại. - JSP chạy được trên nhiều hệ điều hành và web servers khác nhau ngay cả với IIS của Microsoft (cần có plugins từ Webphere, JRun, ) - Hổ trợ sự mở rộng tag với custom tag. b) JSP với PHP. Lợi điểm của JSP với PHP cũng như với ASP. JSP được viết bằng Java mà chúng ta đã biết với các API mở rộng cho mạng, truy cập cơ sở dữ liệu, các đối tượng phân tán, … trong khi với PHP đòi hỏi chúng ta phải học cả một ngôn ngữ mới. 3. Tầm quan trọng của XML cùng với XSLT. a) XML. XML là tập con của SGML, nó kết hợp tính linh động và sức mạnh của SGML cùng với một số tính năng hữu ích của HTML. Vì XML là tập con của SGML nên nó cũng tương thích với các hệ thống dựa vào SGML đã có. XML là lực đẩy cho các nghi thức trên internet và các phần mềm để dễ dàng xử lý và truyền dữ liệu. Ở trên đã nói XML là tập con của SGML và HTML là một sự cài đặt của SGML, mô hình sau đây diễn tả mối quan hệ giữa các ngôn ngữ và các siêu ngôn ngữ: Metalanguages Languages Implementation subset Implementation Svth: Đinh Lê Giang Trang 3 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải CDF : Channel Difinition Format – cho phép các tác giả của các Web sites cho phép các người đăng ký biết khi nào Web site này thay đổi, CDF đã được giới thiệu trong IE4 vì vậy nó chỉ làm việc với IE của Microsoft. SMIL : Synchronized Multimedia Integration Language – được sử dụng để đồng bộ hóa các dòng dữ liệu đa truyền thông được truyền qua internet. CML : Chemical Markup Language – mô tả các công thức hóa học. MML: Mathematical Markup language- mô tả các phương trình, biểu thức toán học. Tính tự mô tả dữ liệu của XML : các tags mô tả các vấn đề, các đối tượng gần gủi với thế giới thực. Chúng ta sẽ thấy rõ hơn với hai ví dụ sau, đây là ví dụ minh họa nên nó còn thiếu nhiều thuộc tính trong thế giới thực : - XML có mối quan hệ chặt chẽ với JSP, đặt tả JSP hổ trợ cú pháp XML, chúng ta có thể trộn lẫn mã chúng với nhau dễ dàng như JSP với HTML như thế chúng ta có thể dùng JSP tự động phát sinh trang XML. - Hiện nay có rất nhiều sản phẩm quản trò cơ sở dữ liệu mà mỗi sản phẩm đều có các đặc tính riêng nó, do đó khi các cơ sở dữ liệu khác nhau cần chuyển đổi dữ liệu với nhau lại không tương thích. Vì vậy người làm công việc này cần phải biết nhiều sản phẩm quản trò cơ sở dữ liệu khác nhau. Do đó Svth: Đinh Lê Giang Trang 4 Ví dụ với XML tags <student> <name> <first>Giang</first> <middle>Le</middle> <last>Dinh</last> </name> <numberid>0750</numberid> <age>22</age> </student> Ví dụ với HTML tags <table> <tr> <td>Giang</td> <td>Le</td> <td>Dinh</td> </tr> <tr> <td>Number id : </td> <td>0750</td> </tr> <tr> <td>Age :</td> <td>22</td> </tr> </table> Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải XML là một đònh dạng chuẩn mà các hệ quản trò cần hổ trợ. Hiện nay có nhiều hệ quản trò lớn hổ trợ XML như MS SQL Server, Oracle, … b) XSLT. Extensible Stylesheet Language Transformation (XSLT) là một ngôn ngữ được tách ra từ ngôn ngữ XSL, “XSLT là một ngôn ngữ dùng để chuyển đổi các XML document thành các XML document khác”. Nó được viết bằng XML, điều này có nghóa rằng sự chuyển đổi trong XSLT được trình bày như một well-formed XML document. XSLT đóng vai trò quan trọng trong hướng phát triển “phát sinh ngôn ngữ markup hướng người dùng”. II. JSP scripting elements. Các scripting elements trong JSP cho phép chúng ta chèn mã vào servlet mà sẽ được phát sinh từ trang JSP. Có ba dạng sau: - Biểu thức có dạng <%= expressions %>, được đònh giá trò và chèn vào luồng xuất của servlet. - Scriptlet có dạng <% code %>, được chèn vào phương thức _jspService của servlet (được gọi là service). - Khai báo có dạng <%! code %>, được chèn vào thân của lớp servlet, như là các field của lớp thông thường. Template text Trong nhiều trường hợp, phần lớn các trang JSP chỉ bao gồm HTML tónh, được biết như là template text. Có hai ngoại lệ phụ cho quy tắc “template text được chuyển thẳng sang HTML tónh”. Đầu tiên, nếu chúng ta muốn có <% trong luồng xuất thì chúng ta cần phải đặt <\% trong template text. Thứ hai, nếu chúng ta muốn có chú thích trong JSP mà không có trong tài liệu kết quả, dùng: <% JSP comments %> Chú thích HTML có dạng: <! HTML comments > thì được chuyển qua tài liệu HTML thông thường. Cú pháp XML Trong JSP có rất nhiều element có cú pháp XML như jsp:useBean, jsp:include, jsp:setProperty, Tuy nhiên scripting elements lại có hai dạng cú pháp sau: Svth: Đinh Lê Giang Trang 5 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải JSP Syntax XML Syntax <% = Expressions %> <jsp:expression> Java code </jsp:expression> <% Scriptlets %> <jsp:scriptlet> Java code </jsp:scriptlet> <%! Declarations %> <jsp:declaration> Java code </jsp:declaration> 1. Các biến được đònh nghóa sẵn trong JSP Để đơn giản hoá mã trong các biểu thức hay scriptlets trong JSP, người ta cung cấp cho chúng ta chín đối tượng đã được đònh nghóa trước, có người còn gọi là các đối tượng ngầm đònh. Do các khai báo trong JSP nằm ngoài phương thức _jspService (được gọi bởi service) nên các đối tượng này không cho phép các khai báo truy cập vào. request Biến này có kiểu là javax.servlet.http.HttpServletRequest, có phạm vi trong một yêu cầu (request). Nó cho phép chúng ta truy cập vào các tham số của request như loại request (GET, POST, …) và các incoming HTTP header (cookies). response Có kiểu là javax.servlet.http.HttpServletResponse, có phạm vi toàn trang (page). Chú ý rằng vì luồng xuất thì thường làm vật đệm cho nên việc gán mã tình trạng của HTTP và response header thì hợp lý trong JSP, mặc dù điều này thì không được phép trong servlet một khi đã có luồng xuất nào được gởi đến client. out Có kiểu javax.servlet.jsp.JspWriter và phạm vi trong một trang (page). Dùng để gởi các thông xuất đến client. Đối tượng out được dùng thường xuyên trong scriptlets, các biểu thức tự động được đưa vào luồng xuất nên hiếm khi cần tham chiếu đến đối tượng này. Svth: Đinh Lê Giang Trang 6 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải session Có phạm vi trong một phiên truyền (session) và kiểu tương ứng là javax.servlet.http.HttpSession. Gọi về các phiên truyền được tạo tự động vì thế biến này vẫn còn kết nối ngay cả chẳng có một tham chiếu incoming session nào. Một ngoại lệ là nếu chúng ta sử dụng thuộc tính session của page directive để tắc các phiên truyền, mà lại cố tham chiếu đến biến session thì sẽ gây ra các lỗi vào lúc trang JSP được dòch thành servlet. application Biến này có kiểu là javax.servlet.ServletContext, có phạm vi trong toàn ứng dụng (application). ServletContext lấy từ một đối tượng cấu hình servlet là getServletConfig().getContext(). Các trang JSP có thể lưu trữ dữ liệu persistent trong đối tượng ServletContext tốt hơn là trong các biến thể hiện. ServletContext có các phương thức setAttribute và setAttribute mà cho phép chúng ta lưu trữ dữ liệu config Biến này có phạm vi trang (page) và có kiểu tương ứng là javax.servlet.ServletConfig. pageContext Biến này có kiểu là javax.servlet.jsp.PageContext và có phạm vi là trang (page). pageContext cho phép một điểm truy cập duy nhất tới nhiều thuộc tính của trang và cung cấp một nơi thuận tiện để lưu trữ dữ liệu dùng chung. Biến pageContext lưu trữ giá trò của javax.servlet.jsp.PageContext cùng với trang hiện hành. Có thể xem chi tiết trong chương II về JavaBeans. page Biến này đồng nghóa với this và điều này thì không hữu ích trong ngôn ngữ lập trình Java, có kiểu là java.lang.Object và có phạm vi trang (page). exception Trong một trang lỗi, chúng ta có thể truy cập vào đối tượng exception. Biến này có kiểu là java.lang.Throwable và phạm vò là trang (page). Svth: Đinh Lê Giang Trang 7 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải 2. Biểu thức trong JSP Biểu thức trong JSP được dùng để chèn các giá trò trực tiếp vào luồng xuất. Nó có dạng sau: <%= Java expressions %> Biểu thức này được đònh trò, được chuyển thành chuổi, và được chèn vào trong trang. Sự đònh trò diễn ra ở thời gian runtime (khi trang được yêu cầu) và do đó có đầy đủ quyền truy cập các thông tin của yêu cầu này. Ví dụ sau đây mô tả ngày/giờ mà trang được yêu cầu: Current time: <%= new java.util.Date() %> Trong Java mỗi câu lệnh đều có dấu ‘;’ kết thúc dòng. Tại sao biểu thức trong JSP lại không có dấu ‘;’? Vì biểu thức này được đưa vào luồng xuất chẳng hạn như PrintWriter. Với ví dụ trên có thể chuyển vào servlet như sau: PrintWriter out = response.getWriter(); out.println(“Current time:” + new java.util.Date()); a) Biểu thức như là giá trò trong elements khác. Biểu thức có thể được sử dụng trong các thuộc tính của các elements khác. Giá trò từ các biểu thức này sẽ được tính vào thời gian yêu cầu (request time). Các elements cho phép sử dụng biểu thức trong các thuộc tính của chúng là: Tên Element Tên thuộc tính jsp:setProperty name và value jsp:include page jsp:forward page jsp:param value b) Ví dụ expression.jsp. Đây là một ví dụ hoàn chỉnh đầu tiên của JSP. Nó chỉ hiển thò thời gian hiện thời, tên máy, khi file này được truy cập. Code 1: expression.jsp <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" Svth: Đinh Lê Giang Trang 8 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải "DTD/xhtml1-strict.dtd"> <! Example of JSP Expressions. > <html> <head> <title>JSP Expressions</title> <meta name="author" content="Giang" /> <meta name="keywords" content= "JSP,expressions,JavaServer,Pages,servlets" /> <meta name="description" content= Code 1: expression.jsp (tiếp theo) "A quick example of JSP expressions." /> <link rel="stylesheet" href="JSP-Styles.css" type="text/css" /> </head> <body> <h2>JSP Expressions</h2> <ul> <li> Current time: <%= new java.util.Date() %> </li> <li> Your hostname:<%=request.getRemoteHost()%> </li> <li>Your session ID: <%= session.getId() %></li> <li>The <code>testParam</code> form parameter: <%= request.getParameter("testParam") %> </li> </ul> </body> </html> 3. JSP scriptlets Scriptlets là những đoạn mã có chứa bất kỳ mã Java nào nằm giữa “< %” và “%>”. Nếu chúng ta muốn thực hiện thứ gì đó phức tạp hơn là chỉ chèn vào một biểu thức đơn giản thì JSP scriptlets cho phép chúng ta thêm bất kỳ đoạn mã Java nào vào trang JSP. Các scriptlets này được đưa vào phương thức _jspService (mà được gọi bởi service) của servlet. Có cú pháp: <% Java Code %> Svth: Đinh Lê Giang Trang 9 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải Code 2: scriptlet.jsp <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <! Example of JSP Scriptlets. > <html> Code 2: scriptlet.jsp (tiếp theo) <head> <title>JSP Scriptlets</title> </head> <% String bgColor = request.getParameter("bgColor"); boolean hasExplicitColor; if (bgColor != null) { hasExplicitColor = true; } else { hasExplicitColor = false; bgColor = "WHITE"; } %> <body bgcolor="<%= bgColor %>"> <h2 align="center">Color Testing</h2> <% if (hasExplicitColor) { out.println("You supplied an explicit background color of " + bgColor + "."); } else { out.println("Using default background color of WHITE. " + "Supply the bgColor request attribute to try " + "a standard color, an RRGGBB value, or to see " + "if your browser supports X11 color names."); } %> </body> </html> Svth: Đinh Lê Giang Trang 10 [...]... đưa một file vào tài liệu JSP chính vào lúc tài liệu dòch thành servlet (mà thường vào lần đầu tiên truy cập vào trang này) Có cú pháp như sau: Svth: Đinh Lê Giang 15 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc Thật sự JSP chia làm hai nhánh để include một file vào một tài liệu chính File được include thì được chèn vào trang vào lúc biên dòch, Còn nhánh còn lại thì... xử lý form, truy cập cơ sở dữ liệu và các dòch vụ ở mức xí nghiệp khác như email, quản lý thư mục và điều khiển luồng Trước khi custom action xuất hiện thì JSP có một cơ chế dùng lại mã là các thành phần JavaBean kết hợp với scriplet Tuy nhiên với JavaBean có một bất lợi là xây dựng phức tạp và khó quản lý Các custom action làm dòu được vấn đề này bằng cách mang lại các lợi ích dưới góc độ khác của việc. .. và servlet đó chuyển request này đến trang JSP Lý do để servlet thường xử lý request gốc là để kiểm tra các tham số trong request và thiết lập Beans nên đòi hỏi nhiều công việc lập trình và nó thuận tiện để lập trình trong servlet hơn là trong tài liệu JSP Nguyên nhân mà trang đích thường lại là tài liệu JSP là JSP rất đơn giản trong tiến trình tạo ra tài liệu HTML Tuy nhiên điều này chỉ là đònh hướng... request Với include directive cho phép chúng ta thêm vào các tài liệu chứa mã JSP vào nhiều trang khác nhau nhưng lại có vấn đề là đòi hỏi chúng ta phải cập nhật lại ngày sữa đổi của trang khi file được include thay đổi Để loại bỏ vấn đề này đặt tả JSP cung cấp cho chúng ta một action là để Svth: Đinh Lê Giang 17 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc include các file vào thời gian... Svth: Đinh Lê Giang 28 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc 4 Thuộc tính của Bean a) Các phương thức truy xuất Thuộc tính thật ra chỉ là những biến nằm trong một lớp, tuy nhiên những biến này không nên sử dụng trực tiếp mà nên thông qua các phương thức để truy xuất chúng Thông thường biến được dùng vào hai mục đích đó là gán dữ liệu và lấy dữ liệu ra để tính toán Java đưa ra hai loại phương... Do you authorize? Answer: Svth: Đinh Lê Giang 30 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc Thuộc tính mang giá trò mảng - Ví dụ này sẽ xây dựng một component mà có thể thực hiện các tính toán tónh trên một dãy số Code 19: Java file package com.legiang.bean; import java.util.*; public class StatBean { /*Data members*/... out.println("" + numbers[i]); } %> is equal to Ngoài các loại thuộc tính trên, Java còn cung cấp một số thuộc tính nâng cao khác dùng cho các Bean đồ hoạ Svth: Đinh Lê Giang 32 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc III Các giao tiếp bổ trợ cho Bean Trong khi điều này không phải là yêu cầu đặc biệt thì có một số giao tiếp cho... dụng cơ chế serialization để sao lặp dữ liệu của session giữa các web server trong nhóm Nếu Beans của chúng ta không cài đặt giao tiếp Svth: Đinh Lê Giang 33 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc Serializable thì server không thể lưu trữ hoặc chuyển Beans của chúng ta trong các tình huống này 3 Giao tiếp HttpSessionBindingListener Việc cài đặt giao tiếp HttpSessionBindingListener của Servlet... session vì một số lý nguyên nhân Mỗi sự kiện kết hợp với giao tiếp HttpSessionBindingListener thì có thể sử dụng để đạt được sự truy cập vào đối tượng session Việc cài đặt giao tiếp này sẽ cho phép chúng ta tác động trở lại các sự kiện của session Ví dụ đóng các nối kết không cần thiết, tạo các giao tác hoặc thực hiện các hoạt động bảo trì khác Svth: Đinh Lê Giang 34 Trang Đồ án tốt nghiệp Chương III... của Java 2 Svth: Đinh Lê Giang 19 Trang Đồ án tốt nghiệp Hải Gvhd: Ts.Nguyễn Thúc - Mã của chúng ta chạy chậm hơn vì hầu hết các trình biên dòch cho nền Java 2 được cải tiến rất đáng kể so với các trình biên dòch từ JDK 1.1 trở xuống Hơn thế nữa, các phiên bản của các trình duyệt có một số mâu thuẫn trong cách thức mà chúng hổ trợ AWT component khác nhau, làm cho việc thử nghiệm và điều phối các giao . thực hiện mọi công việc, lưu trữ các kết quả trong các Beans và điều phối yêu cầu này đến một trong những trang JSP có thể hiển thò nó. Svth: Đinh Lê Giang Trang 1 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn. Lê Giang Trang 3 Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải CDF : Channel Difinition Format – cho phép các tác giả của các Web sites cho phép các người đăng ký biết khi nào Web site này thay. :</td> <td>22</td> </tr> </table> Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải XML là một đònh dạng chuẩn mà các hệ quản trò cần hổ trợ. Hiện nay có nhiều hệ quản trò lớn hổ trợ XML như MS SQL