我有一个在自制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,但没有发现任何明确的内容。
答案 0 :(得分:1)
你做不到。 JSP不是模板引擎。这只是一种视图技术。您正在寻找模板引擎,例如Velocity,Freemarker,Sitemesh等。
使用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);