登录后在add_message.jsp中没有获得登录用户名
来源:7-2 项目作业
视线模糊
2020-11-04 22:24:18
# 具体遇到的问题
登录后在add_message.jsp中没有获得登录用户名,点击我的信息可以获得用户名
# 报错信息的截图




# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
<link rel="stylesheet"
href="${pageContext.request.contextPath}/css/index.css">
<script type="text/javascript">
</script>
</head>
<body>
<header>
<div class="container">
<%
if (request.getSession().getAttribute("existUser") != null) {
%>
<nav>
<a href="">我的留言</a>
</nav>
<nav>
<a
href="${pageContext.request.contextPath }/UserServlet?method=edit">我的信息</a>
</nav>
<%
} else {
%>
<nav>
<a href="${pageContext.request.contextPath}/login.jsp">登录</a> <a
href="${pageContext.request.contextPath}/reg.jsp">注册</a>
</nav>
<%
}
%>
</div>
</header>
<section class="banner">
<div class="container">
<div>
<h1>慕课网留言板</h1>
<p>慕课网是垂直的互联网IT技能免费学习网站。以独家视频教程、在线编程工具、学习计划、问答社区为核心特色。在这里,你可以找到最好的互联网技术牛人,也可以通过免费的在线公开视频课程学习国内领先的互联网IT技术。
</p>
</div>
</div>
</section>
<section class="main">
<div class="container">
<c:forEach var="message" items="${pageBean.list }">
<div class="alt-item">
<div class="alt-head">
<div class="alt-info">
<span>${message.user.username}<a href=""></a></span> <span>${message.create_time }</span>
</div>
</div>
<div class="alt-content">
<h3>${message.title }</h3>
<p>${message.content}</p>
</div>
</div>
</c:forEach>
</div>
</section>
<section class="page">
<div class="container">
<div id="pagefy">
<ul>
<c:if test="${ pageBean.page != 1 }">
<li><a
href="${pageContext.request.contextPath }/IndexServlet?page=1">首页</a></li>
<li><a
href="${pageContext.request.contextPath }/IndexServlet?page=${pageBean.page-1}">上一页</a></li>
</c:if>
<c:forEach var="i" begin="1" end="${pageBean.totalPage }">
<c:if test="${ pageBean.page == i }">
<li><span class="first-page">${ i }</span></li>
</c:if>
<c:if test="${ pageBean.page != i }">
<li><a
href="${ pageContext.request.contextPath }/IndexServlet?page=${ i }">${ i }</a></li>
</c:if>
</c:forEach>
<c:if test="${ pageBean.page != pageBean.totalPage }">
<li><a
href="${pageContext.request.contextPath }/IndexServlet?page=${pageBean.page+1}">下一页</a></li>
<li><a
href="${pageContext.request.contextPath }/IndexServlet?page=${pageBean.totalPage}">尾页</a></li>
</c:if>
</ul>
</div>
<!-- 分页内容参考视频中老师源码 -->
<div class="container">
<%
if (request.getSession().getAttribute("existUser") != null) {
%>
<nav>
<a href="${pageContext.request.contextPath}/add_message.jsp">点我留言</a>
</nav>
<%
} else {
%>
<nav>
<a href="${pageContext.request.contextPath}/login.jsp">请登录后留言</a>
</nav>
<%
}
%>
</div>
</div>
</section>
<footer> copy@慕课网 </footer>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>新建留言</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/add.css">
</head>
<body>
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">
慕课网留言板
</a>
</div>
</div>
</nav>
<div class="container">
<div class="jumbotron">
<h1>Hello, ${user.username}!</h1>
<p>既然来了,就说点什么吧</p>
</div>
<div class="page-header">
<h3><small>新建留言</small></h3>
</div>
<form class="form-horizontal" action="" method="post">
<div class="form-group">
<label for="inputTitle" class="col-sm-2 control-label">标题 :</label>
<div class="col-sm-8">
<input name="title" class="form-control" id="inputTitle" placeholder="title">
</div>
</div>
<div class="form-group">
<label for="inputContent" class="col-sm-2 control-label">内容 :</label>
<div class="col-sm-8">
<textarea name="content" class="form-control" rows="3" id="inputContent" placeholder="Content"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">发布留言</button>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<a class="btn btn-default" href="">查看留言</a>
</div>
</div>
</form>
</div>
<footer class="text-center" >
copy@imooc
</footer>
</body>
</html>
package com.imooc.web.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imooc.domain.User;
import com.imooc.service.UserService;
import com.imooc.service.impl.UserServiceImpl;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数
String methodName=request.getParameter("method");
//判断
if("login".equals(methodName)) {
login(request,response);
}else if("logout".equals(methodName)) {
logout(request,response);
}
}
private void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
//1、销毁session
request.getSession().invalidate();
//2、跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 完成验证码的校验:
// 获得session中保存的验证码的信息
String code1 = (String) request.getSession()
.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
// 接收前台表单提交的验证码的信息
String code2 = request.getParameter("checkCode");
if (code2 == null || !code2.equalsIgnoreCase(code1)) {
request.setAttribute("msg", "验证码输入不正确!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
//接收页面提交过来的用户名和密码
String username=request.getParameter("username");
String password=request.getParameter("password");
//输出接收到的用户名和密码
System.out.println(username+" "+password);
//数据封装
User user=new User();
user.setUsername(username);
user.setPassword(password);
//处理数据
UserService userService=new UserServiceImpl();
User existUser=userService.login(user);
//根据处理结果,完成页面跳转
if(existUser==null) {
//登录失败,返回到登录页面
request.setAttribute("msg", "用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
//登录成功,保存用户信息
request.getSession().setAttribute("existUser", existUser);
response.sendRedirect(request.getContextPath()+"/IndexServlet");
// response.sendRedirect(request.getContextPath()+"/message_list.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package com.imooc.web.action;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imooc.domain.User;
import com.imooc.service.UserService;
import com.imooc.service.impl.UserServiceImpl;
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String methodName = request.getParameter("method");
if ("edit".equals(methodName)) {
// 根据已登录用户信息,将用户全部信息传递到edit_user.jsp页面
edit(request, response);
} else if ("saveUI".equals(methodName)) {
// 在编辑页面点击修改后,进入edit_add.jsp页面
saveUI(request, response);
}else if("update".equals(methodName)) {
//在edit_add.jsp点击保存后,将修改后的用户信息保存至数据库
try {
update(request,response);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* 在edit_add.jsp页面中修改用户信息,然后点击保存,保存至数据库中,然后执行跳转至
* 执行MessageServlet?method=findAll,返回留言面板
* @param request
* @param response
* @throws ParseException
* @throws IOException
* @throws ServletException
*/
private void update(HttpServletRequest request, HttpServletResponse response) throws ParseException, ServletException, IOException {
// 接收页面提交数据
String id=request.getParameter("id");
String username=request.getParameter("username");
String password=request.getParameter("password");
String real_name=request.getParameter("real_name");
//将接收到的字符型数据生日转换为日期型
String newbirthday=request.getParameter("birthday");
//截取并拼接字符串
String birthday1=newbirthday.substring(0, 4)+"-"+newbirthday.substring(4, 6)+"-"+newbirthday.substring(6, 8);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
Date birthday=sdf.parse(birthday1);
SimpleDateFormat sdf2= new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String birthday2=sdf2.format(birthday);
String phone=request.getParameter("phone");
String address=request.getParameter("address");
//封装数据
User user=new User();
user.setId(Integer.parseInt(id));
user.setUsername(username);
user.setPassword(password);
user.setReal_name(real_name);
user.setBirthday(birthday2);
user.setPhone(phone);
user.setAddress(address);
//调用业务层处理数据,将新修改的用户信息存入数据库
UserService userService=new UserServiceImpl();
userService.update(user);
//修改成功后跳转至留言板页面
request.getRequestDispatcher("/MessageServlet").forward(request, response);
}
/**
* 在edit_user.jsp中点击修改后进入保存页面,页面比edit_user.jsp中多一个密码显示框,只是显示数据,未做修改
*
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 从登录用户中获取用户名
User existUser = (User) request.getSession().getAttribute("existUser");
String userName = existUser.getUsername();
// System.out.println("需要编辑的用户名为:" + userName);
// 调用业务层根据用户名查询该用户的所有信息
UserService userService = new UserServiceImpl();
User user = userService.findOne(userName);
System.out.println("查询到的用户为" + user);
// 保存查询到的用户信息,并跳转至edit_user.jsp
request.setAttribute("user", user);
request.getRequestDispatcher("/edit_add.jsp").forward(request, response);
}
/**
* 根据用户登录的信息,将所有用户信息查询出来并跳转至edit_jsp页面,修改前用户信息
*
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 从登录用户中获取用户名
User existUser = (User) request.getSession().getAttribute("existUser");
String userName = existUser.getUsername();
// System.out.println("需要编辑的用户名为:" + userName);
// 调用业务层根据用户名查询该用户的所有信息
UserService userService = new UserServiceImpl();
User user = userService.findOne(userName);
// System.out.println("查询到的用户为" + user);
// 保存查询到的用户信息,并跳转至edit_user.jsp
request.setAttribute("user", user);
request.getRequestDispatcher("/edit_user.jsp").forward(request, response);
}
}
package com.imooc.service.impl;
import com.imooc.dao.UserDao;
import com.imooc.dao.impl.UserDaoImpl;
import com.imooc.domain.User;
import com.imooc.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public User login(User user) {
// 调用Dao查询用户是否存在
UserDao userDao = new UserDaoImpl();
return userDao.login(user);
}
@Override
public User regist(User user) {
//注册新用户
UserDao userDao=new UserDaoImpl();
return userDao.regist(user);
}
@Override
public User findOne(String userName) {
// 根据用户名查询用户信息
UserDao userDao=new UserDaoImpl();
return userDao.findOne(userName);
}
@Override
public void update(User user) {
// 保存修改后的用户信息至数据库
UserDao userDao=new UserDaoImpl();
userDao.update(user);
}
}
package com.imooc.dao.impl;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.imooc.dao.UserDao;
import com.imooc.domain.User;
import com.imooc.utils.JDBCUtils;
public class UserDaoImpl implements UserDao {
@Override
public User login(User user) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 获得连接
conn = JDBCUtils.getConnection();
// 编写SQL
String sql = "select * from user where username=? and password=?";
// 预编译SQL
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
// 执行
rs = pstmt.executeQuery();
if (rs.next()) {
User existUser = new User();
existUser.setId(rs.getInt("id"));
existUser.setUsername(rs.getString("username"));
existUser.setPassword(rs.getString("password"));
existUser.setReal_name(rs.getString("real_name"));
existUser.setBirthday(rs.getString("birthday"));
existUser.setPhone(rs.getString("phone"));
existUser.setAddress(rs.getString("address"));
return existUser;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
JDBCUtils.release(rs, pstmt, conn);
}
return null;
}
@Override
public User regist(User user) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
//获得连接
conn=JDBCUtils.getConnection();
//编写SQL
String sql="insert into user (id,username,password) values (null,?,?)";
//预编译SQL
pstmt=conn.prepareStatement(sql);
//设置参数
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
//执行sql
int result=pstmt.executeUpdate();
if(result>0) {
System.out.println("注册新用户成功");
}
} catch (Exception e) {
// TODO: handle exception
}finally {
//释放资源
JDBCUtils.release(pstmt, conn);
}
return null;
}
@Override
public User findOne(String username) {
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
//
try {
// 获得数据库连接
conn = JDBCUtils.getConnection();
// 编写SQL
String sql = "select * from user where username=? ";
// 预编译SQL
pstm = conn.prepareStatement(sql);
// 设置参数
pstm.setString(1, username);
// 执行SQL
rs = pstm.executeQuery();
// 处理结果
if (rs.next()) {
User user=new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setReal_name(rs.getString("real_name"));
user.setBirthday(rs.getString("birthday"));
user.setPhone(rs.getString("phone"));
user.setAddress(rs.getString("address"));
return user;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
JDBCUtils.release(rs, pstm, conn);
}
return null;
}
/**
*
*/
@Override
public void update(User user) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1、获取连接
conn = JDBCUtils.getConnection();
// 2、编写SQL
String sql = "update user set username=?,password=?,real_name=?,birthday=?,phone=?,address=? where id=?";
// 3、预编译SQL
pstmt = conn.prepareStatement(sql);
// 4、设置参数
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getReal_name());
pstmt.setString(4, user.getBirthday());
pstmt.setString(5, user.getPhone());
pstmt.setString(6, user.getAddress());
pstmt.setInt(7, user.getId());
// 5、执行SQL
int result=pstmt.executeUpdate();
if(result>0) {
System.out.println("用户信息修改成功");
}
// 6、结果处理
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7、数据释放
JDBCUtils.release(pstmt, conn);
}
}
}
在这里输入代码,可通过选择【代码语言】突出显示
1回答
同学你好, 同学将session信息存储到existUser中,则建议同学从existUser中进行获取。如下所示:

相似问题