Невозможно отобразить атрибут сеанса на странице JSP

Я пытаюсь отобразить атрибут сеанса на этой странице JSP:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="true" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <title>title</title>
        <link rel="stylesheet" href="/css/style.css">
    </head>
    <body>
    <c:choose>
        <c:when test="${error}">
            Erro.
            <br />
        </c:when>
        <c:otherwise>
            <c:out value="${sessionScope.login}"/> | <a href="<c:url value = "/logout"/>">Sair</a>.
            <br />
        </c:otherwise>
    </c:choose>
    <script src="/js/script.js"></script>
    </body>
</html>

эта страница пересылается с этого сервлета:

package org.loja.app.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String login = request.getParameter("login");
        String password = request.getParameter("password");

        if(password.equals("123")) {
          HttpSession session = request.getSession();
          session.setAttribute("login", login);
          request.setAttribute("error", false);
          request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);
        } else {
          request.setAttribute("error", true);
          request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);
        }
    }
}

когда я открываю страницу в браузере, вместо значения атрибута я получаю текст ${sessionScope.login},

Что мне здесь не хватает?

1 ответ

Кажется, ничего плохого в этом нет. Однако вот пара вещей, которые я бы попробовал:

Удалите этот тег сверху:

<%@ page session="true" %>

В любом случае поведение по умолчанию установлено на true. Нет необходимости объявлять это снова. Возможно, это делает недействительными переменные сеанса, которые вы установили.

Конфигурация сервера

Некоторые серверы имеют параметры конфигурации, где вам нужно включить поддержку сеансов. Возможно, это не включено или было выключено.

Вы говорите, что <c:out не работает но <c:url делает. Если <c:url работает но <c:out не может быть тогда ваш файл.jar jstl поврежден? Но я очень сомневаюсь в этом. Я думаю, что проблема заключается только в том, что sessionScope не установлен. Почему бы просто не попытаться получить доступ к переменной напрямую? sessionScope не обязательно

Пытаться:

   <c:out value="${login}"/> | <a href="<c:url value = "/logout"/>">Sair</a>.

Также попробуйте это без JSTL:

 ${login} | <a href="/logout">Sair</a>.

Попробуйте установить его в JSP:

<c:set var="testVar" value="Hello world" scope="session"/>
<c:out value="${testVar}"/>

Наконец, убедитесь, что вы на самом деле устанавливаете переменную. Проверьте это так:

    HttpSession session = request.getSession(); //move outside to test it 
          session.setAttribute("login", login);  //move outside to test it 

if(password.equals("123")) {

          request.setAttribute("error", false);
          request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);
        } else {
          request.setAttribute("error", true);
          request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);
        }

Попробуйте выполнить эти действия по устранению неполадок, и, надеюсь, это поможет вам сузить проблему.

Другие вопросы по тегам