登录后在add_message.jsp中没有获得登录用户名

来源:7-2 项目作业

视线模糊

2020-11-04 22:24:18

# 具体遇到的问题
登录后在add_message.jsp中没有获得登录用户名,点击我的信息可以获得用户名

# 报错信息的截图

http://img.mukewang.com/climg/5fa2b92f0962ec1308490579.jpg

http://img.mukewang.com/climg/5fa2b47d0986c4e004390157.jpg

http://img.mukewang.com/climg/5fa2b86209b3768612720374.jpg

http://img.mukewang.com/climg/5fa2b86209015b5807710653.jpg


# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<%@ 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>&nbsp;&nbsp;&nbsp;

                    </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回答

好帮手慕小尤

2020-11-05

同学你好, 同学将session信息存储到existUser中,则建议同学从existUser中进行获取。如下所示:


http://img.mukewang.com/climg/5fa375a9099ffad504540150.jpg

0

0 学习 · 8016 问题

查看课程