我第一次使用JSP
和Ajax
。我试图从数据库中获取一个列数据,并使用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>
答案 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);
});
});
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();
}
}
}