0

我正在创建一个 java servlet 并尝试创建一个新的“实验室”。但是,它没有提交到数据库。在页面加载时查看控制台打印JDBC Driver Loaded,然后在单击提交时'got connection'在控制台中打印出来。当我检查数据库时,信息尚未提交

我尝试提交的表格是:

lab - id, capacity, day, time, room, subject_id, user_id

这是我的 servlet 的代码:

import java.io.IOException;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

    /**
     * Servlet implementation class CreateLab
     */
    @WebServlet("/CreateLab")
    public class CreateLab extends HttpServlet {
        private static final long serialVersionUID = 1L;

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

        private int capacity; 
        private String day = ""; 
        private String time = ""; 
        private String room = ""; 
        private int subject_id;
        private int user_id;

        public void init() {
          try {
              Class.forName("com.mysql.jdbc.Driver");
              Connection con =
                DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
            System.out.println("JDBC driver loaded"); 
          } 
          catch (ClassNotFoundException e) {
            System.out.println(e.toString()); 
          } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        } 

        /**Process the HTTP Get request*/ 
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
      ServletException,IOException {  
          sendPageHeader(response); 
          sendRegistrationForm(request, response, false); 
          sendPageFooter(response); 
        } 

        /**Process the HTTP Post request*/ 
        public void doPost(HttpServletRequest request, 
          HttpServletResponse response) 
          throws ServletException, IOException {
          sendPageHeader(response); 


          day = request.getParameter("day"); 
          time = request.getParameter("time"); 
          room = request.getParameter("room"); 



          boolean error = false; 
          String message = null; 
          try {
              Class.forName("com.mysql.jdbc.Driver");
              Connection con = 
                DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
            System.out.println("got connection"); 
            System.out.println(capacity);
            System.out.println(day);
            System.out.println(time);
            System.out.println(room);
            System.out.println(subject_id);
            System.out.println(user_id);
            Statement s = con.createStatement(); 

            String sql = "SELECT id FROM user" + 
                    " WHERE id='" + user_id + "'";  
            ResultSet rs = s.executeQuery(sql); 
            if (rs.next()) {
              rs.close(); 
               sql = "INSERT INTO lab" + 
                      " (capacity, day, time, room, subject_id, user_id)" + 
                      " VALUES" + 
                      " ('" +  capacity + "'," + 
                         " '"  +  day + "'," + 
                         " '"  +  time + "'," + 
                         " '"  + room + "','" + subject_id +
                         "'," + user_id + "')"; 


              int i = s.executeUpdate(sql); 
              if (i==1) {
                message = "Successfully a new lab class."; 
              } 
            } 
              s.close(); 
              con.close(); 
            } 
            catch (SQLException e) {
              message = "Error." + e.toString(); 
              error = true; 
            } 
            catch (Exception e) {
              message = "Error." + e.toString(); 
              error = true; 
            } 
            if (message!=null) {
              PrintWriter out = response.getWriter(); 
              out.println("<B>" + message + "</B><BR>"); 
              out.println("<HR><BR>"); 
            } 
            if (error==true) 
              sendRegistrationForm(request, response, true); 
            else 
              sendRegistrationForm(request, response, false); 
            sendPageFooter(response); 
          } 

          /** 
           * Send the HTML page header, including the title 
           * and the <BODY> tag 
           */ 
          private void sendPageHeader(HttpServletResponse response) 
            throws ServletException, IOException {
            response.setContentType("text/html"); 
            PrintWriter out = response.getWriter(); 
            out.println("<HTML>"); 
            out.println("<HEAD>"); 
            out.println("<TITLE>Create Lab Page</TITLE>"); 
            out.println("</HEAD>"); 
            out.println("<BODY>"); 
            out.println("<CENTER>"); 
          } 

          /** 
           * Send the HTML page footer, i.e. the </BODY> 
           * and the </HTML> 
           */ 
          private void sendPageFooter(HttpServletResponse response) 
            throws ServletException, IOException {
            PrintWriter out = response.getWriter(); 
            out.println("</CENTER>"); 
            out.println("</BODY>"); 
            out.println("</HTML>"); 
          }   
          /**Send the form where the user can type in 
           * the details for a new user 
           */ 
          private void sendRegistrationForm(HttpServletRequest request, 
            HttpServletResponse response, boolean displayPreviousValues) 
            throws ServletException, IOException {

            PrintWriter out = response.getWriter(); 
            out.println("<BR><H2>Create A Lab</H2>"); 
            out.println("<BR>Please enter the lab details."); 
            out.println("<BR>"); 
            out.println("<BR><FORM METHOD=POST>"); 
            out.println("<TABLE>"); 
            out.println("<TR>"); 
            out.println("<TD>Class Capacity</TD>"); 
            out.print("<TD><INPUT TYPE=TEXT Name=capacity"); 

            if (displayPreviousValues) 
              out.print(" VALUE=\"" + capacity + "\""); 

            out.println("></TD>"); 
            out.println("</TR>"); 
            out.println("<TR>"); 
            out.println("<TD>Day</TD>"); 
            out.print("<TD><INPUT TYPE=TEXT Name=day"); 

            if (displayPreviousValues) 
              out.print(" VALUE=\"" + day + "\""); 

            out.println("></TD>"); 
            out.println("</TR>"); 
            out.println("<TR>"); 
            out.println("<TD>Time</TD>"); 
            out.print("<TD><INPUT TYPE=TEXT Name=time"); 

            if (displayPreviousValues) 
              out.print(" VALUE=\"" + time + "\""); 

            out.println("></TD>"); 
            out.println("</TR>"); 
            out.println("<TR>"); 
            out.println("<TD>Room</TD>"); 
            out.print("<TD><INPUT TYPE=TEXT Name=room");
            if (displayPreviousValues) 
                out.print(" VALUE=\"" + room + "\"");
            out.println("></TD>");
            out.println("</TR>");
            out.println("<TR>");
            out.println("<TD>subject_id</TD>");
            out.print("<TD><INPUT TYPE=TEXT Name=subject_id");
            if (displayPreviousValues) 
                out.print(" VALUE=\"" + subject_id + "\"");
            out.println("></TD>");
            out.println("</TR>");
            out.println("<TR>");
            out.println("<TD>user_id</TD>");
            out.print("<TD><INPUT TYPE=TEXT Name=user_id");
            out.println("></TD>");
            out.println("</TR>");

            if (displayPreviousValues) 
            out.print(" VALUE=\"" + user_id + "\""); 
            out.println("</TD>"); 
            out.println("</TR>");

            out.println("<TR>"); 
            out.println("<TD><INPUT TYPE=RESET></TD>"); 
            out.println("<TD><INPUT TYPE=SUBMIT></TD>"); 
            out.println("</TR>"); 
            out.println("</TABLE>"); 
            out.println("</FORM>"); 
            out.println("<BR>"); 
            out.println("<BR>"); 
          }
      }
4

2 回答 2

0

我注意到你从来没有分配你的subject_id,除了0在声明它时初始化它。看起来您将其作为表单字段,因此您可能想像使用day,time和一样从请求中提取它room。我承认我也不理解实现的逻辑(如果该主题已经存在一个实验室,则只创建一个实验室),但这既不在这里也不在那里。

关于您的代码的几点反馈。

  1. Servlet 不是线程绑定的。servlet 类的一个实例可用于处理对同一 URL 的多个并发请求。因此,您需要考虑线程安全。您的代码绝对不是线程安全的,因为您在服务方法中使用实例变量(capacitydaytime)。
  2. 如今,在 Java 代码中打印 HTML 并不是真正的做法。至少,您应该始终转发到 JSP 页面来呈现视图。更常见的是使用许多 MVC 或基于组件的 Web 框架之一(Spring、Struts、JSF 等)。
  3. 使用有效的 HTML。例如,没有<input type=int ...>. 见http://www.w3schools.com/html/html_forms.asp
于 2012-10-02T07:50:47.637 回答
-1
import java.io.IOException;


import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CreateLab
 */
@WebServlet("/CreateLab")
public class CreateLab extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

     int capacity; 
     String day = ""; 
     String time = ""; 
     String room = ""; 
     int subject_id;
     int user_id;

    public void init() {
      try {
          Class.forName("com.mysql.jdbc.Driver");
          Connection con =
            DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
        System.out.println("JDBC driver loaded"); 
      } 
      catch (ClassNotFoundException e) {
        System.out.println(e.toString()); 
      } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    } 

    /**Process the HTTP Get request*/ 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
  ServletException,IOException {  
      sendPageHeader(response); 
      sendRegistrationForm(request, response, false); 
      sendPageFooter(response); 
    } 

    /**Process the HTTP Post request*/ 
    public void doPost(HttpServletRequest request, 
      HttpServletResponse response) 
      throws ServletException, IOException {
      sendPageHeader(response); 

      capacity = Integer.parseInt(request.getParameter("capacity")); 
      day = request.getParameter("day"); 
      time = request.getParameter("time"); 
      room = request.getParameter("room"); 
      user_id = Integer.parseInt(request.getParameter("user_id")); 
      subject_id = Integer.parseInt(request.getParameter("subject_id")); 


      boolean error = false; 
      String message = null; 
      try {
          Class.forName("com.mysql.jdbc.Driver");
          Connection con = 
            DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
        System.out.println("got connection"); 
        System.out.println(capacity);
        System.out.println(day);
        System.out.println(time);
        System.out.println(room);
        System.out.println(subject_id);
        System.out.println(user_id);
        Statement s = con.createStatement(); 

        String sql = "SELECT id FROM user" + 
                " WHERE id='" + user_id + "'";  
        ResultSet rs = s.executeQuery(sql); 
        if (rs.next()) {
          rs.close(); 
           sql = "INSERT INTO lab" + 
                  " (capacity, day, time, room, subject_id, user_id)" + 
                  " VALUES" + 
                  " ('" +  capacity + "'," + 
                     " '"  +  day + "'," + 
                     " '"  +  time + "'," + 
                     " '"  + room + "','" + subject_id + "','" + user_id + "')"; 

          System.out.println(sql);
          int i = s.executeUpdate(sql); 
          if (i==1) {
            message = "Successfully a new lab class."; 
          } 
        } 
          s.close(); 
          con.close(); 
        } 
        catch (SQLException e) {
          message = "Error." + e.toString(); 
          error = true; 
        } 
        catch (Exception e) {
          message = "Error." + e.toString(); 
          error = true; 
        } 
        if (message!=null) {
          PrintWriter out = response.getWriter(); 
          out.println("<B>" + message + "</B><BR>"); 
          out.println("<HR><BR>"); 
        } 
        if (error==true) 
          sendRegistrationForm(request, response, true); 
        else 
          sendRegistrationForm(request, response, false); 
        sendPageFooter(response); 
      } 

      /** 
       * Send the HTML page header, including the title 
       * and the <BODY> tag 
       */ 
      private void sendPageHeader(HttpServletResponse response) 
        throws ServletException, IOException {
        response.setContentType("text/html"); 
        PrintWriter out = response.getWriter(); 
        out.println("<HTML>"); 
        out.println("<HEAD>"); 
        out.println("<TITLE>Create Lab Page</TITLE>"); 
        out.println("</HEAD>"); 
        out.println("<BODY>"); 
        out.println("<CENTER>"); 
      } 

      /** 
       * Send the HTML page footer, i.e. the </BODY> 
       * and the </HTML> 
       */ 
      private void sendPageFooter(HttpServletResponse response) 
        throws ServletException, IOException {
        PrintWriter out = response.getWriter(); 
        out.println("</CENTER>"); 
        out.println("</BODY>"); 
        out.println("</HTML>"); 
      }   
      /**Send the form where the user can type in 
       * the details for a new user 
       */ 
      private void sendRegistrationForm(HttpServletRequest request, 
        HttpServletResponse response, boolean displayPreviousValues) 
        throws ServletException, IOException {

        PrintWriter out = response.getWriter(); 
        out.println("<BR><H2>Create A Lab</H2>"); 
        out.println("<BR>Please enter the lab details."); 
        out.println("<BR>"); 
        out.println("<BR><FORM METHOD=POST>"); 
        out.println("<TABLE>"); 
        out.println("<TR>"); 
        out.println("<TD>Class Capacity</TD>"); 
        out.print("<TD><INPUT TYPE=TEXT Name=capacity"); 

        if (displayPreviousValues) 
          out.print(" VALUE=\"" + capacity + "\""); 

        out.println("></TD>"); 
        out.println("</TR>"); 
        out.println("<TR>"); 
        out.println("<TD>Day</TD>"); 
        out.print("<TD><INPUT TYPE=TEXT Name=day"); 

        if (displayPreviousValues) 
          out.print(" VALUE=\"" + day + "\""); 

        out.println("></TD>"); 
        out.println("</TR>"); 
        out.println("<TR>"); 
        out.println("<TD>Time</TD>"); 
        out.print("<TD><INPUT TYPE=TEXT Name=time"); 

        if (displayPreviousValues) 
          out.print(" VALUE=\"" + time + "\""); 

        out.println("></TD>"); 
        out.println("</TR>"); 
        out.println("<TR>"); 
        out.println("<TD>Room</TD>"); 
        out.print("<TD><INPUT TYPE=TEXT Name=room");
        if (displayPreviousValues) 
            out.print(" VALUE=\"" + room + "\"");
        out.println("></TD>");
        out.println("</TR>");
        out.println("<TR>");
        out.println("<TD>subject_id</TD>");
        out.print("<TD><INPUT TYPE=TEXT Name=subject_id");
        if (displayPreviousValues) 
            out.print(" VALUE=\"" + subject_id + "\"");
        out.println("></TD>");
        out.println("</TR>");
        out.println("<TR>");
        out.println("<TD>user_id</TD>");
        out.print("<TD><INPUT TYPE=TEXT Name=user_id");
        out.println("></TD>");
        out.println("</TR>");

        if (displayPreviousValues) 
        out.print(" VALUE=\"" + user_id + "\""); 
        out.println("</TD>"); 
        out.println("</TR>");

        out.println("<TR>"); 
        out.println("<TD><INPUT TYPE=RESET></TD>"); 
        out.println("<TD><INPUT TYPE=SUBMIT></TD>"); 
        out.println("</TR>"); 
        out.println("</TABLE>"); 
        out.println("</FORM>"); 
        out.println("<BR>"); 
        out.println("<BR>"); 
      }
      }
于 2012-10-02T10:59:56.477 回答