# jsp+Servlet实现ajax
in JavaWeb with 0 comment

# jsp+Servlet实现ajax

in JavaWeb with 0 comment

jsp+Servlet实现ajax

工作原理

首先由jquery监听某一个事件,若该事件触发 则:
发起ajax请求(包括 路径 ,回调函数,返回值类型)
在这里我们发送请求到Servlet中
Servlet对发来的请求进行处理,获取数据等等一系列操作
Servlet中准备回调数据
通常情况下是json
此时回到jsp页面,jquery读取回调数据,然后进行二次处理
需要对json进行解析

demo:

Jsp页面部分:

<label class="form-group">所属的主要学科 </label>
                            <select name="suoshudezhuyaoxueke1" id="suoshudezhuyaoxueke1">
                            <option>
                            请选择
                            </option>
                            <option>
                            计算机
                            </option>
                            </select>
                             <input type="text" id="hint"/> 

我们将会在id为hint的input内展示我们想看到的数据

Jquery部分:

var url="/HBKJCXXT/Servlet/UntilServlet"
        $('#suoshudezhuyaoxueke1').on('blur',function(){
            
            var temp=$('#suoshudezhuyaoxueke1').val();
            $.get('UntilServlet?xueke1='+temp,function(result){
                result=eval(result);
                $("#hint").val(result[0].name);
            },'json')
        
        })

在这里的$.get就是发起get的ajax请求,参数依次为路径,回调函数,返回值类型(准确的来说,是按照什么类型进行接收)

Servlet部分:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String method=request.getParameter("xueke1");
        System.out.println(method);
        ResultSet rs=loadxueke("0");
        try {
            String teString=resultSetToJson(rs);
            System.out.println(teString);
            response.setCharacterEncoding("UTF-8");
            PrintWriter  pWriter = response.getWriter();
            pWriter.append(teString);
            pWriter.flush();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

接下来分别是两个方法的实现:

    public ResultSet loadxueke(String pid) {
        System.out.println("pid"+pid);
        Connection connection=util.DButil.getConnection();
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        String sql=null;
        try {
            sql="select id,name from zhuyaoxueke where pid = ?";
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setString(1,pid);
            //不知道为什么一直变不了
            //ystem.out.println("_sql_"+_sql_);
            resultSet=preparedStatement.executeQuery();        
            System.out.println("查询完毕");
            System.out.println("查询到的结果为:");
            
            /*while(resultSet.next()) {
                System.out.println(resultSet.getString("name"));
            }
            return resultSet;*/
        }catch (Exception e) {
            // TODO: handle exception
            System.out.println("86出现异常!");
        }finally {
            
//            DButil.close(resultSet);
//            DButil.close(preparedStatement);
//            DButil.close(connection);
        }
        return resultSet;
    }
public String resultSetToJson(ResultSet rs) throws SQLException,JSONException  
    {  
       // _json_数组  
       JSONArray array = new JSONArray();  
        
       // 获取列数  
       ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();  
       int columnCount = metaData.getColumnCount();  
        System.out.println("列数"+columnCount);
        System.out.println(metaData.getColumnLabel(1));
        System.out.println(metaData.getColumnLabel(2));
        
       // 遍历ResultSet中的每条数据  
        while (rs.next()) {  
            JSONObject jsonObj = new JSONObject();  
            System.out.println(rs.getString("name")+rs.getString("id"));
       // 遍历每一列  
            for (int i = 1; i <= columnCount; i++) {  
                String columnName =metaData.getColumnLabel(i);  
                String value = rs.getString(columnName);  
                jsonObj.put(columnName, value);  
            }   
            array.add(jsonObj);   
        }  
        
       return array.toString();  
    }

讲解

发起ajax部分:
三个参数都很重要,特别是接收数据的格式。
这决定了你按照什么类型来进行数据的接收,例如json或者text
Servlet部分:
处理数据都很简单,不需要进行过多的解释
主要是转换成json格式时要注意。
实际上,这个转换的方法是通用的,你可以任意拷贝

Responses