插入数据后无法在响应提交后转发

时间:2016-01-11 04:40:10

标签: java servlets

“这里是插入数据后的代码,它不能转发索引页面请帮帮我...... 之后我也无法获取数据...... “ “

public class insertData extends HttpServlet {

String query;

static Connection conn;
//Statement st;
PreparedStatement pst;
ResultSet res;
ConnectionManager dbconn;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {

        dbconn= new ConnectionManager();

        String id=request.getParameter("id");
        String fname=request.getParameter("fname");
        String lname=request.getParameter("lname");
        String pass=request.getParameter("pass");
        String mobile=request.getParameter("mbl");
        String email=request.getParameter("email");


        conn=dbconn.getConnection();
         //pst=conn.createStatement();
        pst=conn.prepareStatement ("INSERT INTO reg(`id`, `fname`, `lname`, `pass`, `mbl`, `email`) VALUES (?,?,?,?,?,?)");
       // query="insert into reg(id('"+id+"','"+fname+"','"+lname+"','"+pass+"','"+mobile+"','"+email+"')";
        pst.setString(1, id);
        pst.setString(2, fname);
        pst.setString(3, lname);
        pst.setString(4, pass);
        pst.setString(5, mobile);
        pst.setString(6,email);

        int i=pst.executeUpdate();



    }
    catch(Exception e)
    {
      //System.out.println("Exception"+e.getMessage());
      request.setAttribute("Error",e);
      RequestDispatcher rd=request.getRequestDispatcher("/error.jsp");
      rd.forward(request, response);

    }
    finally
    {
        RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");
        rd.forward(request, response);


    }
}

所以......我怎么能解决这个问题,请帮助我......提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

当按照上述代码发生异常时,它会使用RequestDispatcher将请求转发给error.jsp。一旦发生这种情况,您的请求即被提交,现在您无法再使用

但是你有一个finally块 - 会被执行,无论try块是成功还是抛出异常。你再次尝试获得RequestDispatcher在那里转发到index.jsp,从而得到上述错误。

不确定您的确切用例,但感觉您可以重定向到index.jsp作为Try阻止自身的最后一步。并完全删除finally块。

还有一点要注意的是,不建议在Servlet本身编写与JDBC / DB相关的代码,您可以为此创建一个单独的DAO类,它将带来更好的抽象和模块化。