[英]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.