2012-03-07 207 views
0

好的,所以我正在学习网页设计作为一家公司的合作社。但是,我所在的部门在网页设计方面缺乏知识渊博的人才。所以在这里我们去...不能让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

主要页面只是有4个文本框和我从这些领域的信息在JavaScript像这样

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

这给你提供了完整的HTML DOM元素,而不是这些元素。用属性来获得值。所以:

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。参考数据库特定手册或向数据库管理员寻求帮助。

... 
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注入攻击孔,你好像也并不都关闭数据库资源使用后,所以它们可能会泄漏并导致您的Web应用程序迟早会崩溃,因为数据库耗尽资源。使用PreparedStatement创建参数化SQL查询并使用其设置器设置值。关闭finally区块中的资源。

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

+0

“不必要的过度复杂,学习如何使用DB内置序列/自动增量ID”。 学习资源? – cphilpot 2012-03-07 16:58:56

+0

“应该可以正常工作,但是你有一个巨大的SQL注入攻击漏洞” 我对此很陌生,解释为什么? “ – cphilpot 2012-03-07 16:59:49

+0

”这会为您提供完整的HTML DOM元素,而不是这些元素的值。假设它是输入元素,请改为使用它们的值属性。“ 过度,谢谢。 – cphilpot 2012-03-07 17:01:19