无法让ajax与jsp一起工作

时间:2012-03-07 16:41:14

标签: javascript ajax jsp

好的,所以我正在学习网页设计作为公司的合作社。但是,我所在的部门缺乏知识渊博的网页设计人员。所以我们走了......

建立一个允许部门管理PTO的网站。我想实现ajax b / c主页面将有一个日历系统,以便经理可以逐周查看PTO。作为其前身,我正在尝试使用“添加员工”页面实现ajax以进行练习。 但是,我似乎无法弄清楚我所缺少的东西(又名,为什么它没有做任何事情)

此页面只需要将新员工添加到数据库中。无需显示。

主页面只有4个文本字段,我从javascript中获取这些字段的信息,如此

    var firstName = document.getElementById("firstNameField");
var lastName = document.getElementById("lastNameField");
var manager = document.getElementById("managerField");
var networkID = document.getElementById("networkIDField");

到目前为止很简单。

所以我设置了这样的ajax代码,(这是从我读过的内容中收集的。

 var url = "addEmpJSP.jsp?firstNameField=" +   escape(firstName)+"&lastNameField="+escape(lastName)+"&managerField="+escape(manager)+"&networkIDField="+escape(networkID);
  xmlhttp.open("POST",url,true);
  xmlhttp.onreadystatechange=dummy;
  xmlhttp.send(null);

这是我假设它正确的部分,因为我还在学习ajax以及它是如何工作的。我不我需要处理一个响应,因为我只是想让被调用的jsp文件自动完成所需的操作。 (如果可能的话)。

jsp文件看起来像这样

<%

ResultSet rsEmpl;
Connection connection1 = getDBConnection();
Statement statment1=connection1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

String fName = request.getParameter("firstNameField");
String lName = request.getParameter("lastNameField");
String manager = request.getParameter("managerField");
String networkID = request.getParameter("networkIDField");
Int empId = 0;

String EditEmplSQL = "select * from PTO_employee";
rsEmpl=statment1.executeQuery(EditEmplSQL);


rsEmpl.last();
empId = rsEmpl.getRow() - 1;


statement1.execute("INSERT INTO PTO_employee VALUES ("+empID+","+lName+","+fName+","+0+","+2+","+networkID);

%>

我在页面上有一个按钮,用于执行包含ajax信息的javascript函数。我正在避免使用jquery atm b / c我试图理解这些东西以及在我尝试使用像jquery这样的“快捷方式”之前它是如何工作的。我正在攻读软件工程学位,所以理解这些东西是我的首要任务,而不是完成它。(这只是一个奖励)如果你需要更多的信息,我可以提供它。对不起,我缺乏知识,如果完全偏离基础,那么:(

1 个答案:

答案 0 :(得分:1)

  

主页面只有4个文本字段,我从javascript中获取这些字段中的信息

var firstName = document.getElementById("firstNameField");
var lastName = document.getElementById("lastNameField");
var manager = document.getElementById("managerField");
var networkID = document.getElementById("networkIDField");

这将为您提供完整的HTML DOM元素,而不是这些元素的。 HTML DOM元素类似于Java类,具有属性,方法等。假设它是像<input>这样的HTML输入元素,那么请使用他们的value属性来获取值。所以:

var firstName = document.getElementById("firstNameField").value;
var lastName = document.getElementById("lastNameField").value;
var manager = document.getElementById("managerField").value;
var networkID = document.getElementById("networkIDField").value;

  

所以我设置了这样的ajax代码,(这是从我读过的内容中收集的。

var url = "addEmpJSP.jsp?firstNameField=" +   escape(firstName)+"&lastNameField="+escape(lastName)+"&managerField="+escape(manager)+"&networkIDField="+escape(networkID);
xmlhttp.open("POST",url,true);
xmlhttp.onreadystatechange=dummy;
xmlhttp.send(null);

escape()功能错误。它逃脱了JS语法,它不编码URI组件。您应该使用encodeURIComponent()函数。


  

jsp文件看起来像这样

...
Int empId = 0;
...

这不编译。它应该是int

...
String EditEmplSQL = "select * from PTO_employee";
rsEmpl=statment1.executeQuery(EditEmplSQL);
rsEmpl.last();
empId = rsEmpl.getRow() - 1;
...

不必要地过于复杂。了解如何使用DB内置序列/自动增量ID。请参阅DB特定手册或向DB管理员寻求帮助。

...
statement1.execute("INSERT INTO PTO_employee VALUES ("+empID+","+lName+","+fName+","+0+","+2+","+networkID);
...

您应该在SQL查询中放置字符串值的引号。假设lNamefNamenetworkID是字符串,而不是数字,那么它应该如下所示:

statement1.execute("INSERT INTO PTO_employee VALUES (" + empID + ",'" + lName + "','" + fName + "'," + 0 + "," + 2 + ",'" + networkID + "'");

但是你有一个巨大的SQL注入攻击漏洞,你似乎也没有在使用后关闭数据库资源,因此它们可能会泄漏并导致你的webapp迟早崩溃,因为数据库耗尽了资源。使用PreparedStatement创建参数化SQL查询并使用其setter设置值。关闭finally块中的资源。

毕竟,读取服务器日志应该为您提供有关编译错误和任何服务器异常的信息。阅读ajax响应应该为您提供有关响应状态和正文的信息。你的核心问题是你忽略了它,因此没有机会了解正在发生的事情。