Lỗi internet explorer 11 khong doc duoc file jsp năm 2024
Jakarta Server Pages (JSP; trước đây là JavaServer Pages) là một bộ công nghệ giúp các nhà phát triển phần mềm tạo ra các trang web động dựa trên HTML, XML, SOAP hay các loại tài liệu khác. Được phát hành vào năm 1999 bởi Sun Microsystems, JSP tương tự như PHP và ASP, nhưng sử dụng ngôn ngữ lập trình Java. Show
Để triển khai và chạy Jakarta Server Pages, cần có một máy chủ web tương thích với servlet container, ví dụ như Apache Tomcat hoặc Jetty. Tổng quan[sửa | sửa mã nguồn]Kiến trúc JSP Model 2.Về mặt kiến trúc, JSP có thể được coi là một trừu tượng cấp cao của Java servlets. JSP được dịch thành các servlet tại thời gian chạy, do đó JSP chính là một Servlet; mỗi servlet JSP được lưu trữ trong bộ nhớ cache và tái sử dụng cho đến khi JSP gốc bị sửa đổi. Jakarta Server Pages có thể được sử dụng độc lập hoặc như thành phần chế độ xem của một thiết kế MVC ở phía máy chủ, thường với JavaBeans làm model và Java servlets (hoặc một hệ khung như Apache Struts) làm controller. Đây là một loại kiến trúc Model 2. JSP cho phép mã Java và một số hành động xử lý đã được định trước nằm xen kẽ với nội dung tĩnh của trang web, ví dụ như HTML. Trang kết quả được biên dịch và thực thi trên máy chủ để cung cấp một tài liệu. Các trang biên dịch, cũng như các thư viện Java phụ thuộc, chứa mã bytecode Java thay vì mã máy. Giống như bất kỳ .jar hoặc chương trình Java nào khác, mã phải được thực thi trong một Máy ảo Java (JVM) có tương tác với hệ điều hành của máy chủ để cung cấp môi trường trừu tượng, độc lập với nền tảng. JSP thường được sử dụng để cung cấp tài liệu HTML và XML, nhưng thông qua việc sử dụng OutputStream, chúng cũng có thể cung cấp các loại dữ liệu khác. Web container tạo ra các đối tượng ngầm định JSP như request, response, session, application, config, page, pageContext, out và exception. JSP Engine tạo ra những đối tượng này trong quá trình biên dịch. JSP và Servlet[sửa | sửa mã nguồn]Về mặt kiến trúc mà nói, ta có thể xem JSP là một trừu tượng ở mức độ cao của servlet, một phần mở rộng thực thi của Servlet 2.1 API. Cả hai, servlet và, đều nguyên do công ty Sun Microsystems tạo dựng. Bắt đầu từ phiên bản 1.2 đặc tả của JSP, JavaServer Pages đã được xây dựng do Tiến trình cộng đồng Java (Java Community Process). JSR 53 - Java Specification Requests hay "Yêu cầu đặc tả cho Java" - định nghĩa bản đặc tả của cả hai, JSP 1.2 và Servlet 2.4, và JSR 152 định nghĩa bản đặc tả JSP 2.0. Tại thời điểm năm 2006 bản đặc tả JSP 2.1 được xây dựng trên nền của yêu cầu JSR 245. Cú pháp JSP[sửa | sửa mã nguồn]Một trang JSP có thể được phân thành từng phần nhỏ như sau:
<%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 7 <%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 8 <%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 9
Dữ liệu tĩnh[sửa | sửa mã nguồn]Vì dữ liệu tĩnh được viết ra trong phần hồi âm HTTP (HTTP response) cũng giống như nó được viết trong tập tin nhận vào (input file), cho nên dữ liệu nhập hợp lệ của JSP thường là một trang HTML bình thường, không có mã java hoặc hành động JSP nhúng trong đó. Với dữ liệu tĩnh này, bất cứ lúc nào trình chủ web hồi âm, trình chủ web cũng sẽ gửi cùng một dữ liệu sang trang trình khách. Các chỉ phối JSP[sửa | sửa mã nguồn]Chỉ phối JSP (JSP directives) điều khiển cách mà bộ biên dịch JSP khởi tạo một servlet. Các chỉ phối hiện có được liệt kê như sau:
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %> 4 của Java được chèn vào trong tập tin. contentType Chỉ định nội dụng của tập tin được khởi tạo. Chúng ta nên dùng chỉ phối này nếu chúng ta không dùng HTML, hoặc bộ ký tự (character set) được dùng không phải là bộ ký tự mặc định. errorPage Chỉ định rằng trang web sẽ được hiển thị nếu có một ngoại lệ (exception) xảy ra trong quá trình xử lý yêu cầu HTTP. isErrorPageNếu định giá trị là <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %> 5 thì nó nói rằng trang này là trang báo lỗi (error page). isThreadSafeChỉ định cho biết servlet tạo ra có tính an toàn về luồng xử lý (threadsafe) hay không. <%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP Chú ý: Chỉ có chỉ phối trang "import" là có thể được dùng nhiều lần trong cùng một trang JSP.
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %> Các thành phần trong văn lệnh JSP và các biến[sửa | sửa mã nguồn]Các biến văn lệnh tiêu chuẩn[sửa | sửa mã nguồn]Các biến văn lệnh (scripting variables) sau có thể dùng lúc nào cũng được:
Các thành phần trong văn lệnh[sửa | sửa mã nguồn]Có 3 thành phần chính trong văn lệnh. Chúng cho phép mã Java được chèn (insert) trực tiếp vào trong servlet.
`<% int localStackBasedVariable = 1;
Các hành động của JSP[sửa | sửa mã nguồn]Hành động JSP là các thẻ XML được dùng để khởi động chức năng mà máy chủ web vốn có. Những hành động sau đây được cung cấp: jsp:include Tương tự như mục đích sử dụng một thủ tục con (subroutine), Java servlet tạm thời trao nhiệm vụ đặt yêu cầu và hồi âm cho trang JavaServer (JavaServer Page) chỉ định nào đấy. Quyền khống chế sẽ được hoàn lại cho trang JSP hiện tại, một khi trang JSP kia hoàn thành nhiệm vụ của nó. Dùng phương pháp này, mã trang JSP được chia sẻ với nhiều trang JSP, thay vì phải sao mã. jsp:paramCó thể được dùng bên trong khối <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %> 7, khối <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %> 8 hoặc khối <%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %> 9. Nó được dùng để xác định một thông số, và thông số này sẽ được cộng thêm vào chuỗi các thông số hiện có của yêu cầu. jsp:forwardĐược dùng để trao nhiệm vụ đặt yêu cầu và hồi âm sang cho một trang JSP khác, hoặc cho một servlet khác. Quyền khống chế sẽ được hoàn trả lại cho trang JSP hiện tại. jsp:pluginNhững phiên bản cũ của Netscape Navigator và Internet Explorer dùng những thẻ khác để nhúng một chương trình nhỏ (applet). Hành động này tạo nên thẻ thuộc trình duyệt web cần thiết để bao gồm một chương trình nhỏ (to include an applet). jsp:fallbackPhần nội dung sẽ được hiển thị nếu trình duyệt web không hỗ trợ chương trình nhỏ (applets). jsp:getPropertyget of property của một JavaBean chỉ định. jsp:setPropertyset Property value sở hữu của một JavaBean chỉ định. jsp:useBeanKiến tạo hoặc dùng lại một JavaBean, là cái có thể dùng được trong trang JSP. Ví dụ về các thẻ[sửa | sửa mã nguồn]jsp:include[sửa | sửa mã nguồn]
jsp:forward[sửa | sửa mã nguồn]Trong ví dụ tiếp tới này, yêu cầu được chuyển về phía trước tới "subpage.jsp". Thao tác xử lý yêu cầu không quay trở lại trang này. jsp:plugin[sửa | sửa mã nguồn]Ví dụ plugin trên minh họa một phương pháp đồng bộ để nhúng applet trong một trang web. Trước khi thẻ 0, 1 v.v.) và thông số năng động (dynamic parameters). Hiện này, thẻ jsp:plugin không cho phép dùng những applet khởi động một cách năng động. Chẳng hạn, nếu chúng ta có một applet biểu hiện đồ thị và nó cần có các dữ liệu về tọa độ được truyền cho nó thông qua các thông số, chúng ta không thể dùng jsp:params, trừ phi số điểm tọa độ là một số cố định. Chúng ta không thể, ví dụ, luân chuyển qua danh sách loạt kết quả (ResultSet) để kiến tạo các thẻ 2. Chúng ta phải tự tính toán cho từng cái thẻ 2 một. Đương nhiên, mỗi một thẻ 2 ấy có thể có một cái tên và một giá trị tùy định. jsp:useBean[sửa | sửa mã nguồn]Những thuộc tính về phạm vi ảnh hưởng (scope attribute) có thể là yêu cầu (request), trang (page), phiên giao dịch (session), hoặc trình ứng dụng (application). Ý nghĩa của các thuộc tính như sau:
Ví dụ trên sử dụng Chương trình quản lý Bean (Bean Manager) để tạo một thực thể (instance) của lớp 5 và lưu trữ thực thể trong thuộc tính (attribute) có tên là "myBean". Thuộc tính tồn tại trong toàn bộ thời gian của yêu cầu. Nó có thể được chia sẻ giữa tất cả các trang JSP đã được bao gồm hay những trang được chuyển về phía trước từ trang JSP nhận yêu cầu đầu tiên. Thư viện thẻ JSP[sửa | sửa mã nguồn]Cùng với các hành động JSP định sẵn, các nhà phát triển có thể thêm vào các hành động tùy biến của họ dùng các hàm API của JSP hỗ trợ cho việc mở rộng thẻ (JSP Tag Extension API). Các nhà phát triển sẽ viết một lớp Java (class) để thực thi một trong các thẻ giao diện (Tag interfaces) và cung cấp một tập tin chứa mô tả XML về thư viện thẻ. Tập tin này được dùng để xác định các thẻ và các lớp Java (java classes) thực hiện các thẻ đó. Xem xét ví dụ sau: <%@ taglib uri="mytaglib.tld" prefix="myprefix" %> ... <%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 0 ... <%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 1 ... Bộ biên dịch JSP sẽ đọc tập tin XML 6 và phát hiện rằng thẻ 7 được thực hiện bởi lớp Java (java class) tên 8 (xem ở dưới). Lần đầu tiên, khi thẻ này được dùng trong tập tin JSP, nó sẽ tạo nên một thực thể (instance) của 8. Sau đó (và mỗi lần thẻ này được dùng lại), nó sẽ khởi động phương thức `<% int localStackBasedVariable = 1;
0 khi nó gặp thẻ "mở đầu" (start). Nó thẩm tra kết quả của thẻ "mở đầu", và quyết định phương pháp để xử lý phần thân của thẻ. Thân của thẻ là phần văn bản nằm giữa thẻ "mở đầu" và thẻ "kết thúc" (end). Phương thức `<% int localStackBasedVariable = 1;
0 có thể trả về một trong những hằng sau:
Khi gặp thẻ "kết thúc", nó gọi phương thức doEndTag(). Phương thức này có thể trả lại một trong hai giá trị:
Thẻ 7 cần phải có một lớp (class) thực thi nó, tương tự như phần sau đây: <%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 2 Quốc tế hóa[sửa | sửa mã nguồn]Quốc tế hóa trong JSP có thể được thực hiện tương tự như phương pháp làm trong các trình ứng dụng Java thông thường, nghĩa là bằng cách dùng gói tài nguyên (resource bundle). Việc thay đổi ngôn ngữ thể hiện trên các trang web được thực hiện một cách đơn giản thông qua việc thay đổi đơn vị locale. Bằng cách đó, lập trình viên có thể thực hiện thay đổi nội dung, ngôn ngữ... thông qua thay đổi các resource bundle này chứ không cần trực tiếp tác động lên code của trang JSP hay code của taglib. JSP 2.0[sửa | sửa mã nguồn]Phiên bản đặc tả mới của JSP bao gồm những đặc trưng mới nhằm nâng cao hiệu năng của nhà lập trình (hầu cho họ làm việc được nhanh và có kết quả hơn), gọi là:
<%@ page import="java.util.*" %> //example import <%@ page contentType="text/html" %> //example contentType <%@ page isErrorPage=false %> //example for non error page <%@ page isThreadSafe=true %> //example for a thread safe JSP 3 Mẫu hình MVC[sửa | sửa mã nguồn]Sun khuyến cáo việc sử dụng mẫu hình MVC (Model-View-Controller - tạm dịch là "Mô hình dữ liệu - giao diện người dùng - lôgic điều khiển", có thể gọi ngắn là "mô hình - giao diện - điều khiển") cho các tập tin JSP để có thể tách biệt phần trình bày (presentation) khỏi phần xử lý yêu cầu (request processing) và lưu trữ dữ liệu (data storage). Hoặc là các `<% int localStackBasedVariable = 1;
3 thông thường hoặc là các tập tin JSP phải được sử dụng để xử lý yêu cầu. Sau khi đã hoàn thành việc xử lý yêu cầu, quyền điều khiển được chuyển sang cho một trang JSP khác. Trang này chỉ được dùng để tạo xuất liệu, tức là hiển thị ở đầu ra. Hiện nay có một vài hệ nền (platforms) được tạo dựa trên nền của nguyên lý mẫu hình MVC cho các tầng máy web (web tiers) (chẳng hạn như Struts và cơ cấu Spring (Spring framework))Ví dụ[sửa | sửa mã nguồn]Mặc dầu bộ biên dịch JSP kiến tạo mã nguồn Java cho servlet hoặc phát ra mã byte của Java (byte code) trực tiếp, chúng ta cũng nên hiểu quá trình bộ biên dịch JSP biến đổi một trang JSP trở thành một servlet của Java như thế nào. Chẳng hạn, chúng ta thử cân nhắc những dữ liệu nhập của JSP sau đây, và kết quả Java Servlet mà nó sinh tạo. |