【问题标题】:Request parameters become null请求参数变为空
【发布时间】:2015-04-25 17:42:37
【问题描述】:

不久前我的代码运行良好,直到我的同学发送了一个修改过的 HTML 文件并且每个参数现在都为空。我真的不知道发生了什么。我将信息从表单传输到 servlet,从 servlet 传输到数据库。这是表单的代码:

                            <form method="post" action="informationTransfer">
                                <div class='row'>
                                    <div class='col-md-6'>
                                        <label for="username">User Name</label>
                                        <input type="text" class="form-control" id="username" placeholder="User Name" name='username' required>
                                    </div>
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-6'>
                                        <label for="lastName">Last Name</label>
                                        <input type="text" class="form-control" id="lastName" placeholder="Last Name" name='LastName' required>
                                    </div>
                                    <div class='col-md-6'>
                                        <label for="firstName">Name</label>
                                        <input type="text" class="form-control" id="firstName" placeholder="First Name" name='FirstName' required>
                                    </div>                                                        
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-6'>
                                        <label for="lastName">E-Mail</label>
                                        <input type="email" class="form-control" id="email_1" placeholder="E-Mail Address" name='Email' required>
                                    </div>
                                    <div class='col-md-6'>
                                        <label for="firstName">Confirm E-Mail</label>
                                        <input type="email" class="form-control" id="email_2" placeholder="Confirm E-Mail Address" required>
                                    </div>
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-6'>
                                        <label for="lastName">Password</label>
                                        <input type="password" class="form-control" id="password_1" placeholder="Password" name='Password' required>
                                    </div>
                                    <div class='col-md-6'>
                                        <label for="firstName">Confirm Password</label>
                                        <input type="password" class="form-control" id="password_2" placeholder="Confirm Password" required>
                                    </div>
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-6'>
                                        <label for='birthDate'>Birthday</label>
                                        <div class="bfh-datepicker" data-max="today" data-close="false" data-date="today" data-format="y-m-d">
                                            <input id="birthDate" type="text" data-name="birthDate" name='Birthdate' style='background-color:white;'>
                                        </div>
                                    </div>
                                    <div class='col-md-6'>
                                        <label for='gender'>Gender</label>
                                        <select class='form-control' name='gender'>
                                            <option>Male</option>
                                            <option>Female</option>
                                        </select>
                                    </div>
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-4'>
                                        <label for="countries_selectors">Country</label>
                                        <select id="countries_selectors" class="form-control bfh-countries" data-country="PH" name='country' required></select>
                                    </div>
                                    <div class='col-md-4'>
                                        <label for="State">State</label>
                                        <select class="form-control bfh-states" data-country="countries_selectors" id='State' name='State' required></select>
                                    </div>
                                    <div class='col-md-4'>
                                        <label for="zip">Zip Code</label>
                                        <input type="zip" class="form-control" id="zip" placeholder="Zip Code" name='zipcode' required>
                                    </div>
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-12'>
                                        <label for="address">Home Address</label>
                                        <input type="text" class="form-control" id="address" placeholder="Last Name" name='Address' required>
                                        </select>
                                    </div>
                                </div>
                                <br />
                                <div class='row'>
                                    <div class='col-md-10'>
                                        <label for="phone">Contact Number</label>
                                        <input type="text" class="form-control bfh-phone" data-country="countries_selectors" id="phone" name='PhoneNumber'>
                                    </div>  
                                    <div class='col-md-2'>
                                        <label for="signup_b"><br /></label>
                                        <button type="submit" class="btn btn-default  center-block" name='signup_b'>Sign Up!</button>
                                    </div>
                                </div>


                            </form>

这是 servlet 的代码:

@WebServlet(description = "transfers contents of bean to database", urlPatterns = { "/informationTransfer" })
public class transferInfo extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            toDatabase(request, response);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            toDatabase(request, response);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private void toDatabase(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, ClassNotFoundException
    {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/FoundationSystem","root","!Qaz2wsx");
        con.setAutoCommit(false);
        try
        {
            PreparedStatement stmt1, stmt2, stmt3;
            stmt1 = con.prepareStatement("INSERT INTO AddressInformation (AddressID, Country, ZipCode, State, Address) VALUES (null,?,?,?,?)");
            stmt1.setString(1, request.getParameter("country"));
            stmt1.setString(2, request.getParameter("zipCode"));
            stmt1.setString(3, request.getParameter("state"));
            stmt1.setString(4, request.getParameter("address"));
            stmt1.executeUpdate();
            stmt2 = con.prepareStatement("INSERT INTO AccountDetails VALUES (?,?,?,?,?)");
            stmt2.setString(1, request.getParameter("username"));
            stmt2.setString(2, request.getParameter("password"));
            stmt2.setString(3, null);
            stmt2.setString(4, null);
            stmt2.setInt(5, 3);
            stmt2.executeUpdate();
            stmt3 = con.prepareStatement("INSERT INTO PersonalInformation VALUES (?,?,?,?,?,?,?,?)");
            Statement address = con.createStatement();
            ResultSet result = address.executeQuery("SELECT max(AddressID) FROM AddressInformation");
            result.next();
            stmt3.setString(1, request.getParameter("userName"));
            stmt3.setString(2, request.getParameter("lastName"));
            stmt3.setString(3, request.getParameter("firstName"));
            stmt3.setString(4, request.getParameter("gender"));
            stmt3.setString(5, request.getParameter("birthdate"));
            stmt3.setInt(6, result.getInt(1));
            stmt3.setString(7, request.getParameter("email"));
            stmt3.setString(8, request.getParameter("phoneNumber"));
            stmt3.executeUpdate();
            con.commit();
            //response.sendRedirect();
        }
        catch (Exception e)
        { 
            con.rollback();
            System.out.println(e);
        }
    }
}

【问题讨论】:

  • 您的输入名称属性以大写字母开头,并且您以小写形式获取它们,因此 stmt3.setString(3, request.getParameter("firstName"));应该是 stmt3.setString(3, request.getParameter("FirstName"));

标签: java mysql servlets


【解决方案1】:

在这里处理一下。例如。

<input type="zip" class="form-control" id="zip" placeholder="Zip Code" name='zipcode' required>

您通过

获得此数据
stmt1.setString(2, request.getParameter("zipcode"));

而不是

stmt1.setString(2, request.getParameter("zipCode")); // C is capital

表单中input 标记的name 应与您在getParameter() 方法中使用的参数名称匹配。

【讨论】:

    【解决方案2】:

    似乎是名称大小写问题。匹配 html 文件中输入字段的参数名称和 servlet 中的 request.getParameter("fieldName")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-08
      • 2016-09-06
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多