2015-10-21 2 views
1

У меня есть страница jsp, которая отображает все записи из базы данных. В каждом столбце есть кнопка удаления. Код сервлета, который удаляет запись.Несколько чрезвычайно коротких атрибутов сеанса в приложении

new userDao().get(User.Class,Long.parseLong("id")).delete(); 
// for some reasons I cannot use requestDispatcher, so I store the delete successful message in a session 
request.getSession().setAttribute("message","Delete successful."); 
// view.html is a servlet that gets all records 
response.sendRedirect("view.html"); 

И в view.html сервлета

request.setAttribute("message",get the message attribute from HTTPSession); 
request.getSession().removeAttribute("message"); 
// go back to jsp 
request.getRequestDispatcher("view.jsp").forward(request,response); 

Многие из моих страниц, как это. Я понимаю, что сеансы используются для данных, которые охватывают несколько запросов, но это то, что я делаю хорошо или плохо. Я делаю это неправильно?

+0

'response.sendRedirect (" view.html? Message = "+ URLEncoder.encodeURL (" D ... "," UTF-8 "));' может быть? С помощью либо view.jsp (session = false, $ {para.message}), либо JavaScript –

+0

@JoopEggen, если вы используете этот подход, будьте очень осторожны с атаками инъекций кода. –

+0

Рамки называют эти «флэш-атрибуты» и стараются избегать проблем с параллелизмом между несколькими вкладками, которые они вызывают: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-flash- атрибуты –

ответ

1

Вот как это делают каркасы. В основном не так много других мест, которые можно было бы использовать для хранения этих сообщений в переадресации страниц. Таким образом, большинство фреймворков просто используют какое-то состояние (состояние просмотра, состояние потока или любое другое, что он вызывает), а затем сохраняет весь этот объект в сеансе.

Также не то, что вы не, по вашему примеру, используя любые короткоживущих сессий - это вполне может быть, что вы используете один долговечные сессии, и только его содержание кратко- жил. Наконец, то, что вы устанавливаете в сеансе, не распространяется на клиента (клиент имеет только идентификатор сеанса), и чаще всего он, вероятно, будет храниться в памяти, поэтому частые изменения в данных сеанса не должны быть проблемой.

Смежные вопросы