2012-09-04 67 views
0

響應我有有一個形式,在提交調用servlet從數據庫中獲取一些數據的JSP頁面。取所有需要的數據後,我需要構建一個URL中的所有數據,並從該處理數據並返回一個字符串響應其他站點調用JSP頁面。然後我必須解析響應並在UI上顯示適當的消息。調用另一個網站jsp頁面,並獲得從該頁面

我試着使用HttpURLConnection類調用從數據訪問層的JSP頁面,但我得到HTTP 505 error

try{ 
    URL url = new URL(mainURL+urlSB.toString()); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestMethod("GET"); 
    connection.setDoOutput(true); 
    connection.connect(); 
    InputStreamReader isr = new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")); 
    BufferedReader br = new BufferedReader(isr); 
    String htmlText = ""; 
    String nextLine = ""; 
    while ((nextLine = br.readLine()) != null){ 
     htmlText = htmlText + nextLine; 
    } 
    System.out.println(htmlText); 
}catch(MalformedURLException murle){ 
    System.err.println("MalformedURLException: "+ murle.getMessage()); 
}catch(IOException ioe){ 
    System.err.println("IOException: "+ ioe.getMessage()); 
} 

然後我得到的URL servlet和使用request.getRequestDispatcher(url).include(request, response)和我得到javax.servlet.ServletException: File "/http:/xxxx:8090/test/create.jsp" not found

其他網站正在運行,我已經證實。我沒有訪問其他網站,所以我無法調試它。

任何一個可以解釋什麼是錯的或者什麼,我缺少什麼?

回答

2

ServletRequest#getRequestDispatcher()不接受諸如http://example.com之類的URL,但是僅包含相對web內容路徑,例如/WEB-INF/example.jsp

使用HttpServletResponse#sendRedirect()代替:

response.sendRedirect(url); 

然而,這顯示了其全部的資源。當你正在使用RequestDispatcher#include(),你似乎要包括它的輸出(這使得但是沒有多大意義在此背景下,但除外)。另一種方法是在JSP中使用<c:import>。因此,在你的servlet:

request.setAttribute("url", url); 
request.getRequestDispatcher("/WEB-INF/your.jsp").forward(request, response); 

/WEB-INF/your.jsp

<c:import url="${url}" /> 
+0

感謝您的快速回復。但是,如果我執行'response.sendRedirect',那麼控件將傳遞到新的JSP頁面。我想要的是當JSP的處理完成時,它會向我發送一個我想要捕獲的字符串響應。使用sendRedirect我該怎麼做? – Natraj

+0

然後使用''。否則,只需在其上創建另一個「URLConnection」。 – BalusC

+0

使用不適用於我。讓我詳細解釋一下。我有站點x,它接受來自用戶的輸入並通過創建URL將數據傳遞給站點y。部位Y將數據插入到數據庫,並給我一個ID,或者如果發生在一個錯誤都會給我錯誤信息,如「AUTH_FAILED」字符串。 – Natraj

相關問題