top
Loading...
使用JSP和SERVLET實現分頁

在網站的建設中,已經需要從數據庫里檢索大量的信息。但由于在internet上一次傳送大里的數據是不可取。所以一般都采用分頁來顯示查詢到的大量數據。當然我們可以按照象asp、php等腳本的方法,在JSP中實現分頁,但這就沒利用到了JSP動態頁面與靜態頁面的分離的優點,使大量運算代碼嵌在頁面中不便于維護。下面將通過一些例程來說明實現JSP頁面翻頁技術的實現。
思路:

首先,在JSP中,通過JAVA servlet 來檢索數據(servlet與數據庫的聯接及使用請看在本頻道中的《Servlet中jdbc應用高級篇》系列文章),所以在這里SERVLET是一個管理器即controlor。并把查詢出來的數據保存到封裝數據結構的對象(class)內,在這里這個對象是一個model。最后用JSP調用結果來顯示,在這里jsp是一個viewer。其上主要就是一個MVC編程模式,如想要如體了解MVC這種模式可以在看相關資料。

1.在服務器端的servlet 中的實現

要點:

*將查詢條件保存到session中,取session中的查詢條件

*設置Statement對象的MaxRows(確定一頁顯示多少行數據)

*順序地通過執行SQL語句查詢數據,按maxRows 來檢索一個maxRows的數據,下一頁再檢索下一maxRows的數據,以此類推。

2. 在JSP中的顯示實現

要點:

* 顯示maxRows條數據

*通過"下一頁"按鈕或超鏈再次調用剛才的servlet查詢下一maxRows的數據

下面通過一個例程來說明(一個servlet程序和一個JSP程序):

querymedicine. java

package Medicine;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import java.sql.*;

import Medicine.medicinelist;

import Medicine.searchData;

public class querymedicine extends HttpServlet {rivate DBConnectionManager connMgr; file://Initialize global variables

public void init(ServletConfig config) throws ServletException { super.init(config);

connMgr = DBConnectionManager.getInstance();

}

file://處理 HTTP Get 請求

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Statement stmt=null;

Connection con = connMgr.getConnection("medicine");

if (con == null) {

response.sendRedirect("/medicine/con_error.html");

return;

}

// 創建數據庫Statement

try {

stmt=con.createStatement();

}

catch (Exception e)

{

connMgr.freeConnection("medicine",con);

response.sendRedirect("/medicine/stmt_error.html");

return;

}

file://--------------------------------------------------------------------------------------------------------------------

long all_count=0; file://存滿足條件的藥品總數

file://===================從request中得到session======================

try{

HttpSession session = request.getSession(false);

if (session == null) {

connMgr.freeConnection("medicine",con);

response.sendRedirect("/medicine/session_error.html");

return;

}

file://從"下一頁"提交來的參數取得前頁最后一條數據的藥品編碼

String ll_pos=request.getParameter("pos"); file://如果pos=-1則表示要從頭開始查

file://=====================查詢用的SQL語句串==========================

String sqlstatment="SELECT medicines.ypbm, medsmalltypes.zlmc, medsupertypes.clmc, medtypes.dlmc, medicines.ypm, medicines.zyyx, medicines.ypzy FROM medicines,medsmalltypes,medsupertypes,medtypes WHERE medicines.ypbm>"+ll_pos+" and (( medsmalltypes.zlbm = medicines.zlbm ) and ( medsupertypes.clbm = medicines.clbm ) and ( medtypes.dlbm = medicines.dlbm ) and ( ( medicines.del_flag = 0 ) ";

file://-------------------------------------------------------------------------------------------------------------

String zlbm;

string dlbm;

String clbm;

String zyyx;

String ypm;

searchData slist=new searchData();

synchronized (session) {

slist=(searchData)session.getAttribute("searchList");

}

if(ll_pos.equals("-1")){

file://表示不是由"下一頁"過來要從頭開始查數據

if(slist!=null){

synchronized (session) {

session.removeAttribute("searchList");

}

}

slist=new searchData();

file://從設置查詢條件頁面取得查詢條件的參數

zlbm=request.getParameter("zlbm");

dlbm=request.getParameter("dlbm");

lbm=request.getParameter("clbm");

yyx=request.getParameter("zyyx");

ypm=request.getParameter("ypm");

file://將查詢條件參數通過Vector存到session

slist.setZlbm (zlbm);

slist.setDlbm (dlbm);

slist.setClbm (clbm);

slist.setZyyx (zyyx);

list.setYpm (ypm);

synchronized (session) {

session.setAttribute ("searchList",slist);

}

}

file://----------------------------------------------------------------------------------------------------------------
else

{

file://取出查詢條件參數

if(slist!=null){

zlbm=slist.getZlbm();

dlbm=slist.getDlbm();

clbm=slist.getClbm();

yyx=slist.getZyyx();

ypm=slist.getYpm();

}

else{

if(stmt!=null) stmt.close();

stmt.setMaxRows(0);

connMgr.freeConnection("medicine",con);

response.sendRedirect("/medicine/session_error.html");

return;

}

}

String sql2="select count(*) from medicines where del_flag=0";

file://根據條件參數設置SQL語句

if(!(zlbm.trim().equals("0"))) {

sqlstatment+=(" and ( medicines.zlbm='"+zlbm.trim()+"' ) ");

sql2+=(" and zlbm='"+zlbm.trim()+"'");

}

if(!(dlbm.trim().equals("0"))) {

sqlstatment+=(" and ( medicines.dlbm='"+dlbm.trim()+"' )");

sql2+=(" and dlbm='"+dlbm.trim()+"'");

}

if(!(clbm.trim().equals("0"))) {

sqlstatment+=(" and ( medicines.clbm='"+clbm.trim()+"' ) ");

sql2+=(" and clbm='"+clbm.trim()+"'");

}

if(!(zyyx.trim().length ()==0)) {

sqlstatment+=(" and ( medicines.zyyx like '%"+zyyx.trim()+"%' ) ");

sql2+=(" and zyyx like '%"+zyyx.trim()+"%'");

}

if(!(ypm.trim().length ()==0)) {

sqlstatment+=(" and ( medicines.ypm like '%"+ypm.trim()+"%' ) ");

sql2+=(" and ypm like '%"+ypm.trim()+"%'");

}

sqlstatment+=" )) ORDER BY medicines.ypbm ASC ";

file://-------------------------------------------------------------------------------------------------------------------

Vector list = new Vector();

file://設置一頁顯示的數據條數(一次檢索出的數據條數)

stmt.setMaxRows(25);

file://執行查詢將結果放到ResultSet中

ResultSet rs = stmt.executeQuery(sqlstatment);

ResultSet rs2 = stmt.executeQuery(sql2);

file://-------------------------------------------------------------------------------------------------------

if(rs==null){ file://如果沒有查詢結果數據

if(stmt!=null) stmt.close();

stmt.setMaxRows(0);

connMgr.freeConnection("medicine",con);

response.sendRedirect("/medicine/no_medicine.html"); file://定向到一個頁面

return;

}

file://將藥品信息填入數據對象并存入Vector中

if(rs2.next()){

all_count=rs2.getLong(1); file://取得總條數

}

if(rs2!=null)rs2.close();

while(rs.next()){

medicinelist m = new medicinelist();

m.setYpbm(rs.getInt("ypbm"));

m.setZlmc(rs.getString("zlmc"));

m.setClmc(rs.getString("clmc"));

m.setDlmc(rs.getString("dlmc"));

m.setYpm(rs.getString("ypm"));

m.setZyyx(rs.getString("zyyx"));

m.setYpzy(rs.getString("ypzy"));

m.setClbm(clbm);

m.setDlbm(dlbm);

m.setZlbm(zlbm);

list.addElement(m);

}

file://-----------------------------------------------------------------------------------------------------------------

if(rs!=null)rs.close();

stmt.setMaxRows(0);

if(stmt!=null)stmt.close();

connMgr.freeConnection("medicine",con);

file://========================存入session中===========================

synchronized (session) {

session.setAttribute("medicinelist",list);

}

file://-------------------------------------------------------------------------------------------------------

}catch (SQLException e){

connMgr.freeConnection("medicine",con);

response.sendRedirect("/Medicine/sql_error.html");

return;}

file://=======================重定向到一個JSP頁面==========================

String url="/medicine/querymedicine.jsp?all_count="+all_count;

ServletContext sc = getServletContext();

RequestDispatcher rd = sc.getRequestDispatcher(url);

rd.forward(request, response);

}

public void destroy() {



// =================== 在Servlet退出時終止數據庫連接,取消Statement對象

if(connMgr!=null) connMgr.release();

file://------------------------------------------------------------------------

}

file://處理HTTP Post 請求

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request,response);

}

file://取得 Servlet 信息

public String getServletInfo() {

return "medicine.querymedicine Information";

}

}

querymedicine.jsp file://[實現查詢結果的顯示

<%@ page language="java" session="true" import="java.util.*,Medicine.method, Medicine.medicinelist" contentType="text/html;charset=gbk" %>


















<%

method md = new method();

Vector sklist;

synchronized (session) {

sklist = (Vector) session.getAttribute("medicinelist");

}

%>



<%

if (sklist == null || sklist.size() <= 0)

{

response.sendRedirect("/medicine/no_medicine.html");

return;

}

else

{%>

您好!以下是商品的列表,共有 color=#ff0000><%=request.getParameter("all_count")%>條符合條件的藥品信息

















td width=145 align="center">大類









<%

medicinelist d=new medicinelist();

for (int index=0; index < sklist.size();index++)

{

d = (medicinelist)sklist.elementAt(index);

String lshref;

if (d.getYpzy()==null || d.getYpzy().equals("http://") || d.getYpzy().equals(""))

{

lshref="";

}else{

lshref="";

}

out.println("action=/servlet/Medicine.Detail?ypbm="+d.getYpbm()+">");

out.println("");

out.flush();

}

%>



>



<%

}

%>

明細 商品名稱 超類 子類 描述
");

out.println(lshref+d.getYpm()+"
");

out.println(d.getClmc()+"
"+d.getDlmc()+"");

out.println(d.getZlmc()+"
"+md.notNull(d.getZyyx())+"




<%

String ssll=request.getParameter("all_count");

Long temp=new Long(ssll);

long cou= temp.longValue();

if(sklist.size()==25&&cou>25)

{%>



<%}%>

<%

synchronized (session) {

if(session.getAttribute("medicinelist")!=null){

session.removeValue("medicinelist");

}

}

%>





















作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗