jsp、servlet、jdbc实现留言板(可记住密码)

使用工具:mysql、IDEA

一、目标

  • 留言板进行优化:
    登陆页面输入用户名、密码,提交给某个servlet,该servlet可以检索数据库,验证用户名和密码是否合法,给出验证结果

二、JDBC使用说明

  1. JDBC基本功能

     建立连接、发送SQL语句,处理数据库操作结果
    
  2. mysql使用

    (1)workbench–新建–schemas—create a new schema
    (2)使用:数据库右键set default schema
    (3)新建表格
    (4)编辑表格 列:id字段(专门)(长整数,自增编号),关系模型数据库进行连接查询根据id字段完成,
    注:PK=primary key NN=not null AI=auto increment

  3. IDEA下载驱动

    将MYSQL-mysql-connector-java-8.0.18.jar复制到项目目录下web的WEB_INF-lib下,并在File-Project Structure-Modules下添加该jar

  4. JDBC语句

//1.注册数据库的驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.printf("加载驱动有错误"+e.getMessage());
        }
        //2.获取数据库连接(里面内容依次是:"jdbc:mysql://主机名:端口号/数据库名?时区参数","用户名","登录密码")
        String dbURL = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
        Connection connection = null;//放外面
        try {
            connection = DriverManager.getConnection(dbURL,"root","root");//(数据库连接,用户名,密码)
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            System.out.printf("生成连接对象有错误+"+throwables.getMessage());
        }
        //3.创建语句对象
        try {
            Statement statement = connection.createStatement();
            //4.需要执行的语句
            String sql = "select * from student";
            ResultSet resultSet = statement.executeQuery(sql);//返回二维结果表
            while(resultSet.next()){    //遍历resultSet
                System.out.println("姓名:"+resultSet.getString("name"));
                System.out.println("年龄:"+resultSet.getInt("age"));
            }
            //5.关闭
            statement.close();

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

三、代码

BoardLoginServlet.java(新)


import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.*;

@javax.servlet.annotation.WebServlet(name = "BoardLoginServlet",urlPatterns = "/board")
public class BoardLoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset = utf-8");
        request.setCharacterEncoding("UTF-8");
        ServletContext context = request.getServletContext();
        HttpSession session=request.getSession();
        String username = request.getParameter("username").trim();
        String password = request.getParameter("password").trim();
        session.setAttribute("username",username);

        //1.注册数据库的驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.printf("加载驱动有错误"+e.getMessage());
        }
        //2.获取数据库连接(里面内容依次是:"jdbc:mysql://主机名:端口号/数据库名","用户名","登录密码")
        String dbURL = "jdbc:mysql://localhost:3306/users?serverTimezone=UTC";
        Connection connection = null;//放外面
        try {
            connection = DriverManager.getConnection(dbURL,"root","root");//(数据库连接,用户名,密码)
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            System.out.printf("生成连接对象有错误+"+throwables.getMessage());
        }
        //3.需要执行的sql语句
        String sql = "select * from pswd where name=?";
        String sql2 = "select * from pswd";
        //4.获取预处理对象,并依次给参数赋值
        try {
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1, username);
            ResultSet resultSet = statement.executeQuery();
            while(resultSet.next()){
                if(!(resultSet.getString("password").equals(password))) {
                    response.sendRedirect("board-error.jsp");
                    return;
                }else{
                    if ((request.getParameter("check") != null) && (request.getParameter("check").equals("check"))){
                        Cookie nameCookie = new Cookie("username", username);
                        Cookie pswdCookie = new Cookie("password", password);
                        nameCookie.setMaxAge(60 * 60);
                        pswdCookie.setMaxAge(60 * 60);
                        nameCookie.setPath("/");
                        pswdCookie.setPath("/");
                        response.addCookie(nameCookie);
                        response.addCookie(pswdCookie);

                        String value1 = "", value2 = "";
                        Cookie cookie = null;
                        Cookie[] cookies = request.getCookies();
                        if (cookies != null) {
                            for (int i = 0; i < cookies.length; i++) {
                                cookie = cookies[i];
                                if (cookie.getName().equals("username"))
                                    value1 = cookie.getValue();
                                if (cookie.getName().equals("password"))
                                    value2 = cookie.getValue();
                            }
                            ResultSet rs = statement.executeQuery(sql2);//返回二维结果表
                            while(rs.next()){    //遍历resultSet
                                if (value1.equals(rs.getString("name")) && value2.equals(rs.getString("password"))) {
                                    response.sendRedirect("board-title.jsp");

                                    return;
                                } else {
                                    response.sendRedirect("board-title.jsp");
                                    return;
                                }
                            }
                        }
                    }
                    else {
                        response.sendRedirect("board-title.jsp");
                        return;
                    }
                }


            }
            statement.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }



    }
}

总结

在使用jdbc过程中出现过很多错误
例如使用try-catch后,登录后出现500
在这里插入图片描述
解决:在sendRedirect后加上return;

另外,此次增加了一个简单的登陆失败页面。

编程小白,有错误请大佬指出…

继续努力!!!








本人原创,欢迎转载~

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用JSP+Servlet+JDBC实现的留言本的示例代码: 1. 创建数据库表 首先,我们需要创建一个数据库表来存储留言信息。可以使用如下的SQL语句创建一个名为message_board的表: ```sql CREATE TABLE message_board ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(20) NOT NULL, message TEXT NOT NULL, create_time DATETIME NOT NULL, PRIMARY KEY (id) ); ``` 2. 创建JSP页面 接下来,我们可以创建一个JSP页面来展示留言信息和留言表单。可以使用如下的代码创建一个名为message_board.jsp的页面: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>留言本</title> </head> <body> <h1>留言板</h1> <%-- 留言展示区域 --%> <hr> <h3>留言列表</h3> <ul> <%-- 使用JSP标签库遍历留言信息 --%> <c:forEach var="message" items="${messages}"> <li><strong>${message.username}</strong> 在 ${message.create_time} 留言:<br>${message.message}</li> </c:forEach> </ul> <hr> <%-- 留言表单区域 --%> <h3>我要留言</h3> <form action="${pageContext.request.contextPath}/message" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>留言内容:</td> <td><textarea name="message" rows="5" cols="50"></textarea></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="提交"></td> </tr> </table> </form> </body> </html> ``` 在上面的代码中,我们使用JSP标签库来遍历留言信息,其中messages是一个List类型的变量,存储了从数据库中查询出来的留言信息。 同时,我们还创建了一个留言表单,用于用户输入留言信息并提交到后台。 3. 创建Servlet 接下来,我们可以创建一个Servlet来处理留言表单的提交和查询留言信息的请求。可以使用如下的代码创建一个名为MessageServletServlet: ```java import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/message") public class MessageServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String JDBC_URL = "jdbc:mysql://localhost:3306/message_board?useSSL=false&characterEncoding=UTF-8"; private static final String JDBC_USERNAME = "root"; private static final String JDBC_PASSWORD = "root"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取留言信息 String username = request.getParameter("username"); String message = request.getParameter("message"); // 将留言信息保存到数据库中 try { // 加载JDBC驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取数据库连接 Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD); // 插入留言信息 String sql = "INSERT INTO message_board (username, message, create_time) VALUES (?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, message); pstmt.setTimestamp(3, new Timestamp(new Date().getTime())); pstmt.executeUpdate(); // 关闭资源 pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } // 重定向到留言板页面,刷新留言列表 response.sendRedirect(request.getContextPath() + "/message_board.jsp"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 查询数据库中的留言列表 List<Message> messages = new ArrayList<>(); try { // 加载JDBC驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取数据库连接 Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD); // 查询留言列表 String sql = "SELECT * FROM message_board ORDER BY create_time DESC"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { Message message = new Message(); message.setId(rs.getInt("id")); message.setUsername(rs.getString("username")); message.setMessage(rs.getString("message")); message.setCreateTime(rs.getTimestamp("create_time")); messages.add(message); } // 关闭资源 rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } // 将留言列表存入request中,用于在JSP页面中展示 request.setAttribute("messages", messages); // 转发到留言板页面 request.getRequestDispatcher("/message_board.jsp").forward(request, response); } } ``` 在上面的代码中,我们实现了doPost方法来处理留言表单的提交请求。首先,我们从request中获取到留言信息,然后使用JDBC将留言信息插入到数据库中。最后,我们重定向到留言板页面,刷新留言列表。 同时,我们还实现了doGet方法来处理查询留言信息的请求。我们使用JDBC从数据库中查询留言列表,并将留言列表存入request中,用于在JSP页面中展示。 4. 创建JavaBean 最后,我们还需要创建一个JavaBean来表示留言信息,可以使用如下的代码创建一个名为Message的JavaBean: ```java import java.sql.Timestamp; public class Message { private int id; private String username; private String message; private Timestamp create_time; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Timestamp getCreateTime() { return create_time; } public void setCreateTime(Timestamp create_time) { this.create_time = create_time; } } ``` 在上面的代码中,我们定义了一个Message类,包含留言的id、用户名、留言内容和创建时间等属性。同时,我们还提供了getter和setter方法,用于获取和设置属性值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值