1. 程式人生 > >JavaWeb專案第三次總結_成績查詢的實現

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();
    }

}