Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java筛选器获取请求URL?_Java_Url_Servlet Filters - Fatal编程技术网

如何从Java筛选器获取请求URL?

如何从Java筛选器获取请求URL?,java,url,servlet-filters,Java,Url,Servlet Filters,我正在尝试编写一个可以检索请求URL的过滤器,但我不确定如何执行 以下是我到目前为止的情况: import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; public class MyFilter implements Filter { public void init(FilterConfig config) throws ServletExcept

我正在尝试编写一个可以检索请求URL的过滤器,但我不确定如何执行

以下是我到目前为止的情况:

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() { }
}
当我点击服务器上的页面时,我看到的唯一输出是“Url:null”

从过滤器中给定的ServletRequest对象获取请求的URL的正确方法是什么

request.getRequestURL();   

    • 这就是你要找的吗

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

      System.out.println(url + "?" + queryString);
      
      和的信息。

      基于


      如果使用Spring,则可以使用
      OncePerRequestFilter
      或其他

      import org.springframework.web.filter.OncePerRequestFilter;
      导入org.springframework.stereotype.Component;
      @组成部分
      公共类MyFilter扩展了OncePerRequestFilter{
      @凌驾
      受保护的void doFilterInternal(HttpServletRequest请求、HttpServletResponse响应、FilterChain FilterChain)抛出ServletException、IOException{
      字符串url=request.getRequestURL();
      filterChain.doFilter(请求、响应);
      }
      }
      
      <代码> GETRealesturrl()/Case>返回代码> StringBuffer < /代码>,而不是<代码>字符串< /代码>。最好考虑NULL代码> QuetryString < /C>的模式。如果您希望“被删除的部分”,GETRealesturi()不返回一个以“/”开头的字符串。如果只需要servlet的路径,可以使用
      request.getServletPath()
      ,在JavaServer Faces上检索视图id的等价物(从webapp根目录到xhtml页面的路径,不包括域、部署前缀等)非常有用。ServletRequest不实现getRequestURL()。如果可能的话,您需要根据Buhake的回答将其转换为HttpServletRequest,因为它缺少参数
      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();
      }