Làm cách nào để lấy URL yêu cầu từ Bộ lọc Java?


80

Tôi đang cố gắng viết một bộ lọc có thể truy xuất URL yêu cầu, nhưng tôi không chắc làm như vậy.

Đây là những gì tôi có cho đến nay:

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyFilter implements Filter {
    public void init(FilterConfig config) throws ServletException { }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        chain.doFilter(request, response);

        String url = ((HttpServletRequest) request).getPathTranslated();
        System.out.println("Url: " + url);
    }

    public void destroy() { }
}

Khi tôi truy cập một trang trên máy chủ của mình, đầu ra duy nhất tôi thấy là "Url: null".

Cách chính xác để lấy URL được yêu cầu từ một đối tượng ServletRequest đã cho trong Bộ lọc là gì?

Câu trả lời:


183

Đây có phải là những gì bạn đang tìm kiếm?

if (request instanceof HttpServletRequest) {
 String url = ((HttpServletRequest)request).getRequestURL().toString();
 String queryString = ((HttpServletRequest)request).getQueryString();
}

Để tái tạo:

System.out.println(url + "?" + queryString);

Thông tin trên HttpServletRequest.getRequestURL()HttpServletRequest.getQueryString().


5
getRequestURL()trả lại StringBuffer, không String.
BalusC

1
Tốt hơn là xem xét mô hình null queryString.
Kazuhiro Sera

3
nếu bạn muốn phần " blabla: 8080 " bị loại bỏ cho bạn, getRequestURI () ('I' not 'l') trả về một Chuỗi bắt đầu bằng "/"
Alexander Taylor.

Nếu bạn chỉ muốn đường dẫn đến servlet mà bạn có thể sử dụng request.getServletPath(), nó hữu ích trên JavaServer Faces để truy xuất phần tương đương của id chế độ xem (đường dẫn từ gốc ứng dụng web đến trang xhtml, ngoại trừ miền, tiền tố triển khai, v.v.)
José Roberto Araújo Júnior

4

Xây dựng trên một câu trả lời khác trên trang này ,

public static String getCurrentUrlFromRequest(ServletRequest request)
{
   if (! (request instanceof HttpServletRequest))
       return null;

   return getCurrentUrlFromRequest((HttpServletRequest)request);
}

public static String getCurrentUrlFromRequest(HttpServletRequest request)
{
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();

    if (queryString == null)
        return requestURL.toString();

    return requestURL.append('?').append(queryString).toString();
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.