Mình đã hướng dẫn các bạn cách Lấy base URL trong trang JSP và Lấy base URL trong Controller trong Spring MVC và Spring Boot. Ngoài những cách trên, để có thể lấy base URL của ứng dụng Java web từ bất kỳ nơi đâu, các bạn cũng có thể sử dụng đối tượng của class HttpServletRequest như sau:
1 2 3 |
String baseUrl = req.getRequestURL() .substring(0, req.getRequestURL().length() - req.getRequestURI().length()) + req.getContextPath(); |
Phương thức getRequestURL() sẽ trả về full request URL không bao gồm query string mà user request tới ứng dụng.
Ví dụ nếu user request tới URL http://localhost:8080/hello thì phương thức getRequestURL() sẽ trả về giá trị là “http://localhost:8080/hello” đó các bạn! Nếu user request tới http://localhost:8080/hello?a=1 thì phương thức getRequestURL() cũng sẽ chỉ trả về giá trị http://localhost:8080/hello thôi nha các bạn.
Phương thức getRequestURI() sẽ trả về một phần của request URL sau địa chỉ host, port, không bao gồm query string đó các bạn.
Cho ví dụ trên thì phương thức getRequestURI() sẽ trả về là “/hello”.
Phương thức getContextPath() thì dành để lấy đường dẫn, thông thường là thư mục deploy của ứng dụng.
Thông thường các ứng dụng sẽ được deploy sử dụng context path là root, trong trường hợp này thì giá trị của context path trả về sẽ là empty. Như ví dụ trên của mình thì context path sẽ là empty đó các bạn!
Một số ứng dụng được deploy lên JBoss hay Tomcat, để access được tới ứng dụng, chúng ta cần phải include luôn tên của thư mục deploy ứng dụng, ví dụ như http://localhost:8080/jakarta-ee/hello. Trong trường hợp này, context path sẽ là “jakarta-ee” đó các bạn.
Base URL mà chúng ta cần lấy sẽ bao gồm protocol, host, port và context path nên như các bạn thấy trong đoạn code lấy baseURL ở trên, chúng ta cần remove giá trị của request URI trong request URL trước, sau đó thì cộng với context path thì sẽ lấy được giá trị của base URL.
Nếu bây giờ các chạy ví dụ sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package com.huongdanjava.jakartaee.servlet; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/hello") public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { String baseUrl = req.getRequestURL() .substring(0, req.getRequestURL().length() - req.getRequestURI().length()) + req.getContextPath(); // Writing the message on the web page PrintWriter out = resp.getWriter(); out.println(baseUrl); } } |
các bạn sẽ thấy kết quả như sau: