【发布时间】:2015-07-20 22:09:23
【问题描述】:
我正在学习 Java servlet,我为“GET”和“POST”编写了两个单独的 servlet。当“GET”请求发送到服务器时,servlet 访问数据库并检索所有内容并将结果转换为 Google Charts 可以识别的格式。当“POST”请求发送到服务器时,servlet 获取参数并将它们添加到 Java 对象中,然后 DAO 将数据添加到数据库中。但是,当我在输入后点击“添加”按钮时,Web 应用程序根本找不到 servlet。它只是简单地“跳过”ajax 函数并继续。所以这是执行插入的 servlet:
@WebServlet("/InsertServlet")
public class InsertServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private EmployeeDao dao;
public InsertServlet() throws SQLException
{
super();
dao = new EmployeeDao();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("doPost");
Employee e = new Employee();
e.setName(request.getParameter("name"));
e.setSSN(request.getParameter("ssn"));
e.setDob(request.getParameter("birth"));
e.setIncome(request.getParameter("xxxx"));
dao.addEmployee(e);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<h2>Data Entry Added</h2><br>");
out.println("<h2>"+request.getParameter("name")+"</h2>");
out.println("<h2>"+request.getParameter("ssn")+"</h2>");
out.println("<h2>"+request.getParameter("birth")+"</h2>");
out.println("<h2>"+request.getParameter("xxxx")+"</h2>");
out.flush();
out.close();
}
}
这是 index.html:
<form id="inputForm">
<table style="width:80%;border:3px;">
<tr>
<td align="center"><input type="text" name="name" id="name" placeholder="First Last"></td>
<td align="center"><input type="text" name="ssn" id="ssn" placeholder="111111111"></td>
<td align="center"><input type="text" name="birth" id="birth" placeholder="MM/DD/YYYY"></td>
<td align="center"><input type="text" name="xxxx" id="xxxx" placeholder="12345"></td>
<td align="center"><button type="button" name="add" id="add" >Add</button></td>
<td align="center"><button type="button" name="delete" id="delete">Delete</button></td>
</tr>
</table>
</form>
$("#add").click(function() {
var nameIn = $('#name').val();
var ssnIn = $('#ssn').val();
var birthIn = $('#birth').val();
var xxxxIn = $('#xxxx').val();
if (validate(nameIn, ssnIn, birthIn, xxxxIn) === true) {
xxxxIn = "\$" + xxxxIn;
var ssn1 = ssnIn.substring(0, 3);
var ssn2 = ssnIn.substring(3, 5);
var ssn3 = ssnIn.substring(5);
ssnIn = ssn1 + '-' + ssn2 + '-' + ssn3;
$.post("InsertServlet", $("#inputForm").serialize(), function(responseHtml) {
$('#state').html(responseHtml);
});
window.setTimeout(redraw, 1000);
redraw();
}
});
编辑 1:因此 Web 应用程序一直运行到“add”的 $ajax 发送正确请求的地步。 JS 函数运行良好。请求具有与属性对应的正确值。但是,在调用 /InsertServlet URL 时,Web 应用程序似乎只是忽略了 servlet,并且 getParameter 方法在 doPost 方法中都返回 null。
编辑 2:Tomcat 版本:7.0.61。 JDK版本:1.7.0_45。 Servlet 版本:3.0
【问题讨论】:
-
请根据基于开发人员的观点的技术观察来描述问题,而不是基于最终用户的观点的假设。第一步,JavaScript 代码是否正确执行?
$.ajax()是否已执行,是否发送了正确的 XML HTTP 请求? (在 webbrowser 的 web 开发人员工具集中的 HTTP 流量监视器中可见)。而且,如果您能提供 MCVE 风格的代码,那就太好了。到目前为止发布的代码中有太多不相关的噪音。另见stackoverflow.com/help/mcve -
@BalusC 所以我编辑了这个问题,我的主要困惑是 InsertServlet 被简单地忽略了,但另一个更新 Google Chart Table 的 servlet 工作正常,并且它们具有相似的配置。跨度>
-
根据您的编辑,因此 servlet 被正确调用(因此实际上没有被忽略),只是请求参数都是
null? -
@BalusC 是响应字符串中所有参数都返回null
-
您没有在标题和问题中说明这一点。