java - 有没有办法在过滤器中获取带有参数的原始请求 URL 而无需重建

标签 java servlets servlet-filters

我在 Java EE 项目中有一个 servlet Filter,需要获取原始请求 url 和 URL 参数。我目前正在使用以下代码重建原始 URL,但这感觉完全错误:

StringBuilder urlBuilder = new StringBuilder(req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath());
if(req.getParameterMap() != null && req.getParameterMap().size() > 0) urlBuilder.append("?"+getParameterString(req.getParameterMap()));

private StringBuilder getParameterString(Map<String, String[]> params){
    StringBuilder sb = new StringBuilder("");
    for(String key : params.keySet()){
        for(String param : params.get(key)){
            sb.append(String.format("%s=%s&", key, param));
        }
    }
    return sb;
}

我真正想做的是类似以下的事情:

req.getUrlWithParams()

这看起来更好,因为我有效地撤消了 servlet 容器解析参数的操作,而我真正想做的就是接收未解析的原始 URL。

最佳答案

如果您的请求对象是 HttpServletRequest 的实例,你可以这样做。

if (req instanceof HttpServletRequest) {
    HttpServletRequest httpReq = (HttpServletRequest) req;
    StringBuffer url = httpReq.getRequestURL();
    if (httpReq.getQueryString() != null) {
        url.append("?");
        url.append(httpReq.getQueryString());
    }
    String urlString = url.toString();
}

关于java - 有没有办法在过滤器中获取带有参数的原始请求 URL 而无需重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359520/

相关文章:

servlets - Servlet 过滤器和 Jersey 过滤器有什么区别?

java - 在哪里查看哪个 JXBrowser 和 Selenium 匹配的版本?

java - 我如何使代码中的线条在 Canvas 的墙壁之间反弹?

java - 调用 ServletOutputStream.close() 后我应该做繁重的工作吗?

java - 长时间关机时如何处理servlet请求

java - ThreadLocal 是否优于 HttpServletRequest.setAttribute ("key", "value")?

java:等到另一个线程执行一条语句n次

java - 没有 onActivityResult 的 Activity 之间的 Android 通信

java - 是否可以在 tomcat servlet 中禁用 jsessionid?

java - 过滤器未检索 request.getAttribute()