2012-03-07 159 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