Networking Java Servlet请求。getRequestURL()记录了异常字符串

Networking Java Servlet请求。getRequestURL()记录了异常字符串,networking,servlets,Networking,Servlets,在我的一个在公共域中运行的servlet中,我从request.getRequestURL()方法获得了一个异常字符串日志。我一直记录详细信息,发现一个条目是“http://answers.yahoo.com". 有人能帮我分析一下这是怎么发生的,以及如何实现的吗。理想情况下,日志应该是浏览器中的URL地址,用户或设备使用该地址调用servlet 例如,如果映射到IP的服务器的注册名称为,那么日志应该是alphabeta.com您到底想记录什么 如果您只需要主机名,请使用接口javax.serv

在我的一个在公共域中运行的servlet中,我从request.getRequestURL()方法获得了一个异常字符串日志。我一直记录详细信息,发现一个条目是“http://answers.yahoo.com". 有人能帮我分析一下这是怎么发生的,以及如何实现的吗。理想情况下,日志应该是浏览器中的URL地址,用户或设备使用该地址调用servlet


例如,如果映射到IP的服务器的注册名称为,那么日志应该是alphabeta.com

您到底想记录什么

如果您只需要主机名,请使用接口javax.servlet.ServletRequest中的方法
getServerName()
。它返回请求发送到的服务器的主机名

如果要获取URL而不包含servlet导致的任何参数,请与
getServerName()
和方法
getServletPath()
结合使用。接口
javax.servlet.http.HttpServletRequest
中的方法
getServletPath()
返回该请求的URL中调用servlet的部分,但不包括任何额外的路径信息或查询字符串

下面的代码片段将确定页面的绝对URL:

String uri = request.getRequestURI();
if (request.getQueryString() != null) {
   uri += '?' + request.getQueryString();
}
URL reconstructedUrl = new URL(request.getScheme(),
                           request.getServerName(),
                           request.getServerPort(),
                           uri);
logger.info("The full URL: " + reconstructedUrl.toString());

其中
URL
类来自包
java.net

我想OP想知道如何伪造请求URL,这似乎就是这里发生的事情。您不喜欢我对这个问题的解决方案吗?您问“您到底想要什么?”-我以为OP想知道如何欺骗从getRequestURL返回的URL。我只是想帮忙。请忽略我的评论。非常感谢Andrey提供详细信息。感谢Disco强调欺骗问题。正如迪斯科提到的URl欺骗一样,我也想知道欺骗是如何发生的。请提供这方面的一些细节。