cuốn sách gpt4 ai đã làm

Hiểu biết sâu sắc về Servlets: từ các khái niệm cơ bản đến các tính năng nâng cao và ứng dụng thực tế

In lại Tác giả: Sahara Thời gian cập nhật: 25-12-2024 08:45:52 59 4
mua khóa gpt4 Nike

1. Giới thiệu và nguyên lý hoạt động của Servlet

Servlet là một thành phần quan trọng trong phát triển Web Java. Nó chạy ở phía máy chủ và được sử dụng để xử lý các yêu cầu của máy khách và trả về các phản hồi. Nguyên tắc hoạt động của nó bao gồm nhiều thành phần và bước Từ yêu cầu do khách hàng khởi tạo đến quá trình xử lý và phản hồi ở phía máy chủ, toàn bộ quá trình diễn ra một cách có trật tự.

(1) Thùng chứa Servlet và Tomcat

Bộ chứa Servlet là môi trường trong đó Servlet chạy và chịu trách nhiệm quản lý vòng đời, phân bổ tài nguyên và xử lý yêu cầu của Servlet. Tomcat là một trong những Servlet container được sử dụng phổ biến, có chức năng mạnh mẽ và hiệu suất tốt. Trong Tomcat, vùng chứa Ngữ cảnh quản lý trực tiếp Trình bao bọc của lớp trình bao bọc Servlet và một Ngữ cảnh tương ứng với một dự án Web. Ví dụ: trong tệp cấu hình Tomcat, bạn có thể định cấu hình các tham số liên quan của ứng dụng web thông qua thẻ , chẳng hạn như đường dẫn, thư viện tài liệu, v.v.

(2) Vòng đời của servlet

  1. Đang tải và khởi tạo
    • Lớp Servlet được tải khi bộ chứa Servlet khởi động hoặc khi nó phát hiện lần đầu tiên rằng một Servlet được yêu cầu để đáp ứng một yêu cầu. Nó lấy các lớp Servlet từ hệ thống tệp cục bộ, hệ thống tệp từ xa hoặc dịch vụ mạng thông qua trình nạp lớp. Ví dụ: khi một ứng dụng web khởi động, Tomcat sẽ tìm lớp Servlet tương ứng dựa trên cấu hình trong web.xml và tải nó.
    • Vùng chứa sử dụng API phản chiếu Java để tạo một phiên bản Servlet và gọi hàm tạo mặc định (hàm tạo không có tham số), vì vậy bạn không nên cung cấp tham số cho hàm tạo khi viết một lớp Servlet.
  2. khởi tạo
    • Sau khi khởi tạo, vùng chứa gọi phương thức init() của Servlet để khởi tạo. Trong phương pháp này, Servlet có thể thực hiện một số công việc chuẩn bị, chẳng hạn như thiết lập kết nối cơ sở dữ liệu, lấy thông tin cấu hình, v.v. Ví dụ: sau đây là cách triển khai phương thức init() đơn giản:
public void init(ServletConfig config) ném ServletException { super.init(config); // Các thao tác khởi tạo được thực hiện ở đây, chẳng hạn như lấy các tham số khởi tạo String paramValue = config.getInitParameter("paramName");

  • Phương thức init() của mỗi phiên bản Servlet chỉ được gọi một lần. Trong quá trình khởi tạo, bạn có thể sử dụng đối tượng ServletConfig để lấy các tham số khởi tạo được định cấu hình trong web.xml. Nếu xảy ra lỗi, ServletException hoặc UnavailableException có thể được ném ra để thông báo cho vùng chứa.
  1. Yêu cầu xử lý
    • Container gọi phương thức service() của Servlet để xử lý yêu cầu. Trong phương thức service(), Servlet lấy thông tin client và thông tin yêu cầu thông qua đối tượng ServletRequest, đồng thời thiết lập thông tin phản hồi thông qua đối tượng ServletResponse sau khi xử lý. Ví dụ: trong Servlet xử lý các yêu cầu đăng nhập:
protected void service(HttpServletRequest request, HttpServletResponse reply) ném ServletException, IOException { // Lấy tên người dùng và mật khẩu Chuỗi tên người dùng = request.getParameter("username"); Chuỗi mật khẩu = request.getParameter("password"); Đợi xử lý logic nghiệp vụ if (isValidUser(username, pass)) { reply.getWriter().println("Đăng nhập thành công"); } else { reply.getWriter().println("Đăng nhập thất bại" } }

  • Nếu xảy ra lỗi trong quá trình thực thi phương thức service(), ServletException hoặc UnavailableException có thể được ném ra. Nếu UnavailableException chỉ ra rằng phiên bản vĩnh viễn không khả dụng, vùng chứa sẽ gọi phương thức destroy() để giải phóng phiên bản đó.
  1. Chấm dứt dịch vụ
    • Khi container phát hiện phiên bản Servlet cần được loại bỏ, nó gọi phương thức destroy() để giải phóng tài nguyên, chẳng hạn như đóng kết nối cơ sở dữ liệu, lưu dữ liệu, v.v. Ví dụ:
public void destroy() { // Logic giải phóng tài nguyên, chẳng hạn như đóng kết nối cơ sở dữ liệu if (connection!= null) { try { Connection.close() } Catch (SQLException e) { e.printStackTrace(); } siêu hủy();

  • Sau khi phương thức destroy() được gọi, container sẽ giải phóng cá thể Servlet và được trình thu gom rác Java tái chế. Nếu cần lại Servlet để xử lý các yêu cầu, vùng chứa sẽ tạo một phiên bản mới.

(3) Kiến trúc Servlet

Đặc tả Servlet hoạt động dựa trên một số lớp chính, trong đó ServletConfig, ServletRequest và ServletResponse được tự động liên kết với Servlets. ServletConfig được chuyển tới Servlet trong quá trình khởi tạo để lấy các thuộc tính cấu hình của ServletRequest và ServletResponse được chuyển tới Servlet trong quá trình xử lý yêu cầu để lấy thông tin yêu cầu và đặt thông tin phản hồi tương ứng.

Trong vùng chứa Tomcat, có một ứng dụng của mẫu thiết kế mặt tiền. Ví dụ: StandardWrapper và StandardWrapperFacade triển khai giao diện ServletConfig và những gì được chuyển đến Servlet là đối tượng StandardWrapperFacade, đảm bảo rằng Servlet thu được dữ liệu được yêu cầu mà không để lộ dữ liệu không liên quan. Tương tự, ServletContext có cấu trúc tương tự. Đối tượng thực tế thu được trong Servlet là ApplicationContextFacade, được sử dụng để lấy thông tin liên quan đến ứng dụng.

2. Sử dụng và cấu hình cơ bản Servlet

(1) Tạo lớp Servlet

Để tạo một lớp Servlet, bạn cần kế thừa lớp HttpServlet và ghi đè các phương thức tương ứng. Ví dụ: tạo một HelloWorldServlet đơn giản:

nhập javax.servlet.ServletException; nhập javax.servlet.http.HttpServlet; nhập javax.servlet.http.HttpServletRequest; nhập phần mở rộng javax.servlet.http.HttpServletResponse; HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse reply) ThrowletException, IOException { // Đặt loại nội dung phản hồi thành HTML reply.setContentType("text/html"); biểu tượng đầu ra PrintWriter out = reply.getWriter() / Xuất nội dung HTML out.println(""); out.println("

Xin chào thế giới!

"); out.println("Xem sitemap của VNExpress ");

(2) Cấu hình Servlet trong web.xml

Tệp web.xml xạ, vv Sau đây là ví dụ cấu hình của HelloWorldServlet ở trên:

 HelloWorldServlet com.example.HelloWorldServlet  lời chào Xin chào!    HelloWorldServlet /Xin chào 

(3) Mối quan hệ giữa Servlet và JSP

Cơ sở JSP là một phần mở rộng của Servlet Trang JSP sẽ được dịch sang Servlet và được thực thi khi nó được truy cập lần first. tất cả các yêu cầu có suffix là .jsp hoặc .jspx. Ví dụ: một trang JSP đơn giản:

<%@ page ngôn ngữ="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    Ví dụ về JSP   <% // Mã Java có thể được nhúng vào đây String message = "Đây là một trang JSP." 

<%=tin nhắn%> Xem sitemap của VNExpress

Xem sitemap của VNExpress

Khi trang JSP được truy cập, Tomcat sẽ dịch nó sang lớp Servlet tương ứng và thực thi nó, cuối cùng trả về nội dung HTML đã tạo cho máy Khách hàng.

3. thích chi tiết các tính năng mới của Giải thích Servlet 3.0

(1) Bộ xử lý hỗ trợ không đồng bộ

  1. Đã giải quyết được vấn đề
  2. Xử lý luồng không đồng bộ
@WebServlet(urlPatterns = "/asyncDemo", asyncSupported = true) lớp công khai AsyncDemoServlet mở rộng HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) ném IOException, ServletException { resp.setContentType("text/html;charset=UTF- 8"); PrintWriter out = resp.getWriter(); out.println("Thời gian vào Servlet: " + new Date() + "."); AsyncContext ctx = req.startAsync(); ; // Thực thi logic nghiệp vụ không đồng bộ new Thread(new AsyncTask(ctx)).start() out.println("Time to end Servlet:" + new Date() + "." ); out.flush(); } } lớp AsyncTask phát triển khai Runnable { Private AsyncContext ctx; public AsyncTask(AsyncContext ctx) { this.ctx = ctx } @Override public void run() { try { // Mô phỏng các hoạt động nghiệp vụ giá thời gian, chờ 5 giây tại đây Thread.sleep(5000); PrintWriter out = ctx.getResponse().getWriter(); out.println("Thời gian hoàn thành quá trình xử lý nghiệp vụ:" + new Date() + "."); ) { e.printStackTrace();

  1. Cấu hình phương thức

(2) New note support

  1. Cấu hình đơn giản hóa
  2. Giới thiệu về phổ biến các chú thích
@WebServlet(urlPatterns = {"/demoServlet"}, asyncSupported = true, LoadOnStartup = 1, name = "DemoServlet", displayName = "DS", initParams = {@WebInitParam(name = "param1", value = "value1") }) lớp công khai DemoServlet mở rộng HttpServlet {...}

@WebFilter(servletNames = {"DemoServlet"}, filterName = "DemoFilter") lớp công khai DemoFilter thực thi Filter {...}

@WebListener("Đây là trình nghe demo") lớp công khai SimpleListener phát triển khai ServletContextListener {...}

@MultipartConfig(fileSizeThreshold = 1024 * 1024, location = "/tmp/uploads", maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 10) @WebServlet("/uploadServlet") lớp công khai UploadServlet mở width HttpServlet {.. .}

(3) Khả năng hỗ trợ

  1. Hàm mở rộng phương thức
  2. tệp web-fragment.xml
   FragmentServlet com.example.FragmentServlet   FragmentServlet /đoạn  

  1. Tải quy tắc đặt hàng

(4) Nâng cao hiệu suất của ServletContext

  1. Triển khai và cấu hình
Bối cảnh ServletContext = getServletContext(); DynamicServlet = context.addServlet("DynamicServlet", DynamicServlet.class);

  1. Hợp tác với các giao diện và lớp liên kết

(5) Hỗ trợ HttpServletRequest cho file upload

  1. Đơn giản hóa hoạt động tải tập tin lên
@WebServlet("/upload") @MultipartConfig lớp công khai FileUploadServlet mở rộng HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse reply) ném ServletException, IOException { Part filePart = request.getPart("file"); trị) { filePart.write("/tmp/uploadedFile.txt"); reply.getWriter().println("Tep đã được tải lên thành công"); } else { reply.getWriter().println("Không có file nào được chọn tải lên"); }

  1. Cấu hình và giải pháp phòng

4. Phân tích các kịch bản, trường hợp Servlet trong ứng dụng thực tế

(1) Các kịch bản ứng dụng phổ biến trong ứng dụng web

  1. Xử lý các yêu cầu của người dùng và logic nghiệp vụ
  2. Tạo nội dung trang động

(2) Phân tích trường hợp: Sử dụng Servlet để triển khai hệ thống đăng nhập người dùng đơn giản

  1. Yêu cầu chức năng
  2. Triển khai mã
<%@ page ngôn ngữ="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    Trang đăng nhập   

Đăng nhập



Xem sitemap của VNExpress
nhập javax.servlet.ServletException; nhập javax.servlet.http.HttpServlet; nhập javax.servlet.http.HttpServletRequest; nhập javax.servlet.http.HttpServletResponse; nhập java.io.IOException; Đăng nhậpServlet mở rộng HttpServlet { @Ghi đè khoảng trống được bảo vệ doPost(HttpServletRequest request, HttpServletResponse reply) ném ServletException, IOException { // Đặt loại nội dung phản hồi thành HTML reply.setContentType("text/html"); // Lấy đối tượng luồng đầu ra PrintWriter out = reply.getWriter(); / Lấy tên người dùng và mật khẩu Chuỗi tên người dùng = request.getParameter("tên người dùng"); request.getParameter("password"); // Giả sử xác minh tên người dùng và mật khẩu đơn giản ở đây trong các ứng dụng thực tế, nó nên được so sánh với cơ sở dữ liệu if ("admin".equals(username) && "123456".equals(password)) { // Đăng nhập thành công, chuyển đến trang chào mừng reply.sendRedirect("welcome.jsp" } else { // Đăng nhập không thành công và trả về thông báo lỗi out.println(""); out.println("

Đăng nhập thất bại

"); mật khẩu.

"); out.println("Xem sitemap của VNExpress "); } } }

 LoginServlet com.example.LoginServlet   LoginServlet /đăng nhập 

<%@ page ngôn ngữ="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    Chào mừng   

Chào mừng, <%= request.getParameter("username") %>!

Xem sitemap của VNExpress

Qua trường hợp này, bạn có thể thấy ứng dụng thực tế của Servlet trong việc xử lý các yêu cầu của người dùng, xác minh danh tính người dùng và kiểm soát việc nhảy trang. Đây là một thành phần cơ bản quan trọng để xây dựng các ứng dụng Web Java. Các kịch bản ứng dụng đang chờ nhà phát triển khám phá và thực hành.

5. Tóm tắt và triển vọng

Là một trong những công nghệ cốt lõi của phát triển Web Java, Servlet đóng một vai trò không thể thay thế trong việc xử lý các yêu cầu và tạo ra phản hồi ở phía máy chủ. Từ nguyên tắc làm việc cơ bản, vòng đời đến cấu hình và cách sử dụng, đến một loạt tính năng mới do Servlet 3.0 mang lại, nó cung cấp một công cụ mạnh mẽ và linh hoạt hơn để phát triển Web Java. Trong các ứng dụng thực tế, nó được sử dụng rộng rãi trong việc xây dựng các hệ thống Web khác nhau, từ các trang web đơn giản đến các ứng dụng cấp doanh nghiệp phức tạp. Với sự phát triển không ngừng của công nghệ, Servlets cũng không ngừng phát triển. Trong tương lai có thể sẽ có nhiều đột phá hơn trong việc tối ưu hóa hiệu suất và tích hợp với các công nghệ mới nổi. các ứng dụng Web hiệu quả, ổn định. Tác giả: Lớp lập trình của thầy Đại Nguồn: https://zthinker.com/ Nếu bạn thích bài viết này, hãy nhấn và giữ mã QR để theo dõi quá trình khám phá thế giới mã Java.

Cuối cùng, bài viết tìm hiểu sâu về Servlets: từ các khái niệm cơ bản đến các tính năng nâng cao và ứng dụng thực tế sẽ kết thúc tại đây. Nếu bạn muốn biết thêm về hiểu biết sâu hơn về Servlets: từ các khái niệm cơ bản đến các tính năng nâng cao và ứng dụng thực tế, vui lòng tìm kiếm. Các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan, mong các bạn sẽ ủng hộ blog của mình trong thời gian tới! .

59 4 0
Bài viết khuyến nghị: Theo dõi cơ sở dữ liệu nguồn mở của 8.6kStar và tham gia RAG!
Bài viết khuyến nghị: Manim vừa học vừa làm - biến đổi đồng luân
Bài viết khuyến nghị: Công cụ kiểm tra và gỡ lỗi VisualStudio-API ​​File HTTP
Bài viết khuyến nghị: Giải thích chi tiết về cây đoạn cổ điển: từ nguyên lý đến thực hành
sa mạc Sahara
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất xuất sắc!

Nhận phiếu giảm giá taxi Didi miễn phí
taxi giảm giá Didi
Các bài viết phổ biến trên toàn bộ trang web
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com