giới thiệu về jsp và servlet

6
Giới thiệu về JSP và Servlet Java servlets được tạo ra nhằm mục đích giải quyết nhiều vấn đề trong CGI và những trình chủ server API. Trong article này, chúng tôi mô tả một cách tổng quát về kiến trúc servlet và những gì bạn cần để phát triển ứng dụng web với servlet. Mở đầu Java servlets được tạo ra nhằm mục đích giải quyết nhiều vấn đề trong CGI và những trình chủ server API. Trong article này, chúng tôi mô tả một cách tổng quát về kiến trúc servlet và những gì bạn cần để phát triển ứng dụng web với servlet. Chúng tôi sử dụng những đoạn mã ví dụ khác nhau để chỉ cho bạn thấy cách sử dụng servlet API như thế nào và so sánh nó với CGI cũng như những trình chủ server API. Tôi giả sử bạn đã thân thuộc với HTTP và CGI hoặc những trình chủ server API như NSAPI hoặc ISAPI. Tôi cũng cho rằng bạn đã thân thuộc với ngôn ngữ lập trình Java hoặc một vài ngôn ngữ lập trình hướng đối tượng khác, ví dụ C++. Thậm chí nếu bạn không phải là một lập trình viên Java, thì bạn cũng có thể thấy được lợi ích của servlet sau khi bạn đọc article này.

Upload: truong-nguyen

Post on 12-Jan-2017

240 views

Category:

Technology


0 download

TRANSCRIPT

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

Java servlets được tạo ra nhằm mục đích giải quyết nhiều vấn đề trong CGI và những trình chủ server API. Trong article này, chúng tôi mô tả một cách tổng quát về kiến trúc servlet và những gì bạn cần để phát triển ứng dụng web với servlet.

Mở đầuJava servlets được tạo ra nhằm mục đích giải quyết nhiều vấn đề trong CGI và những trình chủ server API. Trong article này, chúng tôi mô tả một cách tổng quát về kiến trúc servlet và những gì bạn cần để phát triển ứng dụng web với servlet. Chúng tôi sử dụng những đoạn mã ví dụ khác nhau để chỉ cho bạn thấy cách sử dụng servlet API như thế nào và so sánh nó với CGI cũng như những trình chủ server API. Tôi giả sử bạn đã thân thuộc với HTTP và CGI hoặc những trình chủ server API như NSAPI hoặc ISAPI. Tôi cũng cho rằng bạn đã thân thuộc với ngôn ngữ lập trình Java hoặc một vài ngôn ngữ lập trình hướng đối tượng khác, ví dụ C++. Thậm chí nếu bạn không phải là một lập trình viên Java, thì bạn cũng có thể thấy được lợi ích của servlet sau khi bạn đọc article này.

• Thời kỳ tối tămQuay về những năm 90 ban đầu, khi mà web chỉ mới bắt đầu chiếm lĩnh. Common Gateway Interface (CGI) đã định nghĩa cho phép các Web server xử lý những gì mà người dùng nhập vào và làm việc với nội dung động. Các chương trình CGI có thể được phát triển trên bất kỳ một ngôn ngữ lập trình hay ngôn ngữ script nào, tuy nhiên Perl là ngôn ngữ được sử dụng phổ biến nhất. Thật sự tất cả các Web server đều hỗ trợ CGI và nhiều module Perl có sẵn như những phần mềm miễn phí hay phần mềm chia sẻ để xử lý hầu hết những nhiệm vụ.

• Tuy nhiên CGI không phải không có trở ngại. Việc thực thi và tính hiệu quả là những vấn đề lớn khi một xử lý mới được tạo ra cho mỗi yêu cầu, làm cho tài nguyên server nhanh chóng bị bận. Việc chia sẻ tài nguyên cũng như các kết nối dữ liệu giữa các script hay việc gọi cùng một script nhiều lần, dẫn đến lặp lại nhiều lần những công việc thực thi.Bảo mật là sự lo lắng lớn với CGI. Hầu hết các script Perl dùng shell để thực thi các lệnh hệ điều hành với dữ liệu cung cấp bởi người dùng, những thực thể để gởi mail, tìm kiếm một file, hay chỉ là những lệnh hệ điều hành tổng quát. Việc sử dụng shell theo cách này sẽ mở ra nhiều cơ hội cho một hacker sửa lại một script nhằm xóa đi tất cả các file trên một server, gởi file mật khẩu của server đến một account bí mật hoặc làm những hành động không được phép khác mà một máy chủ không mong đợi.

• Những nhà cung cấp Web server đã định nghĩa những API để giải quyết một vài vấn đề này, cụ thể là ISAPI của Microsoft và NSAPI của Netscape. Nhưng một ứng dụng được viết trên những trình chủ API này lại kết hợp với một nhà cung cấp Web server cụ thể. Nếu bạn cần di chuyển một ứng dụng sang một Web server khác của một nhà cung cấp phần mềm khác, bạn phải bắt đầu lại từ đầu. Vấn đề khác với hướng đi này là đáng tin cậy. Các API thông thường hỗ trợ mã thực thi C/C++ trong xử lý của các Web server. Nếu một ứng dụng bị lỗi, ví dụ như con trỏ bị lỗi hoặc chia cho 0, thì toàn bộ Web server sẽ bị sụp đổ cùng với nó.

Giải pháp với ServletServlet API được phát triển dựa trên những điểm mạnh của Java platform nhằm giải quyết vấn đề của CGI và trình chủ server API. Nó là một API đơn giản hỗ trợ tất cả các Web server và thậm chí các ứng dụng máy chủ dùng để kiểm tra và quản lý các công việc trên server (load -balancing). Nó giải quyết vấn đề thực thi bằng việc thực hiện tất cả các yêu cầu như những thread trong một xử lý, hoặc trên một hệ thống load-balancing sẽ là mỗi xử lý trên một server trong kết chùm cluster. Các servlet dễ dàng chia sẽ tài nguyên.Trong định nghĩa servlet, bảo mật được cải tiến theo nhiều cách. Trước hết, bạn hiếm khi thực thi lệnh trên shell với dữ liệu cung cấp bởi người dùng khi Java API đã cung cấp truy cập đến tất cả những hàm sử dụng thông dụng. Bạn có thể sử dụng JavaMail để đọc và gởi mail, Java DataBase Connect (JDBC) để truy cập các database, lớp File và những lớp quan hệ để truy cập hệ thống file, RMI, CORBA, Enterprise Java Beans (EJB) để truy cập các hệ thống kế thừa…Mô hình bảo mật Java tạo cho nó khả năng bổ sung các điều khiển truy cập tốt hơn, cho thực thể chỉ cho phép truy cập đến một phần được xác định tốt hơn trong hệ thống file. Việc xử lý các ngoại lệ của Java cũng làm cho một servlet chắc chắn hơn các trình chủ API C/C++ – một phép chia cho 0 được thông báo như một lỗi thay vì làm sụp đổ cả một hệ thống Web server.

• [Lý Thuyết] Giới thiệu về JSP và Servlet - Phần 2

Phần này tiếp tục giới thiệu về Servlet thông qua môi trường runtime cũng như giao tiếp và vòng đời của servlet.Môi trường runtime của servletMột servlet là một lớp Java và vì thế cần được thực thi trên một máy ảo Java (JVM) bằng một dịch vụ gọi là servlet engine. Servlet engine tải lớp servlet lần đầu tiên servlet được yêu cầu, hoặc ngay khi servlet engine được bắt đầu. Servlet ngừng tải để xử lý nhiều yêu cầu khi servlet engine bị tắt hoặc nó bị dừng lại.Một vài Web server như Java Web Server của Sun, JigSaw của W3C, hoặc LiteWebServer của Gefion có một servlet engine được xây dựng trên Java. Những Web server khác như Enterprise Server của Netscape, IIS của Microsoft hoặc Apache của Apache yêu cầu một module servlet engine add-on. Trình add-on này chuyển tất cả các yêu cầu cho các servlet, thực thi chúng và trả về trả lời cho trình duyệt thông qua Web server. Ví dụ các servlet engine add-on như WAICoolRunner của Gefion, WebSphere của IBM, Jrun của Live.Tất cả các lớp servlet API và một Web server cho phép servlet đơn giản được tích hợp vời J2SDK có sẳn để download tại site servlet của Sun. Để bắt đầu với servlet, tôi yêu cầu bạn download J2SDK và chạy những ví dụ servlet đơn giản.

• Giao tiếp và vòng đời của servletHãy bổ sung servlet đầu tiên của chúng ta. Một servlet là một lớp Java bổ sung giao tiếp servlet. Giao tiếp này bổ sung ba phương thức định nghĩa vòng đời của servlet:public void init(ServletConfig config) throws ServletException: phương thức này được gọi một lần khi servlet được tải vào trong servlet engine, trước khi servlet được yêu cầu xử lý yêu cầu đầu tiên của nópublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException: phương thức này được gọi để xử lý một yêu cầu. Nó có thể không gọi, gọi một lần hay nhiều lần cho đến khi servlet được ngưng tải. Nhiều thread (mỗi yêu cầu) có thể thực thi phương thức này song song, vì thế nó trở nên an toàn.public void detroy(): phương thức này chỉ được gọi một lần trước khi servlet được ngưng tải và gỡ bỏ dịch vụ.

• Phương thức init có một thuộc tính ServletConfig, servlet có thể đọc các đối số khởi tạo của nó thông qua đối tượng ServletConfig. Chúng thường được định nghĩa trong một file cấu hình. Một ví dụ thông thường của một đối số khởi tạo là định danh database

…private String databaseURL;public void init(ServletConfig config) throws ServletException {super.init(config);databaseURL = config.getInitParameter(“database”);}

• Servlet API có cấu trúc để servlet có thể cho phép bổ sung một giao thức khác HTTP. Gói javax.servlet chứa các lớp và các giao tiếp được kế thừa để giao tiếp một cách độc lập. Gói javax.servlet.http chứa các lớp và giao tiếp HTTP cụ thể. Đây chỉ là một sự giới thiệu về servlet, tôi sẽ bỏ qua sự phân biệt này ở đây và chỉ tập trung vào HTTP servlet. Servlet đầu tiên của chúng ta tên là ReqInfoServlet kế thừa một lớp tên HTTPServlet. HTTPServlet là một phần của JSDK và được bổ sung giao tiếp Servlet cộng với một số các phương thức hữu dụng khác. Chúng ta định nghĩa lớp của chúng ta như sau:

import javax.servlet.*;import javax.servlet.http.*;public class ReqInfoServlet extends HttpServlet {…}

• Một tập các phương thức trong HTTPServlet là những phương thức xác định dịch vụ trong giao tiếp servlet. Việc bổ sung dịch vụ trong HTTPServlet giống như một kiểu của các yêu cầu được xử lý (GET, POST, HEAD…) và gọi một phương thức cụ thể cho mỗi kiểu. Bằng việc làm này, các nhà phát triển servlet an tâm khi xử lý chi tiết những yêu cầu như HEAD, TRACE, OPTIONS… và có thể tập trung vào những yêu cầu thông dụng hơn như GET và POST. Trong ví dụ đầu tiên, chúng ta sẽ bổ sung phương thức doGet