我正在JSP中编写一个应用程序,需要联系一个远程cgi,它将为它提供一些数据。
是否有一种特定于JSP的方法可以做到这一点,而不是简单地使用httpConnection库和读取比特流?
答案 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>