[Servlet/JSP] Lập trình Java Servlet cơ bản P3: Servlet Url Pattern

Đăng bởi: Admin | Lượt xem: 8448 | Chuyên mục: Servlet/JSP

Trong bài viết này chúng ta cùng tìm hiểu về Servlet URL Pattern, những cách để cấu hình một đường dẫn cho Servlet cùng với những ví dụ minh họa về Servlet Url Pattern.


Để thực hiện được ví dụ này, bạn cần đọc và làm những hướng dẫn trong các bài viết trước.

1. Tạo WebProject đầu tiên

2. Cấu hình eclipse

3. Tạo và chạy Servlet đầu tiên

Xem bài viêt trước tại đây

1. Servlet Url Pattern

Có 4 cách để cấu hình một đường dẫn cho Servlet:

URL Pattern Ví dụ
/* http://example.com/contextPath
http://example.com/contextPath/status/abc
/status/abc/* http://example.com/contextPath/status/abc
http://example.com/contextPath/status/abc/mnp
http://example.com/contextPath/status/abc/mnp?date=today
http://example.com/contextPath/test/abc/mnp
*.map http://example.com/contextPath/status/abc.map
http://example.com/contextPath/status.map?date=today
http://example.com/contextPath/status/abc.MAP
/ Đây là Servlet mặc định.

Khi người dùng nhập vào một đường dẫn trên trình duyệt, nó sẽ được gửi tới WebContainerWebContainer cần phải quyết định xem Servlet nào sẽ phục vụ yêu cầu này từ phía người dùng.

Hình dưới đây minh họa cách WebContainer quyết định sử dụng Servlet nào để phục vụ yêu cầu từ Client.

Ví dụ tạo một Servlet với url-pattern có dấu hoa thị, chẳng hạn:

  • url-pattern = "/any/*";

AsteriskServlet.java

package org.o7planning.tutorial.servlet;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet(urlPatterns = { "/any/*" })
public class AsteriskServlet extends HttpServlet {
 
    private static final long serialVersionUID = 1L;
 
    public AsteriskServlet() {
    }
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        ServletOutputStream out = response.getOutputStream();
 
        out.println("<html>");
        out.println("<head><title>Asterisk</title></head>");
 
        out.println("<body>");
 
        out.println("<h3>Hi, your URL match /any/*</h3>");
 
        out.println("</body>");
        out.println("<html>");
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
 
}

Các URL có dạng sau đều được phục vụ bởi AsteriskServlet (/any/*).

Servlet mặc định:

Servlet với url-pattern = /

Là một servlet mặc định, servlet  này sẽ được sử dụng để xử lý các yêu cầu (request) mà có đường dẫn không khớp với bất kỳ một url-pattern nào của các Servlet khác được khai báo trong ứng dụng của bạn.

Hãy xem một ví dụ minh họa với Servlet mặc định:

MyDefaultServlet.java

package org.o7planning.tutorial.servlet;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet(urlPatterns = { "/" })
public class MyDefaultServlet extends HttpServlet {
 
   private static final long serialVersionUID = 1L;
 
   public MyDefaultServlet() {
   }
 
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
 
       ServletOutputStream out = response.getOutputStream();
 
       out.println("<html>");
       out.println("<head><title>Page not found</title></head>");
 
       out.println("<body>");
       out.println("<h3>Sorry! Page not found</h3>");
       out.println("<h1>404</h1>");
       out.println("Message from servlet: " + this.getClass().getName());
       out.println("</body>");
       out.println("<html>");
   }
 
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       this.doGet(request, response);
   }
 
}

Bạn có thể chạy lại ứng dụng web, và truy cập đường dẫn:

Đường dẫn ở trên có servletPath = /news/tomAndJerry, không khớp với đường dẫn của Servlet nào bạn đã khai báo. Khi đó "Servlet mặc định" sẽ phục vụ request này.

Xem hướng dẫn tiếp theo tại đây

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Servlet/JSP