2014-06-07 78 views
0

我正在與JSPAjax首次合作。我試圖從數據庫獲取一列數據,並使用Ajax調用將其填充到我的JSP頁面的下拉列表中。我不想刷新頁面,因此我正在進行Ajax調用。在JSP中使用jquery ajax不會調用Servlet嗎?

這裏是我的jsfiddle它有Process按鈕,只要點擊Process按鈕,它就會顯示一個空的下拉列表。這是在我的另一個test.jsp頁面。

我有一個表作爲account和我需要從JSP這個選擇查詢 - 一旦

SELECT USERS FROM ACCOUNT; 

,因爲我點擊Process按鈕,我需要通過執行上面的SQL查詢我的PostgreSQL數據庫阿賈克斯。無論用戶,我從數據庫回來,我需要在我的下拉列表中填充那些USERS,如我在上面的jsfiddle中所示。

下面是我使用Ajax從JSP頁面調用的servlet代碼。

@WebServlet("/someservlet/*") 
public class SomeServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) { 
     try { 

      System.out.println("Hello Test"); 
      // Step 1. Load the JDBC driver 
      Class.forName("org.postgresql.Driver"); 

      // Step 2. Create a Connection object 
      Connection con = DriverManager.getConnection(
        "jdbc:postgresql://localhost/test","root", "root!"); 

      Statement s = con.createStatement(); 

      String sql ="SELECT USERS FROM ACCOUNT"; 
      ResultSet rs = s.executeQuery(sql); 
      List<String> list = new ArrayList<String>(); 

      while (rs.next()) { 
       list.add(rs.getString("email")); 
      } 
      String json = new Gson().toJson(list); 
      response.getWriter().write(json); 
      rs.close(); 
      s.close(); 
      con.close(); 
     } catch (ClassNotFoundException e1) { 
      e1.printStackTrace(); 
     } catch (SQLException e2) { 
      e2.printStackTrace(); 
     } catch (Exception e3) { 
      e3.printStackTrace(); 
     } 
    } 
} 

及以下從上面的jsp頁面我的jQuery Ajax調用如圖所示的jsfiddle從那裏我呼籲Process按鈕的點擊上面的servlet -

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.btn-primary').click(function() { 
      alert("Hello"); 
      $.get('someservlet', function(responseJson) { 
       alert(responseJson); 
       var $ul = $('<ul>').appendTo($('#somediv')); 
       $.each(responseJson, function(index, item) { 
        $('<li>').text(item).appendTo($ul); 
       }); 
      }); 
     }); 
    }); 
</script> 

問題陳述: -

但不知何故,它根本不工作,這意味着我的servlet沒有從我的JSP頁面使用Ajax調用。我的System.out也沒有從控制檯和servlet上打印出來。

另外,我還有一個servlet。這是我創建的第二個servlet。可能是這個原因?

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
      version="2.5"> 

</web-app> 
+0

嘗試再次'@WebServlet( 「/ someservlet」)' – Braj

回答

0

jQuery的get(...)需要一個有效的URL。 下面是我用你提供的代碼片段嘗試的。這發送給servlet。 1.提供jQuery的version.js文件

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script> 

2.正確的URL。下面的網址將被稱爲是這樣的:http://localhost:8080/TestServlet/someservlet

$.get('someservlet', function(responseJson) { 
alert(responseJson); 
var $ul = $('<ul>').appendTo($('#somediv')); 
$.each(responseJson, function(index, item) { 
$('<li>').text(item).appendTo($ul); 
}); 
}); 
  1. 該servlet

    @WebServlet("/someservlet/*") 
    public class TestServlet extends HttpServlet{ 
        public void doGet(HttpServletRequest request, HttpServletResponse response) { 
         System.out.println("Hello Test"); 
         String json = "Hello from servlet"; 
         try { 
          response.getWriter().write(json); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
    } 
    
+0

你提到的改變已經在那裏了,我的代碼,除了延長'HttpServlet'我說是t噢,但仍然沒有工作是否還有其他任何我錯過:( – AKIWEB

+0

這對我來說工作得很好。你可以發佈你的'web.xml'嗎?最初發生的另一件奇怪事情是,我必須將完整的URL提供給'$ .get()'方法,因爲相對URL在我的第一次試用中不起作用,即我必須給出諸如'http:// localhost :8080 /的TestServlet/someservlet'。 –

+0

你改變了它這裏 - '$獲得( 'someservlet',函數(responseJson)' – AKIWEB

2

的問題是,這個類就不是一個Servlet。它就像一個普通的Java類。

應該延長HttpServlet

public class SomeServlet extends HttpServlet 

在此註釋@WebServlet聲明必須擴展HttpServlet類。

始終嘗試使用@Override註釋被替代的方法,在編譯型本身捕捉這種類型的錯誤。

+0

謝謝Braj,是的,我已經改正了我的代碼,但它仍然是不打有什麼,你知道我失蹤:( – AKIWEB