Узнайте, как работает HTTP:
- Клиент запускает HTTP-запрос.
- Сервер получает HTTP-запрос.
- Servletcontainer создает новые
HttpServletRequest
и HttpServletResponse
объекты. - Servletcontainer вызывает соответствующий сервлет с этими объектами.
- Сервлет обрабатывает запрос и перенаправляет запрос и ответ в JSP.
- JSP выполняет запись в тело ответа.
- Servletcontainer фиксирует HTTP-ответ.
- Сервер отправляет HTTP-ответ обратно клиенту и объектам запросов и ответов сборщиков.
- Клиент получает HTTP-ответ и обрабатывает его (отображает HTML, применяет CSS, выполняет JS).
Когда вы отправляете новый запрос, отправляя форму, он не будет повторно использовать те же объекты запроса и ответа.
Существует два способа преодоления этой природы HTTP без состояния.Вам необходимо преобразовать этот объект в String
и включить его в скрытое поле ввода формы HTML в JSP, чтобы он был доступен в качестве параметра запроса при отправке.
<input type="hidden" name="myObject" value="${myObjectAsString}" />
Преобразованиенеобходимо, потому что HTTP и HTML не понимают объекты Java.HTML с точки зрения Java в основном один большой String
(сделайте правый клик и Просмотреть исходный код в веб-браузере, чтобы увидеть его).Если вы не преобразуете объект Java в String
, то по умолчанию результат toString()
объекта Java будет распечатан в HTML.
Или, если объект слишком велик или слишком сложен для преобразования вString
и наоборот, тогда вам нужно сохранить его в памяти сервера или в какой-либо базе данных и вместо этого передать его уникальный идентификатор как скрытое входное значение.Обычно для этого используется область сеанса.
Пример сервлета предварительной обработки формы:
String myObjectId = UUID.randomUUID().toString();
request.getSession().setAttribute(myObjectId, myObject);
request.setAttribute("myObjectId", myObjectId);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
Пример JSP:
<input type="hidden" name="myObjectId" value="${myObjectId}" />
Пример сервлета постобработки формы:
String myObjectId = request.getParameter("myObjectId");
Object myObject = request.getSession().getAttribute(myObjectId);
request.getSession().removeAttribute(myObjectId);
// ...
См. Также: