3

シンプルなCRUDWebアプリです。

2つのサーブレットがあります。

ページ上のすべてのアイテムを一覧表示(MyProjectListServlet.java)するための1つ。

MyPprojectEditorServlet.javaもう1つは、アイテム情報の更新( )またはリストへのアイテムの追加を処理します。

現時点では、両方のサーブレットが同じアイテムの独自のリストを作成して維持しています。したがって、リストサーブレットは常に変更されていないアイテムの独自のリストを表示し、更新サーブレットは更新されたアイテム情報を表示します(アイテムを編集した場合、それ以外の場合はリストサーブレットと同じ情報が表示されます)。

同じ1つのリストを共有するように両方のサーブレット(MyProjectListServletと)を作成するにはどうすればよいですか。MyPprojectEditorServletitemRepo

MyProjectListServlet.java

package com.myproject;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.myproject.MyProjectRepository;

@WebServlet("/project/")
public class MyProjectListServlet extends HttpServlet {

    @Inject
    private MyProjectRepositoryImpl itemsRepo = new MyProjectRepositoryImpl(); // creates brand new list of items

    public MyProjectListServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setAttribute("items", itemsRepo.listItems());

        getServletContext().getRequestDispatcher("/WEB-INF/pages/item-list.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

MyPprojectEditorServlet.java

package com.myproject;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.myproject.myitem;
import com.myproject.myprojectRepository;

@SuppressWarnings("serial")
@WebServlet("/project")
public class MyPprojectEditorServlet extends HttpServlet {

    @Inject
    private MyProjectRepositoryImpl itemRepo = new MyProjectRepositoryImpl(); //creates its own list of items

    public MyProjectEditorServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String id = request.getParameter("id");

        if(id != null && !id.isEmpty()){
            MyItem item = itemRepo.lookupitemById(id);
            request.setAttribute("item", item);

        }

        request.setAttribute("items", itemRepo.listMyItems());

        getServletContext().getRequestDispatcher("/WEB-INF/pages/item-form.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        String str1 = request.getParameter("str1");
        String str2 = request.getParameter("str2");
        String str3 = request.getParameter("str3");
        String str4 = request.getParameter("str4");
        String str5 = request.getParameter("str5");

        String id = request.getParameter("id");
        if(id == null || id.isEmpty()){
            itemRepo.addItem(str1, str2, str3, str4, str5);
        }else{
            itemRepo.updateItem(id, str1, str2, str3, str4, str5);
        }
        response.sendRedirect(request.getContextPath() + "/project/");
    }

}
4

3 に答える 3

2

次の 2 つのオプションがあります。

  1. リストを HttpSession オブジェクト (セッション スコープ) の属性として保存します。
  2. リストを ServletContext オブジェクト (アプリケーション スコープ) の属性として保存します。
于 2012-10-05T16:45:04.573 に答える
0

JPA(Java Persistence API、http://en.wikipedia.org/wiki/Java_Persistence_API)を使用すると、ランタイムオブジェクトをデータベースに保存して、コンテナを再起動したりサーブレットをリロードしたりしてもアクセスできるようになります。JPAを使用するには、クラスにいくつかのアノテーションを付けて、オブジェクトをデータベースに格納する方法を定義する必要があります。

オブジェクトが保存されると、他のサーブレットから簡単にアクセスできるようになり、基になるデータベースで変更も更新されます。

于 2012-10-05T16:53:35.493 に答える
0

シングルトン/アプリケーションまたはセッション スコープ変数を使用するか、よりスケーラブルなソリューションの場合は、JPA/Redis などにデータを保存できます。

于 2012-10-05T16:44:56.733 に答える