0
我正在JSP中編寫一個應用程序,需要與遠程cgi進行交互,這會爲其提供一些數據。需要幫助用JSP調用遠程服務器
是否有一個JSP特定的方式來做到這一點,而不是簡單地使用httpConnection庫和閱讀比特流?
我正在JSP中編寫一個應用程序,需要與遠程cgi進行交互,這會爲其提供一些數據。需要幫助用JSP調用遠程服務器
是否有一個JSP特定的方式來做到這一點,而不是簡單地使用httpConnection庫和閱讀比特流?
您可以使用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>
如果您在我的答案中單擊'c:import'鏈接,您會發現tlddoc,其中聲明可以將其存儲在'var'字符串中。 – BalusC 2009-12-15 18:31:23