需要帮助用JSP调用远程服务器

时间:2009-12-15 05:28:14

标签: jsp

我正在JSP中编写一个应用程序,需要联系一个远程cgi,它将为它提供一些数据。

是否有一种特定于JSP的方法可以做到这一点,而不是简单地使用httpConnection库和读取比特流?

1 个答案:

答案 0 :(得分: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中只需通过EL访问data

<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>