Как использовать сессию на страницах JSP для получения информации?
У меня есть страница JSP, используемая для редактирования некоторой пользовательской информации. Когда пользователь входит на сайт, я сохраняю информацию в сеансе, затем на своей странице редактирования я пытаюсь сделать следующее:
<%! String username=session.getAttribute("username"); %>
<form action="editinfo" method="post">
<table>
<tr>
<td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
</tr>
</table>
</form>
но это дает ошибку, говоря, что сессия не может быть решена. Что я могу с этим поделать?
Ответы
Ответ 1
JSP неявные объекты любят session
, request
и т.д. не доступны внутри тегов JSP <%! %>
.
Вы можете использовать его непосредственно в своем выражении как
<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>
С другой стороны, использование сценариев в JSP давно устарело. Рекомендуется использовать EL (язык выражений) и теги JSTL. Например, здесь вы можете использовать EL как
<td>Username: </td>
<td><input type="text" value="${username}" /></td>
Лучшая часть заключается в том, что разрешение области разрешено автоматически. Итак, здесь имя пользователя может поступать из страницы, запроса или сеанса или областей приложения в этом порядке. Если для конкретного экземпляра вам необходимо переопределить это из-за конфликта имен, вы можете явно указать область действия как
<td><input type="text" value="${requestScope.username}" /></td> or,
<td><input type="text" value="${sessionScope.username}" /></td> or,
<td><input type="text" value="${applicationScope.username}" /></td>
Ответ 2
Использование
<% String username = (String)request.getSession().getAttribute(...); %>
Обратите внимание, что ваше использование <%! ... %>
переводится на уровень класса, но запрос доступен только в методе service()
переведенного сервлета.
Посмотрите, как код JSP переводится в сервлет.
Ответ 3
Причина, по которой вы получаете ошибку компиляции, заключается в том, что вы пытаетесь получить доступ к сеансу в блоке объявления (<%! %>
), где он недоступен. Все неявные объекты jsp доступны только в сервисном методе. Код декларативных блоков выходит за пределы метода обслуживания.
Я бы посоветовал вам использовать EL. Это упрощенный подход.
${sessionScope.username}
даст вам желаемый результат.
Ответ 4
Предположим, что вы хотите использовать, скажем, ID на любой другой веб-странице, тогда вы можете сделать это, используя следующий фрагмент кода:
String id=(String)session.getAttribute("uid");
Здесь uid - это атрибут, в котором вы сохранили идентификатор ранее. Вы можете установить его:
session.setAttribute("uid",id);
Ответ 5
<%! String username=(String)session.getAttribute("username"); %>
form action="editinfo" method="post">
<table>
<tr>
<td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
</tr>
</table>
добавить <%! String username=(String)session.getAttribute("username"); %>
Ответ 6
Вы можете напрямую использовать (String) session.getAttribute( "имя пользователя" ); внутри тега scriptlet, т.е. <%% > .
Ответ 7
form action="editinfo" method="post">
<table>
<tr>
<td>Username:</td>
<td>
<input type="text" value="<%if( request.getSession().getAttribute(" parameter_whatever_you_passed ") != null
{
request.getSession().getAttribute("parameter_whatever_you_passed ").toString();
}
%>" />
</td>
</tr>
</table>
</form>