Ajax发送请求放到Servlet,Servlet读取数据库返回json给Ajax。

前端

$("#btn").on("click",function(){  
    sqlStatement = document.getElementById("sqlStatement").value;
    $.ajax({
        type: "GET",
        url : "DemoServlet",
        dataType:"text",
        async: false,
        data:{sql: sqlStatement, pCount:pageCount},
        success: function(resultData){
            jObject = JSON.parse(resultData);
            document.getElementById("result").innerHTML = jObject.table;
        },
        error:function(xhr, status, errMsg){
            alert("Data transmission failed!");
        }
    });
});

后台:返回有个table给前台

import java.io.IOException;
import java.io.PrintWriter;

import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

@SuppressWarnings("serial")
public class DemoServlet extends HttpServlet{
    public static int EACHPAGENUM = 20;
    public String sql = null;
    public String newSQL = null;
    public String pageCount = null;
    public Connection connection = null;  
    public Statement statement = null;  
    public ResultSet resultSet = null;
    public ConnectDB2 connectDB2 = null;
    public PrintWriter out = null;
    public StringBuffer strTable = null;;
    public JSONObject jObject = null;
    public int pageNum = 0;
    public int allCount = 0;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        response.setHeader("Access-Control-Allow-Origin", "*");
        
        // Get SQL form ajax
        sql = request.getParameter("sql");
        newSQL = sql.replace("\"", "'");
        pageCount = request.getParameter("pCount");
        System.out.println("pCount = " + pageCount);
        System.out.println(newSQL);
        
        //Set up connection to DB2
        connectDB2 = new ConnectDB2();  
        connection = connectDB2.getConnection();
        PrintWriter out = response.getWriter();
         
        try {
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            resultSet = statement.executeQuery(newSQL);
            
            ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
            
            //Get col name
            //out.println("<table border='1' width='100%'><tr>");
            strTable = new StringBuffer();
            strTable.append("<table border='1' width='100%' height='240px'><tr>");
            for (int i = 1;i <= resultSetMetaData.getColumnCount();i++) {
            //    out.println("<th>" + resultSetMetaData.getColumnName(i) + "</th>");
                strTable.append( "<th>" + resultSetMetaData.getColumnName(i) + "</th>");
            }
            strTable.append("</tr>");
            //System.out.println("strTable = " + strTable);
            
            pageNum = 0;
            resultSet.last();
            allCount = resultSet.getRow();
            if(resultSet.getRow() % 20 == 0) {
                pageNum = resultSet.getRow() / 20;
            }else {
                pageNum = resultSet.getRow() / 20 + 1;
            }
        
            System.out.println("pageNum = " + pageNum);
            if(Integer.parseInt(pageCount) <= pageNum) {
                resultSet.absolute(EACHPAGENUM * (Integer.parseInt(pageCount)-1) + 1);
                for(int j = 0;j < 20;j++){      
                    strTable.append("<tr>");
                    for (int i = 1;i <= resultSetMetaData.getColumnCount();i++) {    
                        //    out.println("<td>" + resultSet.getString(i) + "</td>");
                        strTable.append("<td>" + resultSet.getString(i) + "</td>");                        
                    }
                    strTable.append("</tr>");                    
                    //当cursor读取到最后一条record的时候
                    if(resultSet.getRow() == allCount) {
                        //打印剩余的空白cell
                        //for(int k = j;k < 20 - j;k++) {
                        //    strTable.append("<tr>");
                        //    for (int i = 1;i <= resultSetMetaData.getColumnCount();i++) {
                        //        strTable.append("<td></td>");
                        //    }
                        //    strTable.append("<tr>");
                        //}
                        break; //跳出循环20次的这层循环
                    }
                    resultSet.next();
                }
            }
            strTable.append("</table>");
            System.out.println(strTable); 
            
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e);
        }
 
        jObject = new JSONObject();
        jObject.put("table", strTable.toString());
        jObject.put("pageNum", pageNum);
        out.write(jObject.toString());
        out.flush();
        out.close();
    }
}



  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ServletAjax本身是两个不同的技术,但它们可以结合使用来实现动态Web应用程序。 Servlet是Java Web中的一种服务器端技术,它可以处理HTTP请求和响应,生成动态内容并将其发送到客户端浏览器。在这种情况下,Servlet可以作为服务器端程序来处理来自客户端的请求,然后生成HTML或其他格式的响应。 而Ajax是一种前端Web技术,它允许Web应用程序通过异步数据交换来更新部分页面内容,而不必重新加载整个页面。它使用JavaScript来向服务器请求数据,并在不刷新页面的情况下更新页面。 因此,ServletAjax可以结合使用来实现动态Web应用程序。例如,当用户在前端页面上点击某个按钮时,可以使用AjaxServlet发送异步请求Servlet接收请求并处理数据,然后将响应发送前端页面,使前端页面能够动态更新内容而不必重新加载整个页面。 ### 回答2: Servlet是一种Java编写的服务器端技术,用于处理客户端(浏览器)发送的HTTP请求并生成响应。而Ajax是一种在客户端中使用JavaScript和XMLHttpRequest对象实现异步通信的技术。 ServletAjax之间存在一定的关系。通常情况下,Ajax被用于在网页上实现动态更新内容,而不需要刷新整个页面。当用户在网页中发起Ajax请求时,JavaScript会创建一个XMLHttpRequest对象,该对象负责向服务器发送异步请求。而服务器上的Servlet可以接收这个请求,并根据请求数据进行相应的处理。Servlet可以从数据库读取信息,对数据进行处理,并将结果返回给浏览器。浏览器通过接收到的响应数据,再使用JavaScript脚本对页面进行更新。 在这个过程中,Servlet充当了服务器端的处理功能,负责对客户端发起的请求进行处理;而Ajax则充当了客户端与服务器端之间的桥梁,通过发送异步请求和接收响应数据,实现了与服务器的交互。 总而言之,ServletAjax的关系是:Servlet作为服务器端的技术,用于处理客户端的请求;而Ajax作为客户端的技术,通过与服务器进行异步通信,实现了动态更新网页内容。两者共同协作,使网页在不刷新整个页面的情况下能够实现动态交互。 ### 回答3: ServletAjax是两个不同的技术,但它们可以结合使用来实现更好的Web应用程序。 Servlet是一种用Java编写的服务器端程序,它可以接收和处理客户端发来的HTTP请求,并生成相应的HTTP响应。Servlet可以处理静态内容,也可以与数据库进行交互,生成动态内容。 Ajax是一种通过在后台与服务器进行少量数据交换的技术,它可以在不重新加载整个页面的情况下,更新部分页面内容。Ajax使用JavaScript和XMLHttpRequest对象来实现异步通信。 ServletAjax可以结合使用,以实现更好的用户体验和页面响应速度。当用户在客户端进行某些操作时,例如点击一个按钮,可以使用Ajax技术将相关数据发送到后台的Servlet进行处理。Servlet可以从数据库中获取数据,并将数据转换为JSON或XML格式发送回客户端。然后,客户端的JavaScript代码可以使用这些数据更新页面的特定区域,而不需要重新加载整个页面。 通过结合使用ServletAjax,可以实现实时交互和动态更新页面,提高Web应用程序的性能和用户体验。例如,可以通过Ajax技术在不刷新整个页面的情况下,动态加载新的数据、实时显示搜索结果、动态更新统计数据等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值