9

組み込みサーブレット(7.3.0 v20110203)コンテナでHTTPセッションを使用する単純なサーブレットを実装しようとしています。桟橋を開始するには、次のコードを使用します。

Server server = new Server(12043);
ServletContextHandler handler = new
            ServletContextHandler(ServletContextHandler.SESSIONS);
handler.setContextPath("/");
server.setHandler(handler);
ServletHolder holder = new ServletHolder(new BaseServlet());
handler.addServlet(holder, "/*");
server.start();
server.join();

サーブレットはとのセッションを取得します

HttpSession session = request.getSession(true);

それにいくつかのデータを保存します。次のリクエストで、次のコードでセッションを取得します。

HttpSession session = request.getSession(false);

その場合、セッションは常にnullになります。

この特定の問題に関する情報はインターネット上で見つかりませんでした。SessionManagerまたはSessionIdManagerの設定も試しましたが、何も変わらないようです。ここでSessionManager、SessionIdManager、またはSessionHandlerについて何かが足りないのではないかと思いますが、これは単なる推測です。

4

3 に答える 3

5

あなたのコードは、BaseServletのこの骨格的な実装でうまく機能します:

public class BaseServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        boolean create = "true".equals(req.getParameter("create"));

        HttpSession session = req.getSession(create);
        if (create) {
            session.setAttribute("created", new Date());
        }

        PrintWriter pw = new PrintWriter(resp.getOutputStream());
        pw.println("Create = " + create);
        if (session == null) {
            pw.println("no session");
        } else {
            pw.println("Session = " + session.getId());
            pw.println("Created = " + session.getAttribute("created"));
        }

        pw.flush();
    }

そのため、セッションはコード内の別の場所で無効になっている可能性があります。

のメソッドをSessionHandler使用して明示的に設定することもできます。setSessionHandler()ServletContextHandler

于 2011-05-11T08:49:13.047 に答える
0
//You need to setup SessionManager first. This worked for me.
Server server = new Server(8031);
ServletHandler handler = new ServletHandler();
server.setHandler(handler);

HashSessionIdManager hashSessionIdManager = new 
HashSessionIdManager();
SessionHandler sessionHandler = new SessionHandler();
SessionManager sessionManager = new HashSessionManager();
sessionManager.setSessionIdManager(hashSessionIdManager);
sessionHandler.setSessionManager(sessionManager);
sessionHandler.setHandler(handler);
sessionHandler.setServer(server);
server.setSessionIdManager(hashSessionIdManager);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet("webservlet.IndexServlet", "/index");
context.addServlet("webservlet.HomeServlet", "/home");
context.addServlet("webservlet.CategoryServlet", "/category");
context.addServlet("webservlet.ProductServlet", "/product");
...
于 2013-12-05T10:41:44.550 に答える
-1

このメソッドHttpServletResponse#reset()は新しく作成されたセッションを破棄するため、次回は新しいセッションが作成されます。

于 2012-07-11T08:49:41.987 に答える