자바 웹 필기 페이지 기능 구현
필드 효과:
1.페이지 별 사고
먼저 우 리 는 페이지 코드 를 쓰 는 사고방식 을 알 고 사고방식 을 명확 하 게 유지 해야만 흐 르 는 물 처럼 코드 를 쓸 수 있다.사실은 어떤 코드 를 쓰 든 사고방식,사상 이 특히 중요 하 다.먼저 잘 생각 한 다음 에 착수 하면 적은 노력 으로 큰 효 과 를 거 둘 수 있다.
먼저 SQL 문 구 를 분석 하여 실현 합 니 다.
Select * from product limit 0 ,5
Select * from product limit 5 ,5
Select * from product limit 10 ,5
Select * from product limit 15 ,5
\#현재 페이지 시작 값 페이지 당 데이터 크기1 0 5
2 5 5
3 10 5
4 15 5
결론:
(1)(현재 페이지-1)*(페이지 당 수량)=시작 값
(2)페이지 를 나 누 려 면 서버 에 요청 할 때 현재 페이지 를 전달 해 야 합 니 다.
2.PageBean 저장 데이터 만 들 기
이때 우 리 는 우리 의 페이지 데 이 터 를 포장 하기 위해 포장 류 를 포장 해 야 한다.
package cn.itcast.store.domain;
import java.util.List;
/**
*
*
* @author yechengchao
*/
public class PageModel {
//
/** , */
private int currentPageNum;
/** , */
private int pageSize =5;
/** , */
private int totalRecords;
/** , */
private int totalPageNum;
/** , ( -1)*( )= */
private int startIndex;
/** */
private int prePageNum;
/** */
private int nextPageNum;
/** , */
private List list;
/**
9 */
/** */
private int startPage;
/** */
private int endPage;
/** */
private String url;
/** , 。 , */
public PageModel(int currentPageNum,int totalRecords,int pageSize){
this.currentPageNum = currentPageNum;
this.totalRecords = totalRecords;
this.pageSize=pageSize;
//
startIndex = (currentPageNum-1)*pageSize;
//
totalPageNum = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
//5
startPage = currentPageNum - 4;
//
endPage = currentPageNum + 4;
// 9
if(totalPageNum>9){
// 9
if(startPage < 1){
startPage = 1;
endPage = startPage+8;
}
if(endPage>totalPageNum){
endPage = totalPageNum;
startPage = endPage-8;
}
}else{
// 9
startPage = 1;
endPage = totalPageNum;
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getPrePageNum() {
prePageNum = currentPageNum-1;
if(prePageNum<1){
prePageNum = 1;
}
return prePageNum;
}
public int getNextPageNum() {
nextPageNum = currentPageNum+1;
if(nextPageNum>totalPageNum){
nextPageNum = totalPageNum;
}
return nextPageNum;
}
public int getCurrentPageNum() {
return currentPageNum;
}
public void setCurrentPageNum(int currentPageNum) {
this.currentPageNum = currentPageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getTotalPageNum() {
return totalPageNum;
}
public void setTotalPageNum(int totalPageNum) {
this.totalPageNum = totalPageNum;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public void setPrePageNum(int prePageNum) {
this.prePageNum = prePageNum;
}
public void setNextPageNum(int nextPageNum) {
this.nextPageNum = nextPageNum;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
3.servlet 에서 제어 코드 를 작성 합 니 다.먼저 사용자 가 요청 을 보 내 고 현재 페이지 수 를 가 져 옵 니 다.이 표 에서 업무 층 의 코드 를 호출 하여 페이지 별로 상품 을 조회 한 다음 에 상품 을 조회 한 후에 우리 가 만 든 pageModel 대상 에 게 값 을 부여 합 니 다.이때 이 대상 을 전단 페이지 로 전송 하면 값 을 꺼 내 페이지 를 나 눌 수 있 습 니 다.
public String findProductByCidWithPage(HttpServletRequest request, HttpServletResponse response) throws Exception {
// cid,num
String cid=request.getParameter("cid");
int curNum=Integer.parseInt(request.getParameter("num"));
// :
// PageModel (1 2 3 url)
ProductService productService=new ProductServiceImp();
PageModel pm=productService.findProductByCidWithPage(cid,curNum);
// PageModel request
request.setAttribute("page", pm);
// /jsp/product_list.jsp
return "/jsp/product_list.jsp";
}
4.비 즈 니스 계층 service 는 비 즈 니스 논리 코드 를 작성 합 니 다.업무 층 의 업무 논 리 를 호출 할 때 여기 서 우 리 는 Dao 층 을 통 해 우리 가 조회 하고 자 하 는 상품 을 조회 하여 하나의 list 로 받 은 다음 에 pageModel 의 속성 list 에 전달 합 니 다.이때 전체 pageModel 대상 을 전송 합 니 다.여 기 는 주로 Dao 층 조회 와 관련 집합,관련 URL 을 호출 합 니 다.
public PageModel findProductByCidWithPage(String cid, int curNum) throws Exception {
//1 pageModel :
// select count(*) from product where cid=?
int totalRecords=productDao.findtotalRecords(cid);
PageModel pageModel=new PageModel(curNum, totalRecords, 12);
//2. select * form product where cid=? limit ?,?
List list=productDao.findProductByCidWithPage(cid,pageModel.getStartIndex(),pageModel.getPageSize());
pageModel.setList(list);
//3. url
pageModel.setUrl("ProductServlet?method=findProductByCidWithPage&cid="+cid);
return pageModel;
}
5.Dao 층 작업 데이터베이스왜 우 리 는 처음에 sql 문 구 를 분석 해 야 합 니까?가장 근원 은 바로 여기 서 데이터 베 이 스 를 조회 하 는 것 입 니 다.우 리 는 시작 페이지 와 페이지 크기 를 전송 해 야 합 니 다.
public List findProductByCidWithPage(String cid, int startIndex, int pageSize) throws Exception {
String sql="select * from product where cid=? limit ?,?";
QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
return qr.query(sql, new BeanListHandler<Product>(Product.class),cid,startIndex,pageSize);
}
6.전단 페이지,페이지 표시
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%-- --%>
<div style="text-align:center">
${page.totalPageNum} / ${page.currentPageNum}
<a href="${pageContext.request.contextPath}/${page.url}&num=1" rel="external nofollow" > </a>
<a href="${pageContext.request.contextPath}/${page.url}&num=${page.prePageNum}" rel="external nofollow" > </a>
<%-- , forEach --%>
<c:forEach begin="${page.startPage}" end="${page.endPage}" var="pagenum">
<a href="${pageContext.request.contextPath}/${page.url}&num=${pagenum}" rel="external nofollow" >${pagenum}</a>
</c:forEach>
<a href="${pageContext.request.contextPath}/${page.url}&num=${page.nextPageNum}" rel="external nofollow" > </a>
<a href="${pageContext.request.contextPath}/${page.url}&num=${page.totalPageNum}" rel="external nofollow" > </a>
<input type="text" id="pagenum" name="pagenum" size="1"/><input type="button" value=" " onclick="jump()" />
<script type="text/javascript">
function jump(){
var totalpage = ${page.totalPageNum};
var pagenum = document.getElementById("pagenum").value;
//
var reg =/^[1-9][0-9]{0,1}$/;
if(!reg.test(pagenum)){
//
alert(" ");
return ;
}
//
if(parseInt(pagenum)>parseInt(totalpage)){
//
alert(" ");
return;
}
// Servlet
window.location.href="${pageContext.request.contextPath}/${page.url}&num=" rel="external nofollow" +pagenum;
}
</script>
</div>
<%-- --%>
우리 가 필요 로 하 는 모든 데 이 터 를 pageModel 에 봉 인 했 기 때문에 pageModel 대상 은 request 필드 에 있 습 니 다.그래서 jsp 페이지 에서 우 리 는 우리 가 필요 로 하 는 데 이 터 를 받 아서 표시 하면 됩 니 다.구조 내 비게 이 션 도 는 주의해 야 할 점 이 있 습 니 다.논 리 는 무엇 을 표시 하고 싶 지 않 은 지,전체 화면 이 스스로 제어 하고 한 가지 만 기억 해 야 합 니 다.Servlet 을 요청 할 때 요청 한 페이지 를 서버 에 넘 겨 야 합 니 다.그렇지 않 으 면 서버 는 네가 몇 페이지 의 데 이 터 를 얻 으 려 고 하 는 지 모른다.총결산
사실 페이지 를 나 누 는 것 도 어렵 지 않 습 니 다.어 려 운 점 은 자바 빈 의 구축 입 니 다.pageModel 에 어떤 속성 이 필요 한 지,각종 속성의 역할 이 무엇 인지 알 면 분명 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.