Как я могу совместно использовать переменную или объект между двумя или больше Сервлетами?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
41
задан ROMANIA_engineer 10 November 2015 в 08:48
поделиться

4 ответа

Я думаю, что Вы ищете, вот запрос, сессия или данные приложения.

В сервлете можно добавить объект как атрибут к объекту запроса, объекту сессии или объекту контекста сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String shared = "shared";
    request.setAttribute("sharedId", shared); // add to request
    request.getSession().setAttribute("sharedId", shared); // add to session
    this.getServletConfig().getServletContext().setAttribute("sharedId", shared); // add to application context
    request.getRequestDispatcher("/URLofOtherServlet").forward(request, response);
}

при помещении его в объект запроса это будет доступно сервлету, который передается тому, пока запрос не закончен:

request.getAttribute("sharedId");

при помещении его в сессию это будет доступно всем сервлетам продвижение, но значение будет связано с пользователем:

request.getSession().getAttribute("sharedId");

, Пока сессия не истекает на основе неактивности от пользователя.

сбрасывается Вами:

request.getSession().invalidate();

Или один сервлет удаляет его из объема:

request.getSession().removeAttribute("sharedId");

при помещении его в контекст сервлета это будет доступно, в то время как приложение работает:

this.getServletConfig().getServletContext().getAttribute("sharedId");

, Пока Вы не удаляете его:

this.getServletConfig().getServletContext().removeAttribute("sharedId");
78
ответ дан William 27 November 2019 в 00:23
поделиться

Поместите его в один из 3 различных объемов.

запрос - длится жизнь запроса

, сессия - длится жизнь сессии пользователя

, приложение - длится, пока приложение не закрывается

, можно получить доступ ко всем этим объемам через переменную HttpServletRequest, которая передается в методам, которые расширяются от класс

HttpServlet
9
ответ дан bpapa 27 November 2019 в 00:23
поделиться

Зависит от объема надлежащего использования данных.

, Если данные только используются на основе в расчете на пользователя, как пользовательская информация о входе в систему, количество хита страницы, и т.д. используют объект сессии (httpServletRequest.getSession () .get/setAttribute (Строка [Объект]))

, Если это - те же данные через многочисленных пользователей (общие хиты веб-страницы, рабочие потоки, и т.д.) используют атрибуты ServletContext. servlet.getServletCongfig () .getServletContext () .get/setAttribute (Строка [Объект])). Это будет только работать в том же военном файле/сети applicaiton. Обратите внимание, что эти данные не сохраняются через перезапуски также.

7
ответ дан shemnon 27 November 2019 в 00:23
поделиться

Вы не могли только поместить объект в HttpSession и затем обратиться к нему его названием атрибута в каждом из сервлетов?

, например:

getSession().setAttribute("thing", object);

... тогда в другом сервлете:

Object obj = getSession.getAttribute("thing");
1
ответ дан yalestar 27 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: