2012-01-24 15 views
0

私の教育用JSPプロジェクト(サーブレット、Java EE)では、Javaでデータベースを実装する必要があります。インデックスページでは、データベース(MySQLではなく、オブジェクトへのリンクを含むHashMapベースの構造)を構築するための関数を実行し、基本データで埋めます。私の問題は、この "データベース"をグローバルにすることができず、サイトのすべてのページからこの構造にアクセスできないことです。この構造体へのポインタ/リンクをすべてのJSPサイトのページに渡すにはどうすればよいですか?JSPプロジェクトのグローバル変数構造(DB)

+1

なぜあなたはmですか?それはグローバルですか?なぜあなたはこれをこのように実装しなければならないのですか? –

+0

これは小さなプロジェクトではなく、私のものではなく、私が必要とするのは、このような問題を修正することです。ユーザーはグローバルHashMapにアクセスできず、どのページからでもクエリを実行できません。 –

答えて

1

webappの起動時にサーブレットコンテキスト属性として設定します。これにはServletContextListenerを使用できます。

@WebListener 
public class DatabaseConfigurator implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     Map<String, Object> database = new HashMap<String, Object>(); 
     event.getServletContext().setAttribute("database", database); 
    } 

    // ... 
} 

次のようにそれはすべてのサーブレットで利用可能です:

Map<String, Object> database = (Map<String, Object>) getServletContext().getAttribute("database"); 
// ... 

次のようにそれはすべてのJSPでavailablewです:

${database} 

(マップ値は、マップのキーによって提供されています通常のELは${map.key}のようになります)

1

servletを書き、データベースから結果を取り込み(リストを準備する)、その結果をリクエストの属性(またはセッション属性)にバインドして、RequestDispatcher経由でJSPに転送します。 JSPでは、ELJSTLを使用してそのリストを反復することができます。