2017-03-18 11 views
0

私はレストランでモックプロジェクトをやっているので、データベースからレストランのリストを表示する必要があります。メインページからサーブレットのレストランリストページへのリンクと、すべてのレストランを手に入れる方法getRestaurantListがあります。ユーザーがこのリンクをクリックすると、レストランページにすべてのレストランが表示されます。ここで私はリストを表示するために使用します。いつも表示するようにjspを設定する

サーブレット

String action = request.getParameter("action"); 
DataProcess dt = new DataProcess(); 
List<Restaurant> rlist = new ArrayList<Restaurant>(); 
if("RestaurantList".equalsIgnoreCase(action)) 
{ 
    rlist = dt.getRestaurantList(); 
    HttpSession session = request.getSession(); 
    session.setAttribute("rlist", rlist); 
    response.sendRedirect("RestaurantList.jsp"); 
} 

RestaurnatList.jsp

<c:forEach var="r" items="${sessionScope.rlist}"> 
    <div class="row"> 
     <div class="col-md-7"> 
      <a href="Restaurant.jsp"> 
       <img class="img-responsive img-hover" src="${r.picture}" alt=""> 
      </a> 
     </div> 
     <div class="col-md-5"> 
      <h3>${r.restName}</h3> 
      <h4>${r.phone}</h4> 
      <p>${r.address}</p> 
      <a class="btn btn-primary" href="Restaurant.jsp">View Restaurant</i></a> 
     </div> 
    </div> 
    <!-- /.row --> 

    <hr> 
</c:forEach> 

これだけで、その特定のセッションでは、レストランのリストを表示することを可能に。ユーザーがURLを直接入力すると、表示するレストランはありません。常にユーザーがページを入力するたびに、データベースからレストランリストが表示されるように、アプリケーションライフサイクルから常にレストランリストの変数を設定する方法はありますか?

答えて

0

restaurantListapplicationコンテキストスコープに設定する必要があります。サーバーがシャットダウンするまで(すべてのユーザーセッションにわたって)サーバーの起動から利用できるようにします。 JSPページでは

<web-app ...> 
    <listener> 
    <listener-class> 
      com.myproject.MyProjectContextListener 
     </listener-class> 
    </listener> 
</web-app> 

public class MyProjectContextListener implements ServletContextListener{ 

    @Override 
    public void contextInitialized(ServletContextEvent context) { 
     //query from database and create rlist and then add to context object 
     context.setAttribute("rlist", rlist); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent context) { 

    } 
} 

は、あなたのweb.xmlにリスナクラスを追加します。

は次のServletContextListenerを追加

<c:forEach var="r" items="${applicationScope.rlist}"> 
<!-- add other code as is --> 

サーブレットをコールしてコンテキストスコープを設定するにはどうすればいいですか?サーバーを起動すると が自動的に設定されますか?

contextInitialized()このメソッドは、アプリケーションの起動時にサーバーによって自動的に呼び出されるため、サーブレットを呼び出す必要はありません。

+0

これは正解ですが、コンテキストスコープを設定するようにサーブレットを呼び出す方法は?サーバーの起動時に自動的に設定されますか? – user3676506

+0

私の答えが更新されましたので、一見することができます – developer

0

JSPページにリダイレクトしないでください。あなたはリダイレクト決してあなたがrequestScope代わりのsessionScope

このソリューションを使用することができますサーブレットによって

RequestDispatcher rd = context.getRequestDispatcher("RestaurantList.jsp"); 

をページをdispachそして、あなたのJSPページで

のみ要求スコープに
request.setAttribute("rlist", rlist); 

をリストに入れなければなりませんJSPページに追加します。 JSPページはブラウザのナビゲーションバーには表示されません(コンテンツのみ)。ユーザーはブックマークのみできますhttp://yourhost/context?action=RestaurantList

+0

これは問題を解決していないようです。アプリケーションがRestaurantList.jspから開始しても、リストを表示する必要があります – user3676506

関連する問題