2009-12-15 58 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