Tag Archives: 자바

CookieUtil Class

예전 게시판 만들다가 만들었던 쿠키 관련 유틸 클래스이다.
URLDecoder의 decode가 deprecation되었는데, 어떻게 강제로 해버렸다.
좀더 깔끔한 해결책 아시는분은 알려주시면 감사하겠습니다.

[CODE]import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieUtil
{
 public static boolean setCookie(HttpServletResponse response, String name, String value)
 {
  try
  {
   Cookie cookie = new Cookie(name, URLEncoder.encode(value, “EUC-KR”));
   cookie.setMaxAge(24*60*60);
   response.addCookie(cookie);
   
   return true;
  }
  catch (UnsupportedEncodingException e)
  {
   e.printStackTrace();
   
   return false;
  }
 }
 
 @SuppressWarnings(“deprecation”)
 public static String getCookie(HttpServletRequest request, String name)
 {
  Cookie[] cookies = request.getCookies();
  if(cookies == null)
  {
   return “”;
  }
 
  for(int i = 0 ; i < cookies.length ; i++)
  {
   if(cookies[i].getName().equals(name))
   {
    return URLDecoder.decode(cookies[i].getValue());
   }
  }
 
  return “”;
 }
}[/CODE]

사용할때는 비즈니스 로직에 다음과 같이 사용하면 되겠다.
쿠키를 저장할때 :
[CODE]CookieUtil.setCookie(response, “name”, boardForm.getName());
CookieUtil.setCookie(response, “email”, boardForm.getEmail());[/CODE]

쿠키를 읽어올때 :
[CODE]request.setAttribute(“name”, CookieUtil.getCookie(request, “name”));
request.setAttribute(“email”, CookieUtil.getCookie(request, “email”));[/CODE]

게시판용 페이징 클래스

게시판에서 쓸만한 페이징 클래스를 제작해 보았다. 문제 발견시 피드백 부탁드립니다^^

1342418818.txt
—————————————————————————————
페이징 클래스 소스코드 :
—————————————————————————————
[code]public class PageNavigation {
   
    private        boolean        isPrevPage;
    private        boolean        isNextPage;
    protected    int            nowPage;
    protected    int            rowTotal;
    protected    int            blockList;
    protected    int            blockPage;
    private        int            totalPage;
    private        int            startPage;
    private        int            endPage;
    private        int            startRow;
    private        int            endRow;
   
    // 페이지를 계산하는 생성자
    public PageNavigation(int nowPage, int rowTotal, int blockList, int blockPage) {
        super();
       
        // 각종 플래그를 초기화
        isPrevPage = false;
        isNextPage = false;
       
        // 입력된 전체 열의 수를 통해 전체 페이지 수를 계산한다
        this.totalPage    = (int) Math.ceil((double)rowTotal / (double)blockList);
       
        // 현재 페이지가 전체 페이지수보다 클경우 전체 페이지수로 강제로 조정한다
        if(nowPage > this.totalPage)
        {
            nowPage = this.totalPage;
        }
       
        // DB입력을 위한 시작과 종료값을 구한다
        this.startRow    = (int) (nowPage – 1) * blockList;
        this.endRow        = (int) this.startRow + blockList – 1;
       
        // 시작페이지와 종료페이지의 값을 구한다
        this.startPage    = (int) ((nowPage – 1) / blockPage) * blockPage + 1;
        this.endPage    = (int) this.startPage + blockPage – 1;
       
        // 마지막 페이지값이 전체 페이지값보다 클 경우 강제 조정
        if(this.endPage > this.totalPage)
        {
            this.endPage = totalPage;
        }
       
        // 시작 페이지가 1보다 클 경우 이전 페이징이 가능한것으로 간주한다
        if(this.startPage > 1)
        {
            this.isPrevPage = true;
        }
       
        // 종료페이지가 전체페이지보다 작을경우 다음 페이징이 가능한것으로 간주한다
        if(this.endPage < this.totalPage)
        {
            this.isNextPage = true;
        }
       
        // 기타 값을 저장한다
        this.nowPage = nowPage;
        this.rowTotal = rowTotal;
        this.blockList = blockList;
        this.blockPage = blockPage;
    }
   
    public void Debug()
    {
        System.out.println(“Total Page : ” + this.totalPage + ” / Start Page : ” + this.startPage + ” / End Page : ” + this.endPage);
        System.out.println(“Total Row : ” + this.rowTotal + ” / Start Row : ” + this.startRow + ” / End Row : ” + this.endRow);
    }
   
    // 전체 페이지 수를 알아온다
    public int getTotalPage()
    {
        return totalPage;
    }
   
    // 시작 Row값을 가져온다
    public int getStartRow()
    {
        return startRow;
    }
   
    // 마지막 Row값을 가져온다
    public int getEndRow()
    {
        return endRow;
    }
   
    // Block Row 크기를 가져온다
    public int getBlockSize()
    {
        return blockSize;
    }
   
    // 시작페이지값을 가져온다
    public int getStartPage()
    {
        return startPage;
    }

    // 마지막 페이지값을 가져온다
    public int getEndPage()
    {
        return endPage;
    }
   
    // 이전페이지의 존재유무를 가져온다
    public boolean isPrevPage()
    {
        return isPrevPage;
    }
   
    // 다음페이지의 존재유무를 가져온다
    public boolean isNextPage()
    {
        return isNextPage;
    }
}[/code]

—————————————————————————————
서블릿(Controller) 소스코드 :
—————————————————————————————

[code]// 리스트를 가져온다
if(request.getParameter(“page”) == null)
{
    nowPage = 1;
}
else
{
    nowPage = Integer.parseInt(request.getParameter(“page”));
   
    if(nowPage < 1)
    {
        nowPage = 1;
    }
}

// 객체를 생성한다 (현재페이지, 전체글수, 페이지당표시할 글의수, 한번에 표시할 페이징블록수)   
PageNavigation pageNav = new PageNavigation(nowPage, rowTotal, 10, 5);

// 디버깅이 필요할시 사용한다. 안써도 됨
pageNav.Debug();

// 시작Row값과 종료Row값을 넣어 쿼리문을 작성한다
sql = “SELECT * FROM TableName ORDER BY no DESC LIMIT ” + pageNav.getStartRow() + “, ” + pageNav.getBlockSize();

// 뷰에게 넘길 값을 지정한다
request.setAttribute(“pageIsPrev”,    pageNav.isPrevPage());    // 이전페이지 블록의 존재유무
request.setAttribute(“pageIsNext”,    pageNav.isNextPage());    // 다음페이지 블록의 존재유무
request.setAttribute(“pageStart”,    pageNav.getStartPage());// 시작페이지 번호
request.setAttribute(“pageEnd”,        pageNav.getEndPage());    // 종료페이지 번호[/code]

—————————————————————————————
jsp(View) 소스코드(EL표기법, JSTL사용) :
—————————————————————————————
[code]<div>
    <center>
        <c:if test=”${pageIsPrev}”>
            <a href=”index.do?page=${pageStart – 1}”>prev</a>
        </c:if>
        <c:forEach var=”page” begin=”${pageStart}” end=”${pageEnd}”>
            <a href=”index.do?page=${page}”>[${page}] </a>
        </c:forEach>
        <c:if test=”${pageIsNext}”>
            <a href=”index.do?page=${pageEnd + 1}”>next</a>
        </c:if>
    </center>
</div>[/code]

—————————————————————————————
결과 :
—————————————————————————————
prev [11] [12] [13] [14] [15] next