java - 发布到 self servlet 创建无限循环

标签 java mysql servlets post

我正在尝试开发一个 servlet 页面,该页面将显示一个表单,用户将填写该表单并发布到 servlet 本身(问题)。我粘贴了下面的所有代码。当我调用 servlet 时,页面显示正常,我可以填写表单,但是当我单击提交并发布它时,程序进入一个循环,其中 mysql insert 命令无限期地运行,我被迫停止程序。

问题似乎来自以下行:

request.getRequestDispatcher("/problem").include(request, response);

然而,这是我在发布页面后再次调用 servlet 的唯一方法,但不知何故,这创建了一个程序循环。知道为什么会这样吗?

下面是我的 servlet:

@WebServlet(description = "Problem Page", urlPatterns = { "/problem" })
public class ProblemPage extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public ProblemPage() {
    super();
    // TODO Auto-generated constructor stub
}

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String problemID = request.getParameter("pbid");
    String option = request.getParameter("opt");
    String productID = request.getParameter("pdid");

    if(problemID==null && option==null && productID==null) {
        PrintWriter out = response.getWriter();

        try {
            for(String printLine:(new Problem()).printProblemAdd()) {
                out.print(printLine);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else if(problemID!=null && option!=null && productID==null) {
        if(option.equals("edit")) {
            request.getRequestDispatcher("problem").include(request, response);  
        } else if(option.equals("del")) {

        } else {
            PrintWriter out = response.getWriter();
            out.print("<p>Page is invalid.</p>");
        }

    } else if(problemID==null && option==null && productID!=null) {
        //Lists problems for product

        Problem problem = new Problem(productID);
        PrintWriter out = response.getWriter();
        try {
            for(String printLine:problem.print()) {
                out.print(printLine);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else {
        //Page is invalid
        PrintWriter out = response.getWriter();
        out.print("<p>Page is invalid.</p>");
    }
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
      String Url = "jdbc:mysql://localhost:3306/";
      String DbName = "knowledge";
      String Driver = "com.mysql.jdbc.Driver";
      String UserName = "root"; 
      String Password = "";
      Connection Conn = null;         

    try {
        Class.forName(Driver).newInstance();
          Conn = (Connection) DriverManager.getConnection(Url + DbName,UserName,Password);
          //St = (Statement) Conn.createStatement();

          String mysqlQuery = "INSERT INTO problems (ID,productID,description) VALUES (?,?,?);";
          PreparedStatement updateStatement = (PreparedStatement) Conn.prepareStatement(mysqlQuery);
          updateStatement.setInt(1,0);
          updateStatement.setString(2, request.getParameter("productid"));
          updateStatement.setString(3, request.getParameter("description"));
          int Res = updateStatement.executeUpdate();    

          request.setAttribute("message", Res>0?"Record added: " + request.getParameter("description"):"Record failed");


          Conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
          try {
              Conn.close();
          } catch(Exception e) {
              e.printStackTrace();
          }
    }
    request.getRequestDispatcher("/problem").include(request, response);  
}
}

最佳答案

看起来最后一行试图使用相同的请求调用相同的处理程序,这导致了循环? Oracle docs

关于java - 发布到 self servlet 创建无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863518/

相关文章:

java - 如何在 fedora 中 mvndebug

java - 从表面 View 开始一个新的 Activity

php - 创建一个 MYSQL Select 语句,结合来自购物篮和产品表的信息

mysql - 尝试通过 servlet 连接 mySql 时出现 "java.lang.ClassNotFoundException"

java - 为什么任何 try/catch 过去的 while 循环都会导致空指针异常

java - 我在哪里可以找到由 Eclipse 中的 servlet 创建的文本文件

java - 泽西客户端 : How to add a list as query parameter

java - JFrame 在更改其内容和 pack() 时闪烁

php - 使用 mysql php 自动更新图像,我假设 javascript

c# - 将 MySQL PASSWORD() 与 Entity Framework 结合使用