Java Server-Side Programming
Trong những ngày đầu, các máy chủ web cung cấp các nội dung tĩnh không quan tâm đến yêu cầu của người dùng. Java servlet là các chương trình phía máy chủ (chạy bên trong máy chủ web) xử lý các yêu cầu của khách hàng và trả về phản hồi động hoặc tùy chỉnh cho mỗi yêu cầu. Phản hồi động có thể dựa trên thông tin đầu vào của người dùng (ví dụ: tìm kiếm, mua sắm trực tuyến, giao dịch trực tuyến) với dữ liệu được truy xuất từ cơ sở dữ liệu hoặc các ứng dụng khác hoặc dữ liệu nhạy cảm về thời gian (chẳng hạn như tin tức và giá cổ phiếu).
Các servlet Java thường chạy trên giao thức HTTP. HTTP là một giao thức phản hồi yêu cầu không đối xứng . Máy khách gửi một thông báo yêu cầu đến máy chủ và máy chủ trả về một thông báo phản hồi như được minh họa.
Có nhiều công nghệ phía máy chủ (cạnh tranh) có sẵn: dựa trên Java (servlet, JSP, JSF, Struts, Spring, Hibernate), ASP, PHP, CGI Script và nhiều công nghệ khác.
Java servlet là nền tảng của công nghệ phía máy chủ Java, JSP (JavaServer Pages), JSF (JavaServer Faces), Struts, Spring, Hibernate và các công nghệ khác, là các phần mở rộng của công nghệ servlet.
HTML, Ngôn ngữ lập trình Java, Máy chủ HTTP và Apache Tomcat, Hệ thống cơ sở dữ liệu SQL và MySQL, và nhiều thứ khác.
Servlet là các chương trình phía máy chủ chạy bên trong một máy chủ HTTP hỗ trợ Java . Apache Tomcat Server (@ http://tomcat.apache.org ) là Triển khai Tham chiếu (RI) chính thức cho Java servlet và JSP, được cung cấp miễn phí bởi tổ chức nguồn mở Apache (@ http://www.apache.org ).
Bạn cần cài đặt Tomcat để dùng thử các servlet Java. Đọc " Cách cài đặt Tomcat và bắt đầu lập trình Java Servlet ".
Tôi sẽ biểu thị thư mục đã cài đặt của Tomcat là <CATALINA_HOME>
và giả sử rằng máy chủ Tomcat đang chạy ở cổng 8080.
Tomcat cung cấp nhiều ví dụ về servlet tuyệt vời trong " <CATALINA_HOME>\webapps\examples\servlets
". Bạn có thể chạy các ví dụ này bằng cách khởi chạy Tomcat và phát hành URL http://localhost:8080/examples
.
Java Servlet có các phiên bản sau: [TODO các tính năng và tính năng mới]
Trang chủ Java Servlets là @ http://java.sun.com/products/servlet ( http://www.oracle.com/technetwork/java/javaee/servlet/index.html ). Đối với các nhà phát triển, hãy xem Servlet Developers @ http://java.net/projects/servlet/ .
Java Servlet là công nghệ nền tảng cho lập trình phía máy chủ Java. Bạn cần phải hiểu Servlet kỹ lưỡng trước khi có thể tiếp tục với các công nghệ phía máy chủ Java khác như JavaServer Pages (JSP) và JavaServer Faces (JSF).
Một HTTP Servlet chạy theo giao thức HTTP. Điều quan trọng là phải hiểu giao thức HTTP để hiểu các chương trình phía máy chủ (servlet, JSP, ASP, PHP, v.v.) chạy trên HTTP. Đọc " Kiến thức cơ bản về HTTP ", nếu cần.
Tóm lại, HTTP là một giao thức phản hồi yêu cầu. Máy khách gửi một thông báo yêu cầu đến máy chủ. Đến lượt nó, máy chủ sẽ trả về một thông báo phản hồi. Thông báo bao gồm hai phần: tiêu đề (thông tin về thông báo) và nội dung (nội dung). Header cung cấp thông tin về các tin nhắn. Dữ liệu trong tiêu đề được tổ chức theo các cặp tên-giá trị.
Đọc " Thông báo phản hồi và yêu cầu HTTP " để biết định dạng, cú pháp của thông báo yêu cầu và phản hồi cũng như các ví dụ.
Chúng ta hãy bắt đầu bằng cách viết một servlet nói xin chào để đáp ứng yêu cầu của khách hàng. Chúng tôi sẽ sử dụng JDK và Tomcat để hiểu những điều cơ bản, thay vì IDE như IntelliJ/ Eclipse / NetBeans. Khi bạn đã hiểu những điều cơ bản, bạn nên sử dụng
Chúng tôi sẽ bắt đầu bằng cách xác định một ứng dụng web (ứng dụng web) mới có tên là " helloservlet
" trong Tomcat. Ứng dụng web, được gọi là ngữ cảnh web trong Tomcat, bao gồm một tập hợp các tài nguyên, chẳng hạn như tệp HTML, CSS, JavaScripts, hình ảnh, chương trình và thư viện.
Ứng dụng web Java có cấu trúc thư mục được chuẩn hóa để lưu trữ các loại tài nguyên khác nhau.
Tạo một thư mục " helloservlet
" trong thư mục " " của Tomcat webapps
(tức là " <CATALINA_HOME>\webapps\helloservlet
", <CATALINA_HOME>
biểu thị thư mục đã cài đặt của Tomcat) . Tạo các thư mục con "
WEB-INF
" và " META-INF
" dưới " helloservlet
". Tạo các thư mục con phụ " classes
", " lib
" và " src
" dưới " WEB-INF
". Hãy lưu ý rằng tên thư mục có phân biệt chữ hoa chữ thường.
Các tài nguyên phải được giữ trong các thư mục tương ứng:
helloservlet
". Nó chứa các tài nguyên mà khách hàng có thể truy cập , chẳng hạn như HTML, CSS, Scripts và hình ảnh. Các tài nguyên này sẽ được giao cho khách hàng như nó vốn có . Bạn có thể tạo thư mục con như images
, css
và scripts
, để loại hơn nữa các nguồn lực.web.xml
") và các thư mục con của nó chứa các lớp chương trình, tệp nguồn và thư viện.context.xml
") liên quan đến máy chủ cụ thể (ví dụ: Tomcat, Glassfish). Ngược lại, " WEB-INF
" dành cho các tài nguyên liên quan đến ứng dụng web này, độc lập với máy chủ.Servlet là các chương trình Java chạy bên trong một máy chủ HTTP hỗ trợ Java. Người dùng có thể gọi một servlet bằng cách cấp một URL cụ thể từ trình duyệt (máy khách HTTP). Trong ví dụ này, chúng ta sẽ viết một servlet có tên là " HelloServlet.java
" và được biên dịch thành " HelloServlet.class
". Khách hàng có thể gọi " HelloServlet.class
" bằng cách cấp URL http://hostname:port/helloServlet/sayhello
(tức là " sayhello
" liên quan đến ứng dụng web).
Một servlet sẽ được giữ bên trong một gói Java (thay vì gói không có tên mặc định ) để triển khai thích hợp. Hãy gọi gói của chúng tôi " mypkg
". Tạo một thư mục con có tên " mypkg
" dưới " WEB-INF\src
". Sử dụng trình soạn thảo văn bản lập trình để nhập các mã nguồn sau và lưu dưới dạng " HelloServlet.java
" trong " <CATALINA_HOME>
\ webapps\
helloservlet\WEB-INF\src\mypkg
".
HelloServlet
(trong Dòng 8). Dòng 2 đặt lớp này trong một gói được gọi mypkg
. Do đó, chúng tôi lưu tệp nguồn trong " mypkg
" của thư mục " helloservlet\WEB-INF\src
", theo cấu trúc thư mục gói chuẩn của Java."servlet-api.jar
"in" <CATALINA_HOME>\lib
". Bạn có thể sao chép "servlet-api.jar"
từ" <CATALINA_HOME>\lib
"sang" <JAVA_HOME>\jre\lib\ext
"(Thư mục mở rộng JDK) hoặc bao gồm tệp Servlet JAR trong của bạn CLASSPATH
.-d
tùy chọn chỉ định thư mục đích đầu ra để đặt lớp đã biên dịch trong helloservlet\WEB-INF\class\mypkg
thư mục "".// Thay đổi thư mục thành <CATALINA_HOME> \ webapps \ helloservlet \ WEB-INF d: \ ...> cd <CATALINA_HOME> \ webapps \ helloservlet \ WEB-INF // Biên dịch tệp nguồn và đặt lớp vào thư mục đích đã chỉ định d: \ <CATALINA_HOME> \ webapps \ helloservlet \ WEB-INF> lớp javac -d src \ mypkg \ HelloServlet.javaTùy chọn "
-d classes
" chỉ định thư mục đích đầu ra, liên quan đến thư mục hiện tại. Đầu ra là . Trình biên dịch tự động tạo thư mục gói " ".<CATALINA_HOME>\webapps\helloservlet\WEB-INF\classes\mypkg\HelloServlet.class
mypkg
javax.servlet.http.HttpServlet
(trong Dòng 8).doGet()
hoặc doPost()
phương thức của servlet .HelloServlet
, chúng tôi ghi đè doGet()
phương thức (như được biểu thị bằng chú thích @Override
). Quá trình doGet()
chạy để đáp ứng yêu cầu HTTP GET do người dùng đưa ra thông qua một URL. doGet()
nhận hai đối số, một HttpServletRequest
đối tượng và một HttpServletResponse
đối tượng, tương ứng với các thông báo yêu cầu và phản hồi.HttpServletRequest
tượng có thể được sử dụng để truy xuất tiêu đề yêu cầu HTTP đến và dữ liệu biểu mẫu . Đối HttpServletResponse
tượng có thể được sử dụng để đặt tiêu đề phản hồi HTTP (ví dụ: loại nội dung) và nội dung thông báo phản hồi .text/html
". Khách hàng cần biết loại thông báo để hiển thị chính xác dữ liệu nhận được. (Loại MIME khác bao gồm text/plain
, image/jpeg
, video/mpeg
, application/xml
, và nhiều người khác). Trong Dòng 15, chúng ta lấy một Writer
đối tượng gọi là out
để viết các thông điệp trả lời cho khách hàng qua mạng. Sau đó, chúng tôi sử dụng out.println()
để in ra một trang HTML thích hợp có chứa thông báo "Xin chào, thế giới!". Servlet này cũng lặp lại một số thông tin yêu cầu của khách hàng và in ra một số ngẫu nhiên cho mỗi yêu cầu.Người dùng web gọi một servlet, được giữ trong máy chủ web, bằng cách cấp một URL cụ thể từ trình duyệt. Trong ví dụ này, chúng tôi sẽ định cấu hình URL yêu cầu sau để kích hoạt " HelloServlet
":
http://hostname:port/helloservlet/sayhello
File cấu hình được gọi là "web.xml
", và lưu lại "webapps\helloservlet\WEB-INF
", như sau:
web.xml
" is called web application deployment descriptor. It provides the configuration options for that particular web application, such as defining the the mapping between URL and servlet class.web.xml
" Được gọi là bộ mô tả triển khai ứng dụng web . Nó cung cấp các tùy chọn cấu hình cho ứng dụng web cụ thể đó, chẳng hạn như xác định ánh xạ giữa URL và lớp servlet.HelloWroldServlet
", được triển khai trong " mypkg.HelloServlet.class
" (đã viết trước đó) và ánh xạ tới URL " /sayhello
", trong đó " /
" biểu thị gốc ngữ cảnh của ứng dụng web này " helloservlet
". Nói cách khác, URL tuyệt đối cho servlet này là . http://hostname:port/helloservlet/sayhello
<servlet>
và <servlet-mapping>
các phần tử để thực hiện ánh xạ, thông qua một tùy ý nhưng duy nhất <servlet-name>
. Hơn nữa, tất cả các <servlet>
phần tử phải được nhóm lại với nhau và đặt trước các <servlet-mapping>
phần tử (như được chỉ định trong lược đồ XML).Để chạy servlet, trước tiên hãy khởi động máy chủ Tomcat. Xác minh rằng ngữ cảnh web " helloservlet
" đã được triển khai bằng cách quan sát các thông báo sau trong bảng điều khiển của Tomcat:
xxx x, xxxx xx: xx: xx xx org.apache.catalina.startup.HostConfig deployDirectory THÔNG TIN: Triển khai thư mục ứng dụng web helloservlet ......
Khởi động trình duyệt web (Firefox, IE hoặc Chrome) và nhập URL sau (như được định cấu hình trong " web.xml
"). Giả sử rằng Tomcat đang chạy ở cổng số 8080.
http://localhost:8080/helloservlet/sayhello
Chúng ta sẽ thấy đầu ra "Hello, world!".
Hãy thử chọn "Xem Nguồn" trong trình duyệt của bạn để tạo ra các đầu ra sau:
<!DOCTYPE html> <html><head> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> <title>Hello, World</title></head> <body> <h1>Hello, world!</h1> <p>Request URI: /helloservlet/sayhello</p> <p>Protocol: HTTP/1.1</p> <p>PathInfo: null</p> <p>Remote Address: 127.0.0.1</p> <p>A Random Number: <strong>0.4320795689818858</strong></p> </body> </html>
Điều quan trọng cần lưu ý là người dùng nhận đầu ra của servlet. Người dùng không nhận được mã chương trình của servlet, được giữ trong thư mục ẩn " WEB-INF
" và người dùng web không thể truy cập trực tiếp.
Mọi thứ có thể xảy ra sai sót sẽ xảy ra sai sót ... Đọc " Thông báo lỗi phổ biến ". Các lỗi có thể xảy ra là "Không tìm thấy tệp 404" và "Lỗi máy chủ nội bộ 500".
Đăng nhận xét