首页 > 编程语言 > 详细

JAVAEE_Servlet_19_重定向可以解决页面刷新问题(sendRedirect)

时间:2021-04-23 16:56:20      阅读:22      评论:0      收藏:0      [点我收藏+]

重定向可以解决页面刷新问题(sendRedirect)

  • 在向数据库中添加数据的时候,如果使用转发(getRequestDispatcher),数据插入成功后,转发到提示插入成功页面,在数据插入成功页面刷新该页面,那么就会再次向数据库中添加一遍该数据,因为转发是一次请求,刷新一次添加一次数据。

  • 如果使用重定向(sendRedirect),那么数据插入成功之后跳转到提示插入成功页面,此时刷新该页面,刷新的只是提示插入成功页面,因为重定向是两次请求。

  • 代码:

    • 向数据库中插入数据Servlet

      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      import java.io.PrintWriter;
      import java.sql.*;
      
      public class SaveServlet  extends HttpServlet {
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              //解决中文乱码问题
              request.setCharacterEncoding("UTF-8");
      
              //获取表单数据
              String userCode=request.getParameter("usercode");
              String userName=request.getParameter("username");
      
              //创建数据库连接对象
              Connection connection=null;
              PreparedStatement preparedStatement=null;
      
              try {
                  // 连接数据库
                  Class.forName("com.mysql.cj.jdbc.Driver");
      
                  // 获取连接
                  connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
                          "root","123456");
      
                  // 获取预编译数据库操作对象
                  String sql="insert into t_user(usercode,username)values(?,?)";
                  preparedStatement=connection.prepareStatement(sql);
      
                  //给预编译数据库操作对象插入值
                  preparedStatement.setString(1,userCode);
                  preparedStatement.setString(2,userName);
      
                  //执行SQL语句
                  int count=preparedStatement.executeUpdate();
      
                  // 显示执行结果
                  response.setContentType("text/html;charset=UTF-8");
                  PrintWriter out=response.getWriter();
                  if(count!=0){
                      out.print("数据插入成功,正在跳转...");
                      //转发
                      //request.getRequestDispatcher("/SearchServlet").forward(request,response);
                      //跳转
                      response.sendRedirect("/myWeb/SearchServlet");
                  }
      
              } catch (ClassNotFoundException | SQLException e) {
                  e.printStackTrace();
              }finally {
      
                  //释放资源
                  if(preparedStatement!=null){
                      try {
                          preparedStatement.close();
                      } catch (SQLException e) {
                          e.printStackTrace();
                      }
                  }
      
                  if(connection!=null){
                      try {
                          connection.close();
                      } catch (SQLException e) {
                          e.printStackTrace();
                      }
                  }
              }
          }
      }
      

     - 提示成功页面,并把数据库中的数据显示出来的  Servlet

      

        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;
        import java.io.PrintWriter;
        import java.sql.*;

        public class SearchServlet extends HttpServlet {
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                //解决中文乱码问题
                request.setCharacterEncoding("UTF-8");

                //创建数据库连接对象
                Connection connection=null;
                PreparedStatement preparedStatement=null;
                ResultSet resultSet=null;

                try {

                    // 连接数据库
                    Class.forName("com.mysql.cj.jdbc.Driver");

                    // 获取连接
                    connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
                            "root","123456");

                    // 获取预编译数据库操作对象
                    String sql="select * from t_user";
                    preparedStatement=connection.prepareStatement(sql);

                    //执行SQL语句
                    resultSet=preparedStatement.executeQuery();

                    //处理查询结果集
                    response.setContentType("text/html;charset=UTF-8");
                    PrintWriter out=response.getWriter();
                    //HTML代码
                    out.print("          <!DOCTYPE html>");
                    out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
                    out.print("  <head>");
                    out.print("      <meta charset=‘UTF-8‘>");
                    out.print("      <title>用户信息</title>");
                    out.print("  </head>");
                    out.print("     <body>");
                    out.print("          <h3 align=‘center‘>用户信息表</h3>");
                    out.print("          <hr width=‘60%‘>");
                    out.print("          <table border=‘1‘ align=‘center‘ width=‘50%‘>");
                    out.print("              <tr align=‘center‘>");
                    out.print("                  <th>序号</th>");
                    out.print("                  <th>用户编号</th>");
                    out.print("                  <th>用户姓名</th>");
                    out.print("              </tr>");
                    int i=1;
                    while(resultSet.next()){
                      String userCode=resultSet.getString("usercode");
                      String userName=resultSet.getString("username");
                        out.print("              <tr align=‘center‘>");
                        out.print("                  <th>"+(i++)+"</th>");
                        out.print("                  <th>"+userCode+"</th>");
                        out.print("                  <th>"+userName+"</th>");
                        out.print("              </tr>");
                    }

                    out.print("          </table>");
                    out.print("    </body>");
                    out.print("  </html>");

                } catch (ClassNotFoundException | SQLException e) {
                    e.printStackTrace();
                }finally {

                    //释放资源
                    if(resultSet!=null){
                        try {
                            resultSet.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                    if(preparedStatement!=null){
                        try {
                            preparedStatement.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }

                    if(connection!=null){
                        try {
                            connection.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                }


            }
        }

JAVAEE_Servlet_19_重定向可以解决页面刷新问题(sendRedirect)

原文:https://www.cnblogs.com/szqengr/p/14693284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!