Члены данных сервлета продолжают сеанс? - PullRequest
0 голосов
/ 22 июля 2011

Я создаю веб-приложение из существующего проекта.В существующем проекте у меня есть класс, который содержит все мои объекты и то, что я могу с ними сделать.Мне было интересно, что произойдет, если у меня будет экземпляр этого класса для сервлета в качестве члена данных:

  1. Когда тот же пользователь с таким же сеансом направляется на сервлет, содержащий этот класс, он будет хранитьэто данные или он будет обновляться каждый раз?
  2. Будет ли каждый пользователь / сеанс иметь разные копии этого члена или он является общим?
  3. Если члены данных в сервлетах не сохраняют состояние три длятот же сеанс, то, что вы рекомендуете?Может быть, активно добавить его в сеанс?

Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Сервлеты - то есть члены их данных - совместно используются всеми сеансами на сервере. Таким образом

Когда один и тот же пользователь с таким же сеансом направляется на сервлет, содержащий этот класс, он сохранит свои данные или будет обновляться каждый раз?

Данные будут храниться (для всех пользователей) до перезапуска веб-приложения.

Будет ли каждый пользователь / сеанс иметь различную копию этого участника или он является общим?

Разделяется.

Если члены данных в сервлетах не сохраняют состояние три для одного и того же сеанса, то что вы порекомендуете? Может быть, активно добавить его в сеанс?

Специфичные для сеанса данные должны храниться в HttpSession.

0 голосов
/ 22 июля 2011

Чтобы быть уверенным в этом, я написал немного TestingServlet - я покажу вам жизненный цикл сервлета и его членов.Также поставляется;Как работать с переменными сеанса

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Basic servlet for lifecycle testing
 * 
 * @author powermicha
 * 
 */
public class TestingServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 4020575563844924588L;

    private Logger logger;

    private int requestCounter;

    @Override
    public void init() throws ServletException {
        logger = Logger.getLogger("TestingServlet_" + System.currentTimeMillis());
        logger.log(Level.INFO, "TestingServlet initialized");

        requestCounter = 0;
    }

    @Override
    public void destroy() {
        logger.log(Level.INFO, "TestingServlet destroyed");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        int requestsPerSession = incrementRequestsPerSession(req);

        String logMessage = "TestingServlet was called " + (++requestCounter) + " times. " 
                + requestsPerSession + " times from the same session (ID:"
                + req.getSession().getId() + ")";

        logger.log(Level.INFO, logMessage);

        // send it to the browser
        PrintWriter writer = resp.getWriter();
        writer.write(logMessage);
        writer.close();
    }

    private int incrementRequestsPerSession(HttpServletRequest req) {

        Integer counter = (Integer) req.getSession().getAttribute("requestsPerSession");
        if (counter == null) {
            counter = 1;
        } else {
            counter++;
        }

        req.getSession().setAttribute("requestsPerSession", counter);

        return counter;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...