[Servlet/JSP] Lập trình Java Servlet cơ bản P3: Servlet Url Pattern
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.
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 | |
*.map | http://example.com/contextPath/status/abc.map |
http://example.com/contextPath/status.map?date=today | |
/ | Đâ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 WebContainer. WebContainer 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/*).
- http://localhost:8080/ServletTutorial/any/path1/a.html
- http://localhost:8080/ServletTutorial/any/something
- http://localhost:8080/ServletTutorial/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
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!