JavaWeb專案第三次總結_成績查詢的實現
阿新 • • 發佈:2019-02-19
查詢圖書的功能實現
如何知道瀏覽器往伺服器傳入的引數
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();
}
}