2009-12-15 26 views
0

我正在JSP中編寫一個應用程序,需要與遠程cgi進行交互,這會爲其提供一些數據。需要幫助用JSP調用遠程服務器

是否有一個JSP特定的方式來做到這一點,而不是簡單地使用httpConnection庫和閱讀比特流?

回答

1

您可以使用JSTL<c:import>標記從JSP頁面中的外部資源導入響應數據。

<c:import url="http://example.com/some.cgi" /> 

但是,如果這返回一個完整的HTML頁面,你只需要一個特定的部分,那麼你真的需要做更多的工作。最好的辦法是創建一個Servlet類,它在將請求轉發到JSP頁面之前預處理這些數據。您可以使用java.net.URL從它獲得一個InputStream,您將其提供給HTML解析器以從中獲取必要的信息。這裏有一個簡單的例子:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    InputStream input = new URL("http://example.com/some.cgi").openStream(); 
    String relevantData = parseHtml(input); // Do your thing here. Maybe with help of jTidy? 
    request.setAttribute("data", data); 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

,然後在JSP剛剛訪問data通過EL

<p>Relevant data: ${data}</p> 

編輯:根據意見,你需要<c:import>var屬性組合。然後,您可以使用fn:split()拆分獲得的key:value字符串。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 

<c:import url="http://example.com/some.cgi" var="result" /> 
<c:set value="${fn:split(result, ':')}" var="parts" /> 
key: ${parts[0]}<br> 
value: ${parts[1]}<br> 
+0

看起來像它會做的伎倆。事實上,cgi返回一個key:val字符串。所以,唯一需要注意的是我需要能夠將這個結果加載到一個字符串中,然後我可以使用它......是可行的還是隻願意將結果打印到頁面上? – 2009-12-15 17:59:35

+0

如果您在我的答案中單擊'c:import'鏈接,您會發現tlddoc,其中聲明可以將其存儲在'var'字符串中。 – BalusC 2009-12-15 18:31:23