Подтвердить что ты не робот

Как использовать сессию на страницах 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>

но это дает ошибку, говоря, что сессия не может быть решена. Что я могу с этим поделать?

4b9b3361

Ответ 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>