2012-03-16 15 views
0

私はサーバー側のプログラミングには新しく、単純なサーブレット/ JSPプログラムを作成しています。 サーブレット部分は、URLからパラメータを取得してマップに保存する必要があり、jsp部分はマップを読み込んでその内容をHTMLテーブルに表示する必要があります。ここでサーブレットから動的なマップを使用してJSPを呼び出す

はサーブレットです:

@WebServlet("/RestaurantServlet86105511") 
public class RestaurantServlet86105511 extends HttpServlet { 
private static HashMap<String, String> map = new HashMap<>(); 
private String name; 
private String price; 

@Override 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    name = request.getParameter("name"); 
    price = request.getParameter("price"); 
    map.remove(name); 
    map.put(name, price); 
    RequestDispatcher rd = request 
      .getRequestDispatcher("/WEB-INF/RestaurantJSP86105511.jsp"); 
    rd.forward(request, response); 
} 
public static HashMap<String, String> getMap() { 
    return map; 
} 
} 

私は私が間違ってやっているのか分からないが、毎回のrd.forwardが呼び出された後、マップの内容があまりにも削除され、JSPが最後に印刷します私がURLに入力したパラメータ。 サーブレットからjspを呼び出す他の方法はありますか?または私はちょうど間違ったやり方ですか?あなたは何をすべき

+0

「doGet()」が呼び出されるたびに、このキー 'name'に関連付けられた前の値を置き換える' name'をマップに追加しています。あなたの場合、 'remove()'は再定義されています。 – Zaki

+0

サーブレットに本質的にスレッドセーフではないので、インスタンス変数(または静的変数)を持つことは悪い習慣です。あなたのアプリを構造化するためのMVCを学んでください。 – Zaki

答えて

0

を属性として要求へのあなたの地図を入れている:

request.setAttribute("yourMap", map); 

次にJSPで使用すると、値にアクセスするためにJSTLとELを使用することができます。

Price: ${yourMap.price} 
Name: ${yourMap.name} 
関連する問題