繁体   English   中英

在 Java Web App 中使用 servlet 将会话属性返回到 .jsp 时出错

[英]Error returning a session attribute to .jsp with servlets in a Java Web App

我正在使用 MVC 和命令模式来开发我的 Web 应用程序。 所以我有一个 servlet 和各种命令类。 到目前为止,我只开发了 login 命令。 我需要让当前用户在下一个 jsp 页面中显示一些用户特定的数据。 我是这样做的:

全局声明一个 Http 会话并在我设置用户属性到这个会话的 execute() 方法中初始化它。 当我在 .jsp 页面中尝试获取此会话及其属性时,它一直返回“null”。 但它不能为空,因为登录成功......你能告诉我吗? 也许即使在调试时我也没有看到或理解某些东西?

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

public class LoginCommand extends Command {
    private static final long serialVersionUID = -3071536593627692473L;
    private static final Logger log = Logger.getLogger(LoginCommand.class);

    private HttpSession session;

    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        log.debug("Command starts");
        this.session = request.getSession();

        String login = request.getParameter("login");
        this.session.setAttribute("userLogin", login);
        log.trace("Request parameter: loging --> " + login);

        String password = request.getParameter("password");

        String errorMessage = null;
        String forward = Path.PAGE__ERROR_PAGE;

        if (login == null || password == null || login.isEmpty() || password.isEmpty()) {
            errorMessage = "Login/password cannot be empty";
            request.setAttribute("errorMessage", errorMessage);
            log.error("errorMessage --> " + errorMessage);
            return forward;
        }
       User user = null;
        try {
            user = new JDBCUserDao().getUserByLogin(login);
        } catch (DBException e) {
            e.printStackTrace();
        }
        log.trace("Found in DB: user --> " + user);
        if (user == null || !password.equals(user.getPassword())) {
            errorMessage = "Cannot find user with such login/password";
            request.setAttribute("errorMessage", errorMessage);
            log.error("errorMessage --> " + errorMessage);
            return forward;
        } else {
            Role userRole = Role.getRole(user);
            log.trace("userRole --> " + userRole);
            if (userRole == Role.STUDENT)
                forward = Path.STUDENT_ACCOUNT;
            this.session.setAttribute("user", user);
            log.trace("Set the session attribute: user --> " + user);

            this.session.setAttribute("userRole", userRole);
            log.trace("Set the session attribute: userRole --> " + userRole);

            log.info("User " + user + " logged as " + userRole.toString().toLowerCase());

        }
        log.debug("Command finished");
        return forward;
    }

    public HttpSession getSession() {
        return session;
    }
}

和jsp页面:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1"%>
<%@page import="com.epam.project.webappcourses.web.Controller"%>
<%@ page import="com.epam.project.webappcourses.dao.implemented_dao.JDBCJournalDao" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.epam.project.webappcourses.web.command.LoginCommand" %>
<%@ page import="com.epam.project.webappcourses.dao.implemented_dao.JDBCUserDao" %>
<%@ page import="com.epam.project.webappcourses.entities.User" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="ISO-8859-1">
    <title>User account</title>
</head>
<body>
<div align="center">
    <h1>Welcome, user! ^___^</h1>
</div>

<input type="button" name="logout" value="Log out" style="position: absolute; top:25px; right:20px; height:30px;width:70px"></input>

<input type="button" name="student_courses" value="My courses" style="margin-left: 40%;height:50px;width:100px"></input>
<input type="button" name="courses_search" value="Search" style="margin-right: 5px; height:50px;width:100px"></input>

<input type="button" name="registered_courses" value="Registered" style="position: absolute; left:30px; top:200px; height:30px;width:100px"></input>
<input type="button" name="ongoing_courses" value="In progress" style="position: absolute; left:30px; top:230px; height:30px;width:100px"></input>
<input type="button" name="finished_courses" value="Finished" style="position: absolute; left:30px; top:260px; height:30px;width:100px"></input>

<table border="1" style ="margin-top:60px; margin-left:300px; width:900px;">
    <tr>
        <td>name</td>
        <td>teacher</td>
        <td>duration</td>
        <td>students registered</td>
        <td>grade</td>
    </tr>


<%
JDBCJournalDao journal = new JDBCJournalDao();
 LoginCommand login = new LoginCommand();
User user = (User) login.getSession().getAttribute("user");
List<Integer> grades = journal.getGradesByStudentId(user.getId());
%>

    <c:forEach var="grade" items="${grades}">
    <tr>
        <td><td>
        <td><td>
        <td><td>
        <td><td>
        <td>${grade}<td>
        </c:forEach>
    <tr>
</table>
</body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM