JavaWeb项目第三次总结_成绩查询的实现

查询图书的功能实现

如何知道浏览器往服务器传入的参数

1、在编写好查询页面后,使用火狐浏览器的friebug (全部—>POST—>参数)
2、编写GradeListServlet,重写doGet()和doPOST()方法

服务器处理页面请求的过程

1、重写doPOST()方法。

处理过程

1、连接数据库 2、创建JSONObject对象 3、格式化数据 4、将处理后的数据以{key,value}放入到JSONObject对象中 5、响应客户端的请求

  • 获取页面请求的参数 使用方法:request.getParameter(“page/rows”);
  • 创建PageBean类 将获取来的参数传入到PageBean类进行初始化。

PageBean

package com.it.model;

public class PageBean {

    private int page;//第几页
    private int rows;//每页的记录数
    private int start;//起始页

    public PageBean(int page, int rows) {
        super();
        this.page = page;
        this.rows = rows;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getRows() {
        return rows;
    }
    public void setRows(int rows) {
        this.rows = rows;
    }
    public int getStart() {
        return (page-1)*rows;
    }
}

创建从数据库查询出来的数据转化成JSON格式的数据

JSON将数据转化成了字符串类型的数据
转化对象后是键值对的形式 {name:value}

JSON格式转化的工具类

package com.it.util;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


/*
 * Json 工具包 用来处理JSon格式
 * 用来转化格式
 * JSONArray格式是 键值对形式的
 */
public class JsonUtil {

    /**
     * 将数据库内的数据集转化成JSON格式的数据 输出到浏览器页面
     * @param rs 数据库查询返回的集合
     * @return 
     * @throws Exception
     */
    public static JSONArray formatRsToJsonArray(ResultSet rs)throws Exception{

        ResultSetMetaData md=rs.getMetaData();//获取纵向集合
        int num = md.getColumnCount();//获取ResultSetMetaData 有多少行
        JSONArray array=new JSONArray();
        //JSONArray 里的每一个对象是 JSONObject
        while(rs.next()){ //横向的遍历
            JSONObject mapOfColValues=new JSONObject(); //JSONArray 里的每一个对象叫JSONObject
            for(int i=1;i<=num;i++){
                mapOfColValues.put(md.getColumnName(i), rs.getObject(i));//给对象赋值
            }
            array.add(mapOfColValues);
        }
        return array;//添加到JSONArray数组

    }
}

GradeListServlet

package com.it.web;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

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

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.it.dao.GradeDao;
import com.it.model.PageBean;
import com.it.util.Dbutil; 
import com.it.util.JsonUtil;
import com.it.util.ResponseUtil;

public class GradeListServlet extends HttpServlet {

    Dbutil dbUtil=new Dbutil();
    GradeDao gradeDao=new GradeDao();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String page = request.getParameter("page");//页面请求 page
        String rows = request.getParameter("rows");//每页的记录数
        PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
        Connection con=null;
        try{
            con=dbUtil.getCon();
            JSONObject result=new JSONObject(); //创建JSONObject对象用来存放JSONArray 数组
            JSONArray jsonArray = JsonUtil.formatRsToJsonArray(gradeDao.gradeList(con, pageBean));//将返回的结果集转化成JSON格式的数据

//          ResultSet rs=gradeDao.gradeList(con, pageBean);
//          gradeDao.print(con, rs);

            int total=gradeDao.gradeCount(con);//返回统计的总行数
            result.put("rows", jsonArray);
            result.put("total", total);
            ResponseUtil.write(response, result);

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }



}

## 数据库处理层GradeDao类 ##

package com.it.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.it.model.Grade;
import com.it.model.PageBean;

public class GradeDao {

    public ResultSet gradeList(Connection con,PageBean pageBean)throws Exception{
        StringBuffer sb=new StringBuffer("select * from t_grade");
        if(pageBean!=null){
            sb.append(" limit "+pageBean.getStart()+","+pageBean.getRows());
        }
        PreparedStatement pstmt = con.prepareStatement(sb.toString());

        return pstmt.executeQuery();
    }

    public int gradeCount(Connection con)throws Exception{
        String sql="select count(*) as total from t_grade";// as total 是起的别名
        PreparedStatement psmt = con.prepareStatement(sql);
        ResultSet rs = psmt.executeQuery();
        if(rs.next()){
            return rs.getInt("total");
        }else{
            return 0;
        }
    }

    public void print(Connection con,ResultSet rs)throws Exception{

        while(rs.next()){
            Grade grade=new Grade();
            grade.setId(rs.getInt("id"));
            grade.setGradeName(rs.getString("gradeName"));
            grade.setGradeDesc(rs.getString("gradeDesc"));
            System.out.println(grade);
        }
    }
}

响应页面的工具类

package com.it.util;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

public class ResponseUtil {

    public static void write(HttpServletResponse response,JSONObject jsonObject)throws Exception{
        response.setContentType("text/html;charaset=UTF-8");
        response.setCharacterEncoding("UTF-8");//解决无法输出中文的问题
        PrintWriter out = response.getWriter();
        out.println(jsonObject.toString());
        out.flush();
        out.close();
    }

}
posted @ 2017-10-25 20:38  yinder  阅读(383)  评论(0编辑  收藏  举报