GIÔÙI THIEÄU VEÀ NGOÂN NGÖÕ CAØI ÑAËTChöông I CAÊN BAÛN VEÀ JSPJavaServer Pages (JSP) laø moät kyõ thuaät serverside do ñoù chuùng ta khoâng theå thöïc hieän baát kyø haønh ñoäng naøo ôû client. JSP cho pheùp chuùng ta taùch thaønh phaàn ñoäng cuûa trang ra khoûi thaønh phaàn tónh HTML. Raát ñôn giaûn, chuùng ta chæ caàn vieát moät taøi lieäu HTML bình thöôøng roài sau ñoù bao quanh maõ cuûa thaønh phaàn ñoäng trong caùc tag ñaëc bieät, haàu heát caùc tag baét ñaàu vôùi . Ví duï, ñaây laø moät phaàn cuûa trang JSP, coù keát quaû traû veà laø “Thanks for reading Van Dau book.” vôùi URL laø http:localhost:8100thanhk.jsp?title=Van+Dau Thanks for reading book.Kyõ thuaät JSP laø moät thaønh phaàn trong ñaïi gia ñình Java; noù söû duøng ngoân ngöõ kòch baûn döïa vaøo ngoân ngöõ laäp trình Java, vaø caùc trang JSP ñöôïc bieân dòch thaønh servlets. Töø ñoù chuùng ta cuõng nhaän bieát ñöôïc, JSP thì khoâng phuï thuoäc baát kyø neàn (platform) naøo. Noù ñaùp öùng ñöôïc khuynh höôùng cuûa Sun MicroSystem laø “write one, run anywhere”.Caùc trang JSP coù theå goïi caùc thaønh phaàn JavaBeans, Enterprise JavaBeans (EJB) hoaëc custom tags ñeå thöïc hieän caùc xöû lyù treân server. Vaø nhö theá, kyõ thuaät JSP laø thaønh phaàn chuû choát trong kieán truùc khaû chuyeån cuûa Java cho nhöõng öùng duïng döïa vaøo Web.Nhö ñaõ bieát, JSPs seõ bieân dòch thaønh servlets nhöng JSP khoâng theå thay theá servlet vì caùc lyù do sau:•Moät soá taùc vuï ñöôïc giaûi quyeát raát toát baèng servlet. Ví duï, caùc öùng duïng xuaát ra döõ lieäu nhò phaân hoaëc chæ xaùc ñònh nôi gôûi trôû laïi cho ngöôøi duøng (baèng caùch duøng response.sendRedirect) ñöôïc duøng servlet thì toát nhaát.•Moät soá taùc vuï khaùc laïi ñöôïc giaûi quyeát raát toát baèng JSP nhö caùc tình huoáng maø caáu truùc neàn taûng cuûa trang HTML laø coá ñònh nhöng caùc giaù trò trong noù laïi thay ñoåi.Coøn caùc taùc vuï coøn laïi caàn söï keát hôïp caû servlet vaø JSP. Ví duï, trong yeâu caàu goác ñöôïc traû lôøi baèng moät servlet maø thöïc hieän moïi coâng
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 Phần I GIỚI THIỆU VỀ NGÔN NGỮ CÀI ĐẶT 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 Van Dau book.” với URL là http://localhost:8100/thanhk.jsp?title=Van+Dau 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 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 1 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 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ó. 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. So sánh JSP với các công nghệ khác. I.1. JSP với ASP ASP là công nghệ tương đương từ Microsoft. JSP có ba lợi thế so với ASP. - 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. I.2. 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. II. Các thành phần script của JSP. Các thẻ bọc mã 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 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 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 2 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 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 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: 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> II.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 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 3 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 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. 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). II.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 %> SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 4 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 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()); 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 II.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 %> II.4. Khai báo trong JSP Một khai báo trong JSP cho phép chúng ta đònh nghóa các phương thức hoặc các trường (biến) có phạm vi toàn trang. Khai báo sẽ được chèn vào trong lớp của servlet (bên ngoài phương thức _jspService được gọi bởi service để xử lý một yêu cầu). Một khai báo có dạng sau: <%! Java Code %> Các khai báo trong JSP thì không phát sinh ra bất kỳ thông xuất nào, chúng thường được dùng để liên kết với các biểu thức hoặc scriptlets. Chẳng hạn, đây là một trang JSP mà in ra số lần truy cập vào trang. SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 5 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 III. Xử lý nhúng và chuyển hướng giữa các trang Trong quá trình xử lý và chuyển dữ liệu cho form chúng ta có thể nhúng và triệu gọi những trang JSP khác với trang hiện hành.Ví dụ chúng ta có thể đưa một trang HTML hoặc JSP vào trong trang JSP hiện tại để hổ trợ thêm thư viện hay tính năng bổ sung nào đó. Hay khi nhận được dữ liệu submit từ trình khách, trang JSP nhận được dữ liệu có thể chuyển hướng hoặc triệu gọi đến trang JSP khác. III.1. Nhúng file vào trang với chỉ thi include Chỉ thò <%include %> thường dùng để dem một nội dung file .html hay jsp bên ngoài vào trang hiện hành. Cú pháp sử dụng như sau: <%@include file = “filename”%> Ví dụ: Trong chương trình chúng ta có sử dụng các hàm thư viện chứa trong file Common.jsp. Thư viện này được đưa vào trang JSP hiện hành như sau: <%@include file = “Common.jsp”%> III.2. Sử dụng thẻ <jsp:include> Chỉ thò %@include % chỉ dùng để nhúng các mã nguồn tónh. Nếu muốn nhúng kết quả kết xuất từ các trang jsp, servlet hay .html khác vào trang hiện hành chúng ta sử dụng thẻ <jsp:include> với cú pháp như sau: <jsp:page include page = “filename” flush = “true”/> Ví dụ: trong chương trình sử dụng thẻ <jsp:include> để nhúng kết quả của trang Header.jsp, Footer.jsp vào các trang JSP như sau: <jsp:include page = “Header.jsp” flush = “true”/> … <jsp:include page = “Footer.jsp” flush = “true”/> III.3. Chuyển tham số bằng thẻ <jsp:param> Khi nhúng trang bằng thẻ <jsp:include> bạn có thể chuyển tham số cho trang được nhúng để nhận được kết xuất linh động hơn bằng cách sử dụng thẻ con <jsp:param>. Ví dụ testParam.jsp <jsp: include page = “testParam2.jsp” flush = “true”> <jsp:param name = “greeting” value = “Welcome”/> <jsp:include> <% out.println (“Goi tham so từ test1.jsp”); SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 6 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 %> testParam2.jsp <% String param = request.getParameter (“greeting”); out.println (“Goi tham so tu test2.jsp”); out.println (“param: “ + param); %> III.4. Chuyển tiếp đến trang khác với thẻ <jsp:include> Chúng ta sử dụng thẻ <jsp:forward> để triệu gọi và chuyển dữ liệu cho trang jsp khác xử lý. Trong ví dụ sau chúng ta có 3 trang JSP. Trang thứ nhất hiển thò form đăng nhập yêu cầu nhập vào tên username và password. Trang thứ hai kiểm tra: nếu username, password trùng với username, password cho trước thì thông báo đăng nhập thành công, còn nếu không đúng hoặc rỗng sẽ chuyển đến trang thứ 3 thông báo yêu cầu đăng nhập những trường còn thiếu. Ví dụ: Login.jsp <html> <% String param = request.getParameter (“sError”); if (param.length() !=0) { out.println (“<b>”+ param + “</b>”); } %> <form method = post action = “security.jsp”> Username: <input type = text name = “username”> Password: <input type = password name = “password”> <input type = submit value = Login> </form> </html> security.jsp <html> <% String user = (String) request.getParametrer(“username”); if (user.equals (“admin”)) { %> <jsp:forward page = “thongbao.jsp”/> SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 7 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 <% } else { %> <jsp:include page = “login.jsp” flush = “true”> <jsp:param name = “sError” value = “Ban nhap lai username & password”/> <jsp:include> <%}%> </html> thongbao.jsp <html> Ban dang nhap voi usernam: <%=request.getParameter (“username”)%> Password: <%=request.getParameter (“password”)%> </html> III.5. Thẻ jsp:plugin Phương cách đơn giản nhất để sử dụng jsp:plugin là cung cấp cho nó bốn thuộc tính: type, code, width, height. Chúng ta đònh giá trò “applet” cho thuộc tính type và ba thuộc tính còn lại sử dụng giống như APPLET tag bình thường. Với ngoại lệ là các action thì có cú pháp XML nên các thuộc tính trong nó cũng phải theo qui ước XML. Ví dụ với APPLET tag trong HTML <APPLET CODE=“MyApplet.class” WIDTH=457 HEIGHT=350> </APPLET> sử dụng jsp:plugin action như sau: <jsp:plugin type=“applet” code=“MyApplet.class” width=“457” height=“350” /> Ngoài bốn thuộc tính này jsp:plugin còn có các thuộc tính sau và hầu hết giống (nhưng không phải là tất cả) như các thuộc tính của APPLET tag. codebase, align, archive, hspace, name, vspace, title Giống như APPLET tag. jreversion Xác đònh số phiên bản của Java Runtime Environment, các giá trò có thể nhận là “1.1”, “1.2”. nspluginurl SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 8 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 URL cho Netscape mà có thể download Plug-In. Giá trò mật đònh sẽ hướng người dùng đến web site của Sun, nhưng với intranet chúng ta có thể muốn chỉ dẫn người dùng đến một bản sao cục bộ. iepluginurl URL cho Internet Explorer mà có thể download Plug-In. III.6. Thẻ jsp:fallback III.6. Thẻ jsp:fallback jsp:fallback cung cấp văn bản thay thế đối với các trình duyệt không hổ trợ OBJECT hay EMDEB. Chúng ta sử dụng action này giống như là dùng văn bản thay thế được đặt trong APPLET tag <APPLET CODE=“MyApplet.class” WIDTH=457 HEIGHT=350> <B> Error: this example requires Java. </B> </APPLET> với <jsp:plugin type=“applet” code=“MyApplet.class” width=“457” height=“350” > <jsp:fallback> <b> Error: this example requires Java. </b> </jsp:fallback> </jsp:plugin> III.7. Chuyển trang III.7. Chuyển trang page directive cho phép chúng ta điều khiển cấu trúc của servlet bằng cách đưa vào các lớp, đặt MIME type, …. Một page directive có thể được đặt bất cứ nơi nào trong trang JSP. <%@ page import=“java.util.*, com.vandau.*” %> page directive đònh nghóa một số thuộc tính phụ thuộc vào trang và giao tiếp giữa các thuộc tính này với JSP container. language Đònh nghóa ngôn ngữ kòch bản được sử dụng trong scriptlets, biểu thức và khai báo. Trong JSP 1.2 là phiên bản mới nhất chỉ có hổ trợ “java” cho thuộc tính này do đó “java” này cũng là giá trò mật đònh. <%@ page language=“java” %> extends SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 9 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 Thuộc tính này chỉ đònh lớp cha (superclass) của servlet sẽ được phát sinh cho trang JSP, có dạng sau: <%@ page extends=“package.class” %> Chú ý rằng khi sử dụng thuộc tính này phải hết sức cẩn thận vì tại server có thể đã dùng lớp cha mật đònh. import Thuộc tính này mô tả các kiểu sẵn dùng trong môi trường kòch bản (theo java). Chúng ta có thể import vào từng lớp hoặc cả một gói (package). <%@ page import=“package.class | package.*” %> Nếu import vào nhiều lớp hay packages thì cách nhau dấu “,”. session Thuộc tính session kiểm soát liệu có hay không một trang tham gia vào HTTP session. Có hai giá trò “true” và “false”. Mật đònh là “true”, chỉ ra rằng biến ngầm đònh session nên được nối kết với session hiện hành. Giá trò “false” có nghóa rằng chẳng có session nào được sử dụng tự động và nếu cố truy cập vào biến session sẽ trả lỗi vào lúc trang được dòch thành servlet. buffer Thuộc tính này xác đònh kích thước của vùng đệm được sử dụng bởi biến out. Có dạng sau: <%@ page buffer=“none | sizekb” %> Thuộc tính này có giá trò mật đònh là “8kb”, giá trò “none” chẳng có vùng đệm nào được cấp và tất cả dữ liệu xuất sẽ được ghi trực tiếp qua ServletResponse, PrintWriter. autoFlush Xác đònh liệu luồng xuất có vùng đệm được tự động flush (giá trò “true” mật đònh) khi vùng đệm đầy hay sẽ tung ra một ngoại lệ khi vùng đệm tràn (“false”). Chú ý rằng sẽ không hợp lý nếu đặt autoFlush=“false” khi buffer=“none”. isThreadSafe Xác đònh mức độ an toàn của tiểu trình (thread) được cài đặt trong trang (với giao tiếp SingleThreadModel), “true” là giá trò mật đònh. info SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 10 [...]... Chu trình sống của JSP Tương tự như chu trình sống của servlet, trang JSP cũng có cbhu trình sống xác đònh tính từ khi hệ thống đọc biên dòch trang 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 • Nạp trang • Khởi tạo • Thực thi • Dọn dẹp 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:8100/Default .jsp. .. cần sự độc lập và chỉ thiên về xử lý ta nên sử dụng servlet Trường hợp với dự án lớn chúng ta nên kết hợp cả servlet và JSP Mô hình kết hợp tốt nhất giữa servlet và JSP thường được gọi là MCV (Model – View – Controler) trong đó servlet đóng vai trò trung tâm điều khiển (controler) đưa ra các quyết đònh xử lý JSP đóng vai trò thể hiện giao diện hay hiển thò dữ liệu đã xử lý Quy trình tính toán logic của... điểm của Servlet so với JSP Do mã trang JSP khi thực thi đều được biên dòch ra servlet cho nên tất cả những gì servlet làm được cũng đồng nghóa với trang JSP làm được Viết trang JSP đôi lúc đơn giản hơn viết servlet vì không cần phải qua bước đăng ký và biên dòch thủ công Tuy nhiên chúng ta cũng nên biết một số trường hợp phân biệt giữa JSP và servlet và cách sử dụng chúng JSP có thể trộn lẫn mã Java... phương thức print () hoặc println () Công việc quyết đònh giao diện cho kết xuất hoàn toàn phụ thuộc vào lập trình viên với hàng loạt các lệnh print () hay println () rất khó quản lý Quyết đònh sử dụng JSP, Servlet hay kết hợp cả hai là tuỳ vào từng dự án và mục đích của chương trình mà chúng ta muốn phát triển Thông thường đối với những dự án nhỏ, yêu cầu thời gian nhanh, JSP là lưa chọn thích hợp nhất... URL http://localhost:8100/Default .jsp Web server sẽ kiểm tra trang JSP đã được SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 15 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 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... 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 module hoá tính sử dụng lại cho các trang JSP Các custom action... encoding="utf-8" ?> JSP v1.2 thì đổi lại "http://java.sun.com/j2ee/dtds/jsptaglibrary_1_2.dtd" > 1.0 1.1 vandau A tag library... các tiếp đầu ngữ get/set II Các thẻ chuẩn của JavaBean trong trang JSP Khi chúng ta nhúng JavaBean vào trang JSP, có 3 thẻ chuẩn được đònh nghóa để kết hợp JavaBean • Thẻ này dùng đònh nghóa Bean • Thẻ này dùng đặt thuộc tính cho Bean • Thẻ này dùng lấy giá trò thuộc tính của Bean II.1 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 36... nhóm, việc trộn lẫn mã JSp sẽ rất khó khăn Trong qua trình phát triển ứng dụng Web theo nhóm, việc trộn lẫn mã Java và HTML trong trang JSP cho thấy không hiệu quả Khó có thể tách rời giữa công việc viết mã cho ứng dụng và nhóm xây dựng giao diện Mã trang JSP ở dạng thuần văn bản nên thường không che được mã nguồn của logic chương trình Với servlet, tuy phải biên dòch và đăng ký thủ công với trình chủ... viện JSP container và các công cụ phát triển JSP sử dụng TLD để xác đònh các tag Các element của TLD sau dùng để đònh nghóa thư viện tag: HelloWorldTag.java SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 22 LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003