Servlet 페이지 효과 구현
페이지 별 알고리즘:
네 개의 변 수 를 정의 해 야 합 니 다.그들 은 각자 의 용도 가 있 습 니 다.
int pageSize:페이지 마다 몇 개의 기록 을 표시 합 니까?
int pageNow:몇 페이지 를 표시 하 시 겠 습 니까?
int page Count:모두 몇 페이지 입 니까?
int rowCount:모두 몇 개의 기록 이 있 습 니까?
설명:
pageSize 는 지정 입 니 다.pageNow 는 사용자 의 선택 을 말 합 니 다.
rowCount 는 표 에서 조회 할 수 있 습 니 다.
pageCount 는 계 산 된 것 입 니 다.이 계산 공식 은 다음 과 같 습 니 다.
if(rowCount%pageSize==0) {
pageCount=rowCount/pageSize;
} else {
pageCount=rowCount/pageSize+1;
}
문 구 를 사용 하면:select 필드 이름 목록 에서 표 이름 where id between?and ?이 sql 문 구 는 확실히 빠 르 지만 문제 가 있 습 니 다.즉,표 의 id 가 삭제 되면 한 페이지 에 기록 이 적 을 수 있 습 니 다.
따라서 최종 방법 은 다음 과 같다.
select top pageSize 필드 이름 목록 에서 표 이름 where id not in(select top pageSize*(pageNow-1)표 이름 에서 id)
구현 코드:
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class fenye extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
int pageSize=3; //
int pageNow=1; //
int pageCount=0; // ,
int rowCount=0; // ,
String sPageNow=req.getParameter("pageNow"); //
if(sPageNow!=null) // ,
{
pageNow=Integer.parseInt(sPageNow);
}
try{
PrintWriter pw=res.getWriter();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Students","sa"," ");
ps=ct.prepareStatement("select count(*) from [Students].[dbo].[Students]"); //
rs=ps.executeQuery();
while(rs.next())
{
rowCount=rs.getInt(1); //
}
if(rowCount%pageSize==0) //
{
pageCount=rowCount/pageSize;
}
else
{
pageCount=rowCount/pageSize+1;
}
ps=ct.prepareStatement("select top "+pageSize+" * from [Students].[dbo].[Students] where id not in(select top "+pageSize*(pageNow-1)+" id from [Students].[dbo].[Students])");
rs=ps.executeQuery();
pw.println("<body><center>"); //
pw.println("<table border=1");
pw.println("<tr><th>id</th><th>name</th><th>grade</th></tr>");
while(rs.next())
{
pw.println("<tr>");
pw.println("<td>"+rs.getInt(1)+"</td>");
pw.println("<td>"+rs.getString(2)+"</td>");
pw.println("<td>"+rs.getString(3)+"</td>");
pw.println("</tr>");
}
pw.println("</table>");
if(pageNow==1) // , ,
{
pw.println("<a href=fenye?pageNow="+pageNow+">"+"forward"+"</a>");
}
else // , ,
{
pw.println("<a href=fenye?pageNow="+(pageNow-1)+">"+"forward"+"</a>");
}
if(pageCount<=5) //
{
for(int i=1;i<=pageCount;i++)
{
pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
}
}else if(pageCount-pageNow<=5)
{
for(int i=pageNow;i<=pageCount;i++)
pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
}else // ,
{
for(int i=pageNow;i<=pageNow+5;i++)
pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
}
if(pageNow==pageCount) // ,
{
pw.println("<a href=fenye?pageNow="+pageNow+">"+"backward"+"</a>");
}
else
{
pw.println("<a href=fenye?pageNow="+(pageNow+1)+">"+"backward"+"</a>");
}
pw.println("</center></body>");
}catch(Exception ex){
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req,res);
}
}
실행 결과:각 페이지 에 기록 수가 3 일 때:
해당 연결 을 클릭 하면 성공 적 으로 점프 할 수 있 습 니 다.
마지막 페이지 는 다음 과 같 습 니 다:
대응 코드:
if(pageCount<=5)
{
for(int i=1;i<=pageCount;i++)
{
pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
}
}
백 워드 를 누 르 면 다시 뛰 지 않 습 니 다.프로그램 이 페이지 수 를 제어 하 는 하이퍼링크 수 효 과 를 표시 하기 위해 페이지 당 표시 기록 수 를 1 로 변경 합 니 다.
첫 페이지 표시 효과:
대응 코드:
else
{
for(int i=pageNow;i<=pageNow+5;i++)
pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
}
현재 페이지 가 점점 커지 면 표시 효과:대응 코드:
else if(pageCount-pageNow<=5)
{
for(int i=pageNow;i<=pageCount;i++)
pw.println("<a href=fenye?pageNow="+i+">"+i+"</a>");
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java에서 Servlet 디코딩 처리 방법예를 들어 Stringstr=request.getParameter(“girl”);Byte B[]=str.getBytes(“ISO-8859-1”);Str=new String(B);상술한 전환을 통해 제출한 모든 정보가...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.