2014-11-01 119 views
0

我試圖編譯一些代碼,並使其在通過虛擬機創建的此Web服務索引程序中正常工作。Web服務器代碼無法正常工作

package com.cs330; 
import javax.ws.rs.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

@Path("ws2") 
public class IngredientServices 
{ 
@Path("/ingredients") 
@GET 
@Produces("text/plain") 
public String getIngredients() throws SQLException, ClassNotFoundException { 

String connectStr="jdbc:mysql://localhost:3306/fooddb"; 
//database username 

String username="root"; 
//database password 

String password="csci330pass"; 
/* The driver is the Java class used for accessing 
    * a particular database. You must download this from 
    * the database vendor. 
    */ 

String driver="com.mysql.jdbc.Driver"; 
Class.forName(driver); 
//Creates a connection object for your database 

Connection con = DriverManager.getConnection(connectStr, username, password); 
/* Creates a statement object to be executed on 
    * the attached database. 
    */ 

Statement stmt = con.createStatement(); 
/* Executes a database query and returns the results 
    * as a ResultSet object. 
    */ 

ResultSet rs = stmt.executeQuery("SELECT id, name, category FROM ingredient"); 
/* This snippet shows how to parse a ResultSet object. 
    * Basically, you loop through the object sort of like 
    * a linkedlist, and use the getX methods to get data 
    * from the current row. Each time you call rs.next() 
    * it advances to the next row returned. 
    * The result variable is just used to compile all the 
    * data into one string. 
    */ 

    String result = ""; 
    while (rs.next()) 
    { 
    int theId = rs.getInt("id"); 
    String theName = rs.getString("name"); 
    String theCategory = rs.getString("category"); 
    result += "id: "+theId+ " , name: "+theName + "("+theCategory+")" + "\n" + "\n"; 
    } 
    return result; 
    }//END METHOD 

@Path("/ingredients/{id}") 
@GET 
@Produces("text/plain") 
public String getIngredientById(@PathParam("id") String theId) 
throws SQLException, ClassNotFoundException { 
int intId = 0; 
try 
{ 
    intId = Integer.parseInt(theId); 
} 
catch (NumberFormatException FAIL) 
{ 
    intId = 1; 
}//Obtaining an ingredient from the database 

String connectStr="jdbc:mysql://localhost:3306/fooddb"; 
String username="root"; 
String password="csci330pass"; 
String driver="com.mysql.jdbc.Driver"; 
Class.forName(driver); 
Connection con = DriverManager.getConnection(connectStr, username, password); 
Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT id, name, category FROM ingredient 
WHERE id=" +intId); 

String result = ""; 
while (rs.next()) 
{ 
    int theId2 = rs.getInt("id"); 
    String theName2 = rs.getString("name"); 
    String theCategory = rs.getString("category"); 
    result += "id: "+theId2+ " , name: "+theName2 + "("+theCategory+")" + "\n" + "\n"; 
} 
    return result; 
}//END METHOD 

@Path("/ingredients/name") 
@GET 
@Produces("text/plain") 
public String getIngredientByName(@QueryParam("name") String theName) 
throws SQLException, ClassNotFoundException 
{ 
//Obtaining an ingredient from the database 
String connectStr="jdbc:mysql://localhost:3306/fooddb"; 
String username="root"; 
String password="csci330pass"; 
String driver="com.mysql.jdbc.Driver"; 
Class.forName(driver); 
Connection con = DriverManager.getConnection(connectStr, username, password); 
Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT id, name, category FROM ingredient WHERE 
name='" + theName + "'"); 

String result = ""; 
while (rs.next()) 
{ 
    int theId3 = rs.getInt("id"); 
    String theName3 = rs.getString("name"); 
    String theCategory = rs.getString("category"); 
    result += "id: "+theId3+ " , name: "+theName3 + "("+theCategory+")" + "\n" + "\n"; 
} 
    return result; 
}//END METHOD 
}//END CODE 

現在,前兩種方法,這是檢索所有內容,並檢索由ID都正常工作的項目,它是按名稱代碼,無法檢索。當我在我的虛擬機上的cmd上運行它時正確編譯,並且在Tomcat 8上沒有顯示任何錯誤,但正確給我結果的唯一代碼是前兩種方法。出於某種原因,第三種方法不斷吐出第一個結果,並且只是第一個結果。

我還附上index.html文件代碼向你展示什麼上面的代碼與...

<html> 
<head> 
<title>Shakur (S-3) Burton's Web Services</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function() { 
alert("running script"); 
$("#btnAll").click(function() { 
alert("clicked"); 
$.ajax({ 
url:"http://localhost:8080/webserv1/resources/ws2/ingredients/", 
type: "GET", 
dataType: "text", 
success: function(result) { 
alert("success"); 
$("#p_retrieveAll").html(result); }, 
error:function(xhr) { 
alert("error"); 
$("#p_retrieveAll").html("Error:"+xhr.status + " " + xhr.statusText);} 
}); 
}); 
$("#btnOneId").click(function() { 
alert("clicked"); 
var inputId=document.getElementById("t_ingredId").value; 
var theUrl = "http://localhost:8080/webserv1/resources/ws2/ingredients/"+inputId; 
$.ajax({ 
url: theUrl, 
type: "GET", 
dataType: "text", 
success: function(result) { 
alert("success"); 
$("#p_retrieveOneId").html(result); }, 
error:function(xhr) { 
alert("error"); 
$("#p_retrieveOneId").html("Error:"+xhr.status+" "+xhr.statusText);} 
}); 
}); 
$("#btnOneName").click(function() { 
alert("clicked"); 
var inputName=document.getElementByName("t_ingredName").value; 
var theUrl: "http://localhost:8080/webserv1/resources/ws2/ingredients/ingredient?name="+inputName; 
$.ajax({ 
url: theUrl, 
type: "GET", 
dataType: "text", 
success: function(result) { 
alert("success"); 
$("#p_retrieveOneName").html(result); }, 
error:function(xhr) { 
alert("error"); 
$("#p_retrieveOneName").html("Error:"+xhr.status+" "+xhr.statusText);} 
}); 
}); 
}); 
</script> 
</head> 
<body> 
<h3>Testing Web Services</h3> 
<div id="retrieveAll"> 
<button id="btnAll">Click to Retrieve All</button> 
<p id="p_retrieveAll">Ingredients List Goes here</p> 
</div> 
<div id="retrieveOneId"> 
<input type="text" id="t_ingredId" value="type id here" /> 
<button id="btnOneId">Click to Retrieve by Id</button> 
<p id="p_retrieveOneId">Ingredient By Id Goes here</p> 
</div> 
<div id="retrieveOneName"> 
<input type="text" id="t_ingredName" value="type name here"/> 
<button id="btnOneName">Click to Retrieve by Name</button> 
<p id="p_retrieveOneName">Ingredient By Name Goes here</p> 
</div> 
</body> 
</html> 

是否有可以在這裏提出來的任何建議的工作,爲什麼按名稱獲取方法在我的IngredientServices中javascript無法正常工作?我錯過了什麼嗎?

編輯 - 2014年11月4日 - 16:05 ...

我想,這個問題可能是數據庫程序的這一部分...而是通過尋找說按名稱搜索的一個組成成分的元素的ID,我應該在給定的參數內搜索NAME。希望這可以解決我遇到的問題...

順便說一句,這是我修改過的代碼:var inputName = document.getElementByName(「t_ingredName」).value;

+0

當你直接對數據庫執行sql命令時,你會得到多個結果嗎? – 2014-11-01 20:36:08

+0

如果在對數據庫執行sql時只獲得一個結果,那意味着數據庫中只有一個匹配條目,並且代碼按預期工作。 – 2014-11-02 18:00:45

+0

經過一段時間才能更好地瞭解事情。我按照指示採納了你的建議。它似乎可能是index.html中的某些東西導致我頭痛的問題。 – user2891351 2014-11-04 21:03:09

回答

0

當我將你的代碼的Firefox和點擊了所謂的Firebug插件,它給我以下錯誤:

SyntaxError: missing ; before statement 
var theUrl: "http://localhost:8080/webserv1/resources/ws2/ingredients/ 

因此它應該是var theUrl= "http://localhost:8080/webserv1/resources/ws2/ingredients/ingredient?name="+inputName;

你試過調試?

另外,不是使用警報,而是使用console.log("your message here"); - 它會顯示在Firebug的控制檯中。

+0

原因是.....代替localhost:8080是因爲當我試圖輸入時,它不會讓我。抱歉。然而,我知道一個事實,那就是正確的聯繫。 – user2891351 2014-11-04 22:17:53

0

事實證明,我在上面的問題創建代碼令人欣慰的正常工作,儘管在一些不幸的錯誤檢索成分的,我的Java代碼名稱方法......這是最終什麼需要一些固定。