一个简单的利用Ajax实现的动态查询的例子
一个简单的利用Ajax进行动态查询的例子。
此例就是利用Ajax实现异步传输。通过异步传输对象发送请求和接受响应。请求的为服务器端组件,在这里使用Servlet实现。响应的结果为XML格式,通过在网页中利用JS使用DOM进行内容解析,实现内容的动态生成。
下面讲解例子:
首先准备表,在这里使用Oracle数据库,数据库名称为GoldDB,在其中的frank模式下建立表MyTable,表中包含三个字段分别为:pid,pname,age。以后的检索条件利用age,检索age大于某一条件的结果。
首先创建Web Project,在其中创建index.jsp,作为与用户交互的页面,动态的处理也在此页面利用Ajax完成。
主体页面的设计如下:
?非常的简单,此页面存在一个文本框,id为searchAge,用来输入查询条件数值,另外存在一个按钮用作提交,调用JS方法searchPerson
页面中存在一个查询结果的现实Table,注意,必须建立tbody标记,因为动态生成的结果要在tbody中操作。id为mytable
当点击按钮的时候调用searchPerson方法,方法如下:
?请求的组件为servlet,代码如下(只列出doGet方法,其他的方法为默认的):
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/xml"); response.setHeader("pragma", "no-cache"); response.setHeader("cache-control", "No-cache"); response.setDateHeader("expires", 0); Connection conn=null; PreparedStatement pstmt=null; ResultSet rst=null; String strAge=request.getParameter("age"); try{ Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:GoldDB","root","123456"); String strSQL="select * from MyTable where age>?"; pstmt=conn.prepareStatement(strSQL); pstmt.setInt(1, Integer.parseInt(strAge)); rst=pstmt.executeQuery(); StringBuffer strb=new StringBuffer(); strb.append("<persons>"); while(rst.next()){ strb.append("<person>"); strb.append("<pid>"+rst.getInt(1)+"</pid>"); strb.append("<pname>"+rst.getString(2)+"</pname>"); strb.append("<age>"+rst.getInt(3)+"</age>"); strb.append("</person>"); } strb.append("</persons>"); System.out.println(strb.toString()); response.getWriter().write(strb.toString()); }catch(ClassNotFoundException ex){ ex.printStackTrace(); }catch(SQLException ex){ ex.printStackTrace(); } }?此方法就是利用JDBC检索对应的数据库表,然后检索数据,形成XML格式内容。注意利用StringBuffer生成。最后响应给客户端。