Java Servlet未使用新数据更新数据库

Java Servlet未使用新数据更新数据库,java,mysql,jsp,session,servlets,Java,Mysql,Jsp,Session,Servlets,我在更新servlet方面遇到了一些小问题 我试图更新我的数据库,但它只是没有发生。我不熟悉JavaEE的这一章 **注意:我只是在使用UpdateServlet时遇到了问题,因为我不知道如何从JSP获取修改后的数据,以便将其发送到DAO,然后更新数据库。剩下的没问题 目的:当用户点击“更新”按钮(下面的屏幕截图)时 。。。JSP将请求转发到“更新用户”页面(如下),在该页面中,他将能够修改附加到电子邮件的名字和姓氏(这是主键)(下面的屏幕截图) 我的问题是:如何实现从会话中获取用户对象并用

我在更新servlet方面遇到了一些小问题

我试图更新我的数据库,但它只是没有发生。我不熟悉JavaEE的这一章

**注意:我只是在使用UpdateServlet时遇到了问题,因为我不知道如何从JSP获取修改后的数据,以便将其发送到DAO,然后更新数据库。剩下的没问题

目的:当用户点击“更新”按钮(下面的屏幕截图)时

。。。JSP将请求转发到“更新用户”页面(如下),在该页面中,他将能够修改附加到电子邮件的名字和姓氏(这是主键)(下面的屏幕截图)

我的问题是:如何实现从会话中获取用户对象并用新的名字和姓氏更新数据库的UpdateUserServlet(请参见下面的代码)

显示用户列表的JSP

<body>

<h1>Users List</h1>

<table cellpadding="5" border=1>

  <tr valign="bottom">
    <th>First Name</th>
    <th>Last Name</th>
    <th>Email Address</th>
  </tr>

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  <c:forEach var="user" items="${users}">
  <tr valign="top">
    <td><p>${user.firstName}</td>
    <td><p>${user.lastName}</td>
    <td><p>${user.emailAddress}</td>
    <td><a href="displayUser?emailAddress=${user.emailAddress}">Update</a></td>
    <td><a href="deleteUser?emailAddress=${user.emailAddress}">Delete</a></td>
  </tr>
  </c:forEach>

</table>

</body>

package data;

import java.sql.*;
import java.util.ArrayList;

import business.User;

public class UserDB

{

    public static int update(User user) {
        ConnectionPool pool = ConnectionPool.getInstance();
        Connection connection = pool.getConnection();
        PreparedStatement ps = null;

        String query = "UPDATE User SET " + "FirstName = ?, " + "LastName = ? "
                + "WHERE EmailAddress = ?";
        try {
            ps = connection.prepareStatement(query);
            ps.setString(1, user.getFirstName());
            ps.setString(2, user.getLastName());
            ps.setString(3, user.getEmailAddress());

            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } finally {
            DBUtil.closePreparedStatement(ps);
            pool.freeConnection(connection);
        }
    }

}

尝试将日志添加到
更新(用户)
方法。如果atall的话,看看控件是否到达了这个位置。

我在第二个JSP中找到了根本原因,请参阅下面的代码

<tr>
        <td align="right">Email address:</td>

        <td>${user.emailAddress}</td>
    </tr>    

电邮地址:
${user.emailAddress}
servlet的getParameter(“emailAddress”)方法实际上得到了一个空值,因为上面的代码中没有参数名

所以,应该这样做:

<tr>
        <td align="right">Email address:</td>
        <td><input type="text" name="emailaddress" 
                value="${user.emailaddress}">
        </td>
    </tr>

电邮地址:

请注意,-输入type=“text”-是不必要的,因为电子邮件地址不必像名称和firsname那样进行修改。因此,我应该想办法在输入文本框之外的其他地方显示电子邮件地址。但它现在可以工作了

如果用户点击提交按钮会发生什么?servlet成功了吗?单击Submit之后,servlet中每个参数的值是多少?当用户单击Submit时,将调用UpdateUserServlet,DB中的表行将获得用户输入的新名称和名字。之后,UpdateUserServlet将请求转发回主Servlet(DisplayUserServlet),以便在用户更新后显示usersList。目前,当我在键入新名称和firstname后单击submit时,转发到UserList的工作非常完美,除了名字和名字没有在数据库中更新。你看到任何异常吗?(您确定您的serlvet在请求参数中获得了新输入的firstName和lastName)。更新表的逻辑看起来并不错误。没有任何异常。如果我确定serlvet在请求参数中获得了新输入的firstName和lastName?什么也没发生。我的servlet似乎没有从JSP ans中得到任何东西,而JSP ans正是我问题的核心。为什么我的servlet没有获取新数据。我知道这是一个相当基本的东西,但我无法理解
<tr>
        <td align="right">Email address:</td>

        <td>${user.emailAddress}</td>
    </tr>    
<tr>
        <td align="right">Email address:</td>
        <td><input type="text" name="emailaddress" 
                value="${user.emailaddress}">
        </td>
    </tr>