2011-10-18 53 views
2

我有一個FrontController,它在自制的REST框架中返回Representation。我有一些XmlRepresentation,JsonRepresentation,我現在想要一個JspRepresentation。一個UserJspRepresentation可以用來表示用戶的頁面或片段。那麼一個JSP將是可以使用如何解析JSP頁面並以String結果得到結果?

我可以做一些前瞻性/包括的東西模板,但我想的東西更加孤立,並得到結果作爲對象。 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客戶端,這是不是輕量級的......我也看了碧玉API中,但什麼也沒有發現明顯的。

回答

1

你不能。 JSP不是模板引擎。這只是一種視圖技術。您正在尋找一個模板引擎像VelocityFreemarkerSitemesh

最好的你可以使用JSP做的就是發送fullworthy HTTP請求到它的具體URL自己。

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

您只能將請求屬性傳遞給它。但是,您可以將它放在會話中並讓JSP從此處檢索它。你只需要沿着發送JSESSIONID餅乾:

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); 
+0

據我所知,JSP規範不允許在給定的JSP引擎內部,必須有一種方法來創建文檔。 很顯然,我將不得不放棄我JspRepresentation,因爲我不想擰緊,以一種特定的技術。 –

+0

維基百科:「JSP已被棄用遺留回落」 –

+0

當你使用JSF框架,是的。而不是當你使用純JSP沒有JSF或與如Struts,Spring MVC的,等更多細節另一個框架:http://stackoverflow.com/questions/4845032/wheres-the-official-jsp-tutorial/4847062 #4847062 – BalusC