如何解析JSP页面并将结果作为String?

时间:2011-10-18 16:02:42

标签: jsp rest servlets

我有一个在自制REST框架中返回Representation的FrontController。我有一些XmlRepresentation,JsonRepresentation,我现在想要一个JspRepresentation。 UserJspRepresentation可以用于表示用户的页面或片段。然后,Jsp将是可以使用

的模板

我可以做一些前进/包含的东西,但我想要一些更孤立的东西,并将结果作为一个对象。 forward()方法返回void。

类似的东西:

HttpServletRequest request = getHttpServletRequest();
User user = getUser();
request.setAttribute("user", user); // The Jsp will be aware of the user
JspRepresentation representation = new JspRepresentation(request, "userPage.jsp");
String result = representation.toString();// this is hard to get the displayed page !!!

问题是:如何将Jsp页面作为String对象?

现在我只能考虑使用一个非轻量级的java客户端...我也查看了Jasper API,但没有发现任何明确的内容。

1 个答案:

答案 0 :(得分:1)

你做不到。 JSP不是模板引擎。这只是一种视图技术。您正在寻找模板引擎,例如VelocityFreemarkerSitemesh等。

使用JSP可以做的最好的事情就是自己向具体的URL发送一个完整的HTTP请求。

InputStream input = new URL("http://localhost:8080/context/userPage.jsp").openStream();
// ...

您只能将请求属性传递给它。但是,您可以将其放入会话中,让JSP从那里检索它。您只需要发送JSESSIONID cookie:

URLConnection connection = new URL("http://localhost:8080/context/userPage.jsp").openConnection();
connection.setRequestProperty("Cookie", "JSESSIONID=" + session.getId());
InputStream input = connection.getInputStream();
// ...

或者,您也可以将请求转发到JSP“通常的方式”,而不是将其HTML输出作为String并自己将其写入响应。这样,JSP就可以根据当前请求生成HTML并将其发送到响应,而无需收集HTML并自行写入响应。

request.getRequestDispatcher("/WEB-INF/userPage.jsp").forward(request, response);