在JSP中使用jquery ajax不会调用Servlet?

时间:2014-06-07 06:29:13

标签: java jquery ajax jsp servlets

我第一次使用JSPAjax。我试图从数据库中获取一个列数据,并使用Ajax调用在我的JSP页面的下拉列表中填充它。我不想刷新页面,因此我正在进行Ajax调用。

这是我的jsfiddle,它有“处理”按钮,一旦我点击“处理”按钮,它就会显示一个空的下拉列表。这是我的另一个test.jsp页面。

我有一个account表,我需要从jsp中创建这个选择查询 -

SELECT USERS FROM ACCOUNT;

当我点击Process按钮时,我需要使用Ajax在POSTGRESQL数据库上执行上面的SQL查询。无论用户是什么,我从数据库回来,我需要在我的下拉列表中填充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根本没有使用Ajax从我的JSP页面调用。我的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>

2 个答案:

答案 0 :(得分:2)

问题是这个课程不是Servlet。它就像一个普通的Java类。

它应该扩展HttpServlet

public class SomeServlet extends HttpServlet

声明此注释@WebServlet的类必须扩展HttpServlet

  

始终尝试对重写方法使用@Override注释来捕获编译类型本身的此类错误。

答案 1 :(得分:0)

jQuery&#39; get(...)需要有效的网址。 以下是我尝试使用您提供的代码段的内容。这将转到servlet。 1.提供jQuery-version.js文件

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

2。正确的网址。以下网址将按如下方式调用: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();
            }
        }
    }