2011-10-18 20 views
2

私は手作りのRESTフレームワークでRepresentationを返すFrontControllerを持っています。私はいくつかのXmlRepresentation、JsonRepresentationを持っており、今はJspRepresentationが欲しいです。 UserJspRepresentationは、UserまたはUserを表すページまたはフラグメントを表すことができます。 Jspは、使用できるテンプレートになります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 !!! 

質問です:どのようにStringオブジェクトとしてJSPページを取得するには?

今のところ私は軽量ではないJavaクライアントの使用を検討することができます...私はJasper APIも見てきましたが、何も分かりませんでした。

答えて

1

できません。 JSPはテンプレートエンジンではありません。それは単なるビュー技術です。 VelocityFreemarkerSitemeshなどのテンプレートエンジンを探しています。

JSPでできることは、完全なHTTPリクエストを自分で具体的なURLに送信することです。

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

リクエスト属性を渡すことはできません。しかし、それをセッションに入れて、そこからJSPに取得させることができます。あなたもだけではなく、StringとしてのHTML出力を取得し、レスポンス自分自身にそれを書くのJSPに「いつもの道を」要求を転送することができ、また

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

:あなただけに沿ってJSESSIONIDクッキーを送信する必要があります。このようにして、JSPは現在のリクエストに基づいてHTMLを生成し、そのHTMLを収集しレスポンスに自分自身で書き込む必要なしにレスポンスに送信します。

+0

私は、JSP仕様ではそのことはできませんが、特定のJSPエンジン内ではどこかでドキュメントを作成する方法が必要であることを理解しています。 明らかに、私は特定の技術に縛られたくないので、私はJspRepresentationを放棄しなければならないでしょう。 –

+0

wikipediaより: "JSPは従来のフォールバックとして非難されています" –

+0

JSFフレームワークを使用しているときは、そうです。 JSFを使用せずに純粋なJSPを使用している場合や、Struts、Spring MVCなどの別のフレームワークと組み合わせて使用​​している場合はありません。詳細:http://stackoverflow.com/questions/4845032/wheres-the-official-jsp-tutorial/4847062 #4847062 – BalusC

関連する問題