2012-05-08 38 views
1

在我的一個運行在公有領域的servlet中,我從request.getRequestURL()方法中得到了一個異常的字符串日誌。我不斷記錄詳細信息,並找到一個條目「http://answers.yahoo.com」。有人能幫助我分析如何發生這種情況,以及如何實現它。理想情況下,日誌應該是用戶或設備調用servlet的瀏覽器中的URL地址。Java Servlet request.getRequestURL()記錄異常字符串

例如,如果映射到IP服務器的註冊名稱爲http://www.alphabeta.com/x_serv?a=2,日誌應該是alphabeta.com

回答

0

你到底要記錄什麼?

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

getServerName()和方法getServletPath()結合使用,如果您想獲取沒有任何由您的servlet引起的參數的URL。來自接口javax.servlet.http.HttpServletRequest的方法getServletPath()返回此請求的調用servlet的URL的一部分,但不包含任何額外的路徑信息或查詢字符串。

而下面的代碼片段將決定你的頁面的絕對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

+0

我認爲OP想知道如何欺騙請求url,這似乎是在這裏發生的事 –

+0

你不喜歡我對這個問題的解決方案嗎? – kapand

+0

你問「你到底想要什麼?」 - 我以爲OP想知道如何欺騙從getRequestURL返回的URL。我只是想幫忙。請忽略我的評論。 –