概述,IDEA项目JSP页面无法使用内置session对象的getAttribute()方法。
项目中已经导入了jsp-api.jar和servlet-api.jar,用户在登录页面当中登录成功之后将用户对象存入session中,方便后面展示用户的相关信息。但是遇到一个问题,无法直接调用JSP内置的session对象的getAttribute()方法获取用户。具体是什么原因也不知道,但是解决方法如下:
1. 登录页面,当用户登录成功之后会跳转到list.jsp页面中。
// 获取用户名
String username = request.getParameter("username");
String password = request.getParameter("password");
String sql = "select id, username, password from t_user where username = ? and password = ?";
// 执行sql并查询用户
User user = DBUtils.query(User.class, sql, username, password);
if (user != null){
// 获取或者创建用户session,这里要求一定要获取到用户的session,如果没有会自动创建一个session对象。
HttpSession session = request.getSession();
// 将用户信息存储到session当中
session.setAttribute("user", user);
// 成功查询到用户时跳转到用户列表页面
response.sendRedirect(request.getContextPath()+"/dept/list");
} else {
// 没有查询到用户,让用户重写输入用户名与密码
response.sendRedirect(request.getContextPath()+"/login_fail.jsp");
}
2. 在jsp中展示登录显示“欢迎:xxx”用户,代码如下:
<body>
<h3>欢迎:<%=session.getAttribute("user")%></h3>
</body>
这里并不能直接通过内置对象session.getAttribute()方法取出在登录页面中存入session域中的用户。
3. 解决以上问题
在list.jsp页面中使用request.getSession()方法获取一个session对象;然后在取出session域当中的数据。
<%--从session中取出user--%>
<%
User user = (User)request.getSession().getAttribute("user");
%>
<body>
<h3>欢迎:<%=user.getUsername()%></h3>
</body>