4

Java と Spring MVC を使用してアプリケーションを開発しています。いつものように、すべてのリクエストのビューとして機能する /WEB-INF/view/ フォルダーに 1 つの JSP ファイルを保存します。

通常、この JSP はハードコーディングされており、モデル (タグと EL) を処理するためのコードも含まれています。この時点までは問題なく動作しています。

ここで、JSP をハードコーディングする代わりに、この JSP ファイルをデータベースから動的に取り込みたいと考えています。したがって、ユーザーはさまざまなテンプレート/テーマ/レイアウトをアップロードして選択し、自分のページを表示できます。

これが私がやろうとしていることを説明するコードです(これは方法ではなく、説明のみを目的としていることはわかっています)。

/WEB-INF/views/index.jsp

<%@ page import="com.example.domain.Template" %>
<%@ page import="com.example.dao.TemplateStore" %>

<!-- Following code is supposed to return complete JSP template from the database as uploaded by the user. -->

<%= TemplateStore.getUserTemplate("userTemplate") %>

このトピックについて Web を検索しましたが、何も見つかりませんでした。

これを達成する方法についての助けをいただければ幸いです。

前もって感謝します。

重要: 私は数日前にこの質問をしましたが、一部のメンバーによって「トピック外」とマークされました。この質問がトピックから外れていることをまだ理解していません- https://stackoverflow.com/questions/18026092/creating-content-of-jsp-views-in-web-inf-views-dynamically-from-the -データベース.

4

2 に答える 2

3

ビュー テンプレートをデータベースから動的に取得する場合は、JSP について考える必要はありません。JSP はサーブレット クラスにコンパイルされますが、標準的な方法 (Web アプリケーション ルートの下のどこかにある静的ファイル) 以外にはほとんどサポートされていません。

したがって、ビュー テクノロジを (少なくとも動的部分については) VelocityFreemarkerなどの汎用テンプレート ライブラリに切り替えることを検討してください。これには、JSP コード内よりもそのようなテンプレート内からブレークできるものが少ないため、セキュリティ ボーナスが付属しています。

複数のビュー テクノロジー (おそらく、JSP を除いて Spring MVC がすぐにサポートするもの) をサポートし、ユーザーがアップロード時にテンプレートのタイプを選択できるようにすることもできます。

次に、ユーザーが選択したテンプレートを使用して、適切な標準リゾルバー (Velocity、Freemarker、XSLT など) に委任するカスタム ビュー リゾルバーを作成できます。

ただし、JSP が難しい要件である場合、JSP (どのサーブレット コンテナーでも機能するはずです) の醜い回避策の 1 つは、DB からコンテンツをフェッチし、展開されたWEB-INF/templates/${primarky-key}.jspwebapp ルートの下に実際のファイル (のような)を作成するRequestDispatcher.forward()ことであると思います。 .

于 2013-08-09T07:27:53.653 に答える