Java 在JSP中使用jQueryAjax没有调用Servlet?
我第一次使用Java 在JSP中使用jQueryAjax没有调用Servlet?,java,jquery,ajax,jsp,servlets,Java,Jquery,Ajax,Jsp,Servlets,我第一次使用JSP和Ajax。我试图从数据库中获取一列数据,并使用Ajax调用将其填充到JSP页面的下拉列表中。我不想刷新页面,这就是原因,我正在进行Ajax调用 这是我的,它有进程按钮,只要我点击进程按钮,它就会显示一个空的下拉列表。这在我的另一个test.jsp页面中 我有一个表,名为account,我需要从jsp进行这个select查询- SELECT USERS FROM ACCOUNT; 只要我点击Process按钮,我就需要使用Ajax在我的POSTGRESQL数据库上执行上面的S
JSP
和Ajax
。我试图从数据库中获取一列数据,并使用Ajax调用将其填充到JSP页面的下拉列表中。我不想刷新页面,这就是原因,我正在进行Ajax调用
这是我的,它有进程按钮,只要我点击进程按钮,它就会显示一个空的下拉列表。这在我的另一个test.jsp
页面中
我有一个表,名为account
,我需要从jsp进行这个select查询-
SELECT USERS FROM ACCOUNT;
只要我点击Process按钮,我就需要使用Ajax在我的POSTGRESQL数据库上执行上面的SQL查询。无论是什么用户,我从数据库返回,我需要在我的下拉列表中填充这些用户
,如上面的JSFIDLE所示
下面是我使用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();
}
}
}
问题陈述:-
但不知何故,它根本不起作用,这意味着我的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>
问题是这个类不是一个
Servlet
。它就像一个普通的Java类
它应该扩大
声明此批注的类必须扩展
始终尝试在编译类型本身中使用注释替代方法来捕获此类错误
jQuery的get(…)
需要有效的URL。
下面是我对您提供的代码片段所做的尝试。这将转到servlet。
1.提供jQuery-version.js文件
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script>
@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();
}
}
}
请使用
@WebServlet(“/someservlet”)
再试一次。您提到的更改已经存在于我的代码中,除了extendsHttpServlet
之外。我也添加了这些更改,但仍然不起作用。还有什么我遗漏的吗:(这对我来说很好。你能发布你的web.xml
?开始时发生的另一件奇怪的事情是我必须给出$.get()的完整URL。)
方法,因为相对URL在我第一次试用时不起作用,即我必须给出类似http://localhost:8080/TestServlet/someservlet
。您在这里更改了吗-$.get('someservlet',函数(responseJson)
?是的,$.get('http://localhost:8080/TestServlet/someservlet,函数(responseJson)
我还使用了双引号。不知道这是否有什么区别。或者说,它根本没有击中它。(谢谢你,布拉伊,是的,我已经更正了我的代码,但它仍然没有击中。你知道我遗漏了什么吗:(
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script>
$.get('someservlet', function(responseJson) {
alert(responseJson);
var $ul = $('<ul>').appendTo($('#somediv'));
$.each(responseJson, function(index, item) {
$('<li>').text(item).appendTo($ul);
});
});
@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();
}
}
}