210525_1(일반형게시판4_글목록_글보기_수정_삭제)
글보기
---------------------------------------이벤트발생
list.jsp 539번째 줄에서
글번호를 가지고 content.jsp를 호출함 : 주로<A> 태그로 전송하는 경우는 get방식이다.
-----------------------------------------list.jsp
1. 글목록으로 부터 해당 글번호를 받는다.
2. DAO 생성
3. 조회수를 올린다.
4. DTO = 해당글 가져오기
5. 화면 출력처리
-------------------------------------------BoardQuery
void boardHitUp(idx);
BoardBean boardView(idx);
content.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" import="board.*"%>
<jsp:useBean id="boardBean" class="board.BoardBean"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>New Document</title>
<Script language="JavaScript">
<!--
function editsend(idx){
location.href="edit.jsp?idx="+idx;
}
function delsend(idx){
location.href="del.jsp?idx="+idx;
}
//-->
</Script>
</head>
<%
int idx = Integer.parseInt(request.getParameter("idx"));
//조회수 올리기
BoardQuery boardQuery = new BoardQuery();
boardQuery.boardHitUp(idx);
boardBean = boardQuery.boardView(idx);
//글을 가져온다.
%>
<body>
<talbe width="550" align="center" border="1">
<tr>
<td align="center"> <font size="4" color="#CCCCCC">일반형 게시판</font></td>
</tr>
</talbe><br>
<!-- /////////////////////////////////////////////////// -->
<form method=post name="wform">
<table width="550" align="center" border="1">
<tr>
<td colspan="2" align="center" bgcolor="#CCCCCC"> 글 보 기<br></td>
</tr>
<tr>
<td width="17%"> 이름</td>
<td> <%=boardBean.getName()%></td>
</tr>
<tr>
<td> 이메일</td>
<td><a href="mailto:<%=boardBean.getEmail()%>"><%=boardBean.getEmail()%></a></td>
</tr>
<tr>
<td> 홈페이지</td>
<td> <a href="http://<%=boardBean.getHomepage()%>"><%=boardBean.getHomepage()%></a></td>
</tr>
<tr>
<td> 제목</td>
<td> <%=boardBean.getTitle()%></td>
</tr>
<tr>
<td> 본문</td>
<td>
<table width="400" heigh="200">
<tr>
<td valign="top"><%=boardBean.getContent()%></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#CCCCCC">
<input type="button" value="수정하기" onclick="editsend(<%=boardBean.getIdx()%>)">
<input type="button" value="삭제하기" onclick="delsend(<%=boardBean.getIdx()%>)">
</td>
</tr>
</table>
</form>
<br>
<!-- //////////////////////////////////////////////////// -->
<table width="550" align="center" border="1">
<tr>
<td align="center"> <input type="button" value="돌아가기" onClick="history.back()" style="cursor:pointer;"> 조회수:[<%=boardBean.getHit()%>]</td>
</tr>
</table>
</body>
</html>
BoardQuery 추가
public void boardHitUp(int idx) throws SQLException{
Connection conn = pool.getConnection();
Statement stat = conn.createStatement();
try {
//조회수 올리기
String sql = "update "+board+" set hit = hit+'1' where idx= '"+idx+"'";
stat.execute(sql);
}catch(Exception e) {
System.out.println(e);
}finally{
stat.close();
pool.releaseConnection(conn);
}
} //boardHitUp()
public BoardBean boardView(int idx) throws SQLException{
BoardBean boardBean=null;
Connection conn= null;
Statement stat=null;
ResultSet rs=null;
String sql=null;
try {
conn=pool.getConnection();
stat=conn.createStatement();
sql="select * from "+board+" where idx= "+idx;
rs= stat.executeQuery(sql);
boardBean = new BoardBean();
if(rs.next()) {
boardBean.setIdx(rs.getInt("idx"));
boardBean.setHit(rs.getInt("hit"));
boardBean.setName(rs.getString("name"));
boardBean.setEmail(rs.getString("email"));
boardBean.setHomepage(rs.getString("homepage"));
boardBean.setTitle(rs.getString("title"));
String content = rs.getString("content");
content = content.replace("\n", "<br>");
boardBean.setContent(content);
boardBean.setWdate(rs.getString("wdate"));
//boardList.add(boardBean);
}
}catch(Exception e) {
//TODO: handle exception
}finally {
rs.close();
stat.close();
pool.releaseConnection(conn);
}
return boardBean;
}//boardView()
홈페이지 부분부터 null이 떠서 찾느라 고생함 결국 오타하나..
글수정하기
이벤트발생
글보기(content.jsp)에서, 글번호를 가지고 edit.jsp를 호출함
: js를 이용했음
수정폼 edit.jsp
글보기+ 글쓰기폼
1. 번호를 받는다.
2. DAO를 생성한다. -- 수정을 위해 해당글 (boardView(idx)재활용) 을 가지고 옴
3. 선택한 해당글을 화면에 폼구성과 함께 출력함
- 꺼낸글을 해당 폼구성요소에 value 값으로 입력한다.
- 글입력폼 복사하여 value 속성만 추가한다.
- textArea는 value속성이 없으므로 바디에 출력한다.
- 암호는 인증과 관련되어있으므로, value를 지정하지 않는다.
- 글번호가 숨겨져 있음을 놓치면 안된다.
4. 수정하고 유효성검사 후 처리 페이지로 전송함
수정처리 edit_ok.jsp -------------컨트롤기능
참고) 컨트롤 기능을 분리하여 servlet으로 구현하면 model2가 된다.
(model1과 model2 차이는 컨트롤 기능이 뷰파일로부터 분리가 되었느냐?)
1. encoding 처리
2. DTO 생성 후 저장
3. DAO 생성, 후 수정 메서드(DTO 인자) 호출
- 암호비교 : boolean passwordCheck(idx,pwd)
- 수정처리 - 암호가 참이면 update 실행
: boolean boardUpdate(boardBean)
4. 리턴값 true ---성공메시지---이동 --- 글보기 또는 글목록
false ---실패메시지---이동 --- 글수정폼
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" import="java.*,java.text.*,java.util.*,board.*"%>
<jsp:useBean id="boardBean" class="board.BoardBean"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<meta name="keywords" content="">
<meta name="Description" content="">
<title>게시판만들기(edit)</title>
<script language="JavaScript">
function trans(theform){
if(theform.name.value==""){
alert("이름을 기입하세요");
theform.name.focus();
return false;
}
if(theform.email.value==""){
alert("이메일을 기입하세요");
theform.email.focus();
return false;
}
if(theform.title.value==""){
alert("제목을 기입하세요");
theform.title.focus();
return false;
}
if(theform.content.value==""){
alert("내용을 기입하세요");
theform.content.focus();
return false;
}
if(theform.pwd.value==""){
alert("암호을 기입하세요");
theform.pwd.focus();
return false;
}
theform.submit();
}
</script>
</head>
<%
int idx = Integer.parseInt(request.getParameter("idx"));
BoardQuery boardQuery = new BoardQuery(); //dao 인스턴스생성
boardBean = boardQuery.boardView(idx); //boardview재활용
%>
<body><br>
<table width="550" align="center" border="1">
<tr>
<td align="center"> <font size="4" color="#CCCCCC">일반형 게시판</font></td>
</tr>
</table><br>
<!-- //////////////////////////////////////////////// -->
<form method=post name="myform" action="edit_ok.jsp">
<table width="550" align="center" border="1">
<tr>
<td colspan="2" align="center" bgcolor="#CCCCCC"> 글수정하기<br></td>
</tr>
<tr>
<td width="17%"> 이름</td>
<td><input type="text" name="name" size="10" value="<%=boardBean.getName()%>"></td>
</tr>
<tr>
<td> 이메일</td>
<td><input type="text" name="email" size="30" value="<%=boardBean.getEmail()%>"></td>
</tr>
<tr>
<td> 홈페이지</td>
<td><input type="text" name="homepage" size="30" value="<%=boardBean.getHomepage()%>"></td>
</tr>
<tr>
<td> 제목</td>
<td><input type="text" name="title" size="50" value="<%=boardBean.getTitle()%>"></td>
</tr>
<tr>
<td> 본문</td>
<td><textarea rows="10" cols="50" name="content"><%=boardBean.getContent()%></textarea></td>
</tr>
<tr>
<td> 암호</td>
<td><input type="password" name="pwd" size="10"></td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#CCCCCC">
<input type="button" value="수정하기" onclick="trans(this.form);">
<input type="reset" value="다시쓰기">
<td>
</td>
</tr>
<input type="hidden" name="idx" value="<%=boardBean.getIdx()%>">
</table>
</form>
<br>
<!-- //////////////////////////////////////////////////////// -->
<table width="550" align="center" border="1">
<tr>
<td align="center"> [<a href="./content.jsp?idx=<%=boardBean.getIdx()%>">돌아가기</a>]</td>
</tr>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<jsp:useBean id="boardBean" class="board.BoardBean"/>
<jsp:setProperty name="boardBean" property="*"/>
<jsp:useBean id="boardQuery" class="board.BoardQuery"/>
<meta charset="EUC-KR">
<%
int idx = boardBean.getIdx();
boolean result = false;
result = boardQuery.boardUpdate(boardBean);
if(result){ //암호가 일치하면
out.println("<script laguage=\"JavaScript\">");
out.println("alert(\"글이 수정되었습니다\")");
out.println("location.href=\'content.jsp?idx="+idx+"\'");
out.println("</script>");
}else{ //암호가 일치하지 않으면
out.println("<script laguage=\"JavaScript\">");
out.println("alert(\"암호가 일치하지 않습니다\")");
out.println("history.back()");
out.println("</script>");
}
%>
boardQuery 추가
private boolean passwordCheck(int idx, String pwd) throws SQLException{
boolean chk=false;
Connection conn = pool.getConnection();
Statement stat = conn.createStatement();
ResultSet rs = null;
String sql ="";
String pwd2 ="";
try {
sql=" select pwd from " +board+" where idx = "+idx;
// System.out.println(sql);
rs = stat.executeQuery(sql);
rs.next();
pwd2=rs.getString(1); //db에서 꺼낸 암호
pwd = pwd.trim(); //폼에서 받은 암호 앞뒤공란제거
pwd2 = pwd2.trim(); //db에서 가져온 암호 앞뒤공란제거
if(pwd.equals(pwd2)) { //암호가 일치하면
chk=true;
}
}catch(Exception e) {
System.out.println(e);
}finally {
rs.close();
stat.close();
pool.releaseConnection(conn);
}
return chk;
} //passwordCheck()
public boolean boardUpdate(BoardBean boardBean) throws SQLException{
boolean result=false;
Connection conn = pool.getConnection();
Statement stat = conn.createStatement();
String sql="";
int idx=boardBean.getIdx();
String name=boardBean.getName();
String email=boardBean.getEmail();
String homepage=boardBean.getHomepage();
String title=boardBean.getTitle();
String content=boardBean.getContent();
String pwd=boardBean.getPwd();
try {
if(passwordCheck(idx,pwd)) { //암호가 일치하면
sql = "update " +board+" set name='"+name
+"',email='"+email
+"',homepage='"+homepage
+"',title='"+title
+"',content='"+content
+"'where idx="+idx;
sql=new String(sql.getBytes("8859_1"),"euc-kr");
int cnt =stat.executeUpdate(sql);
if(cnt==1) {
result=true;
}else { //암호가 일치하지 않으면
result = false; }
}
}catch(Exception e) {
System.out.println(e);
}finally {
stat.close();
pool.releaseConnection(conn);
}
return result;
} //boardUpdate()
dao 개선
int cnt = stmt.executeUpdate(sql);
if (cnt==1){
result = true;
}else {
result = false;
}
---------------------html 태그: 사용 못하게 하기
------------글목록,글보기 할때
<는 < 대체합니다.
>는 > 대체 합니다.
결과, 화면에는 태그가 그냥 문자열로 뿌려집니다.
------------------------------------dao에서
String title = rs.getString("title");
title =title.replaceAll("<","<");
title =title.replaceAll(">",">");
boardBean.setTitle(title);
글 삭제하기
이벤트 발생
content.jsp 에서 삭제 버튼을 누르면, 글 번호를 삭제폼으로 전송한다.
삭제폼 del.jsp
글번호를 받는다.
폼 구성 : idx,pwd 를 유효성검사 후 삭제처리로 전송한다.
삭제 처리 del_ok.jsp
1. 넘어온 idx, pwd를 받는다.
2. dao생성한다.
3. 삭제처리 메서드를 실행한다.
--------------------------dao
- 암호비교 : boolean passwordCheck(idx,pwd) ---재활용됨
- 수정처리 - 암호가 참이면 update 실행
boolean boardDelete(idx,pwd)
4. 리턴값 true ---성공메시지---이동 --- 글목록
false ---실패메시지---이동 --- 글삭제 폼
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<%
String idx=request.getParameter("idx");
%>
<html>
<head>
<meta charset="EUC-KR">
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="keywords" content="">
<meta name="Description" content="">
<title>New Document</title>
</head>
<body><br><br><Br>
<form method=post action="del_ok.jsp?idx=<%=idx%>">
<table width="200" border="1" align="center">
<tr>
<td align="center">암호를 입력하세요.</td>
</tr>
<tr>
<td align="center"><input type="password" name="pwd" size="10"></td>
</tr>
<tr>
<td align="center"><input type="button" onclick="this.form.submit()" value="삭제실행">
</td>
</tr>
</table></form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<jsp:useBean id="boardQuery" class="board.BoardQuery"/>
<%
int idx = Integer.parseInt(request.getParameter("idx"));
String pwd = request.getParameter("pwd");
boolean result=false;
result = boardQuery.boardDelete(idx,pwd);
if(result){ //암호가 일치하면
out.println("<script language=\"JavaScript\">");
out.println("alert(\"글이 삭제 되었습니다\")");
out.println("location.href=\"list.jsp\"");
out.println("</Script>");
}else{ //암호가 일치하지 않으면
out.println("<script language=\"JavaScript\">");
out.println("alert(\"암호가 일치하지 않습니다\")");
out.println("history.back()");
out.println("</Script>");
}
%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
boardQuery 추가
public boolean boardDelete(int idx, String pwd) throws SQLException{
boolean result=false;
Connection conn = pool.getConnection();
Statement stat = conn.createStatement();
String sql="";
try {
if(passwordCheck(idx,pwd)) { //암호가 일치하면
sql = "delete from "+board+" where idx="+idx;
// sql=new String(sql.getBytes("8859_1"),"euc-kr");
stat.executeUpdate(sql);
result=true;
}else { //암호가 일치하지 않으면
result = false;
}
}catch(Exception e) {
System.out.println(e);
}finally {
stat.close();
pool.releaseConnection(conn);
}
return result;
} //boardDelete()
데이터 베이스에서 기본키(primary key) 즉 식별자 컬럼은 행을 구별하는 역할을 합니다.
그래서 필수적 구속요건은 유일성+not null의 성격을 가져야 합니다.
그러나 일련번호라는 것은 해당되지 않습니다.
-기사,산업기사 시험에서 자주 나오니 주의-
auto_increment ==> 키본키 값으로 주로 사용함
12345
1245 <==일련되지 않아도 "유일성+ not null"의 성격 만족함
정말 입력된 순서의 글의 역순으로 정렬을 원한다면, 날짜 컬럼을 추가하여 날짜 순서대로 정렬하는 것이 가장 정확하다.
글검색하기
이벤트발생 ------------글 리스트에서 검색폼을 작성 전송
find : 찾을 컬럼 : 이름, 제목, 내용
search : 찾는 문자열
검색페이지 seach.jsp
0. 한글이라면 encoding : 1312줄에 넣기 권장
1. 받는다
2. DAO 생성, 찾기 글갯수 boardCount(find, search); 오버로딩 1349~1351줄 참조
DAO : 1430줄
찾는 메서드 getSearchList(find, search, offset, limit) 1374줄 참조
DAO : 1451, 1469줄
3. 리턴값을 화면에 뷰로직을 통해서 출력
머리굴림ㅋㅋ ~~list.jsp와 거의 비슷하게 생겼음.. 복사하여 수정
페이징 처리 추가
이유 : 페이징을 할때도 찾는글을 계속 전송해주어야 한다.
showpaging(offset,limit) 원래 내용을 복사하여 아래처럼 오버로딩한다.
showpaging(pagelink, pagename, , find, search ) 오버로딩한다. 1394줄
DAO : 1506, 1528, 1539, 1555, 1568, 1580 줄을 본다.
주의 dato sql은 반드시 확인
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" import="java.util.*" import="board.*" import="util.*"%>
<!DOCTYPE html>
<jsp:useBean id="boardQuery" class="board.BoardQuery" />
<%request.setCharacterEncoding("EUC-KR"); %>
<%
/////////////////////페이징준비
int limit = 10; //최대페이지수
int offset = 0; //초기값
int pagelink = 1; //현재페이지
String offset_get = request.getParameter("offset");
if (offset_get == null) {
offset = 0;
} else {
offset = Integer.parseInt(offset_get);
}
String pagelink_get = request.getParameter("pagelink");
if (pagelink_get == null) {
pagelink = 1;
} else {
pagelink = Integer.parseInt(pagelink_get);
}
///////////////////////////////////////
%>
<script language="JavaScript"> //검색 무결성js
function send(theform) {
if (theform.search.value == "") {
alert("검색어를 입력 하세요.");
theform.search.focus();
return false;
}
theform.submit();
}
</script>
<%
String find = request.getParameter("find");
String search = request.getParameter("search");
int rcnt = boardQuery.boardCount(find,search);
PagingCount pc = new PagingCount(rcnt);
%>
<table width="500" align="center" border="1">
<tr>
<td align="center" width="20%"> [글수:<%=rcnt%>]
</td>
<td align="center" width="60%"><font size="4" color="">
<a onClick="list.jsp" style="cursor:pointer;">검색글 리스트</a></font></td>
<td align="center" width="20%">[<a href="write.jsp">글쓰기</a>]
</td>
</tr>
</table>
<br>
<table width="550" align="center" border="1">
<tr>
<td width="10%" bgcolor="#CCCCCC"> 번호</td>
<td width="17%" bgcolor="#CCCCCC"> 일자</td>
<td width="50%" bgcolor="#CCCCCC"> 제목</td>
<td width="13%" bgcolor="#CCCCCC"> 이름</td>
<td width="10%" bgcolor="#CCCCCC"> 조회</td>
<%
Vector listVector = boardQuery.getSearchList(offset,limit,find,search);
//JSP 빈에서 가져와서 뿌리기
for (int k = 0; k < listVector.size(); k++) {
BoardBean boardBean = (BoardBean) listVector.elementAt(k);
%>
<tr>
<td> <%=boardBean.getIdx()%></td>
<td> <%=boardBean.getWdate()%></td>
<td> <a href="content.jsp?idx=<%=boardBean.getIdx()%>"><%=boardBean.getTitle()%></a></td>
<td> <%=boardBean.getName()%></td>
<td> <%=boardBean.getHit()%></td>
</tr>
<%
} //반복문 닫기
%>
</table>
<br>
<%=pc.showPaging(pagelink, "search.jsp", find, search)%>
<br>
<!-- ///////////////////////////////////////////// -->
<form action="search.jsp" method=post name="sform">
<table width="550" align="center" border="1">
<tr>
<td align="center"><select name=find>
<option value=name>이 름</option>
<option value=title selected>제 목</option>
<option value=content>내 용</option>
</select>
<input type=text name=search size=20>
<input type="button" value="글찾기" onclick="send(this.form);"></td>
<td align="right">
<form action="order_list" method=post name="list_order">
<select name="list_order">
<option value="recent" selected onclick="">최신순</option>
<option value="past" onclick="">과거순</option>
<option value="views" onclick="">조회수</option>
</select>
</form>
</tr>
</table>
</form>
boardQuery 추가
public int boardCount(String find, String search) throws SQLException{
int cnt=0;
Connection conn = null;
Statement stat = null;
ResultSet rs= null; //select 문이기때문에 rs
String sql= null;
try {
conn = pool.getConnection();
stat = conn.createStatement();
sql=" select count(*) from "+board+" where "+find+" like "+"'%"+search+"%'";
rs = stat.executeQuery(sql);
rs.next();
cnt=rs.getInt(1);
//System.out.println(cnt); //테스트용도
}catch(Exception e) {
//TODO: handle exception
System.out.println(e);
}finally {
rs.close();
stat.close();
pool.releaseConnection(conn);
}
return cnt;
}//BoardCount()
public Vector getSearchList(int offset, int limit, String find, String search) throws SQLException{
Connection conn = null;
Statement stat = null;
ResultSet rs= null;
String sql= null;
Vector searchList = new Vector();
try {
conn=pool.getConnection();
stat=conn.createStatement();
sql=" select a.* "+
" from (" +
" select ROWNUM as RNUM, b.* "+ //행번호를 붙인다. 그것을rnum이라고한고, b의모든컬럼=내가꺼낸결과에 줄번호를붙였다.
" from (" +
" select * "+ //서브쿼리
" from "+board+" "+
" where "+find+" like "+"'%"+search+"%' order by idx desc "+
" )b "+ // 글번호의 역순으로 꺼낸다. 이서브쿼리가 b이다. b가 가상의테이블이다. 인라인서브쿼리
" )a "+ // 위를 a
" where a.RNUM > " +offset+" "+ //RNUM이 0보다 크고 최대치보다 작거나 같을때
" and a.RNUM <= " +(offset+limit)+" "; // 1~10번까지 가져온다
rs=stat.executeQuery(sql);
while(rs.next()) {
BoardBean boardBean = new BoardBean();
boardBean.setIdx(rs.getInt("idx"));
boardBean.setHit(rs.getInt("hit"));
boardBean.setName(rs.getString("name"));
boardBean.setEmail(rs.getString("email"));
boardBean.setHomepage(rs.getString("homepage"));
String title = rs.getString("title");
title =title.replaceAll("<","<");
title =title.replaceAll(">",">");
boardBean.setTitle(title);
boardBean.setWdate(rs.getString("wdate").substring(2,10));
//인덱스0부터 10개를 가져온다 = 연,월,일 만꺼내오는것.. (2,10)로 해서 년뒷두자리부터 가져왔다.
searchList.add(boardBean);
}
}catch(Exception e) {
//TODO: handle exception
}finally {
rs.close();
stat.close();
pool.releaseConnection(conn);
}
return searchList;
} //searchList()
PagingCount 추가
public String showPaging(int pagelink, String pagename, String find, String search) {
String str="";
str="<Table width=\"550\" border=\"0\" align=\"center\">";
str=str + "<tr><Td align=\"center\" bgcolor=\"#FFFFFF\">";
int bpage=0;
int boffset=0;
int cpage=0;
int coffset=0;
int vpage=0;
int noffset=0;
int loffset=0;
//<!-- 1페이지 -->
if(pagelink != 1) {
str=str+"[<A href="+pagename+"?pagelink=1&offset=0&find="+find+"&search="+search+"><font size=2 color=red>처음</font></a>]";
}else {
str=str+"[<font size=2 color=gray>처음</font>]";
}
//<!-- 이전10-->
bpage=pagelink-10;
boffset=countOffset(bpage);
if(pagelink > links) { //현재페이지의 숫자가 links(10)보다 작으면
str=str+"[<A href="+pagename+"?pagelink="+bpage+"&offset="+boffset+"&find="+find+"&search="+search+"><font size=2 color=lbue>이전10</font></a>]";
}else {
str=str+"[<font size=2 color=gray>이전10</font>]";
}
// <!-- 링크페이지 -->
vpage=pagelink; //현재페이지를 잠깐 다른변수에 아래서 사용함
pagelink = ((pagelink-1)/links)*links+1; //시작 페이지 구하기
for(cpage=pagelink; cpage < pagelink+links; cpage++) {
if(cpage>totalpage) {
break;
}
coffset=countOffset(cpage);
if(cpage!= vpage) {
str=str+"[<A href="+pagename+"?pagelink="+cpage+"&offset="+coffset+"&find="+find+"&search="+search+"><font size=2 color=black>"+cpage+"</font></a>]";
}else{
str=str+"[<font size=2 color=red>"+cpage+"</font>]";
}
}
// <!-- 다음10 -->
//for문을 빠져 나왔을때 cpage의 값은 1만큼 더 증가되어 있기 때문에 그냥 사용한다.
noffset=countOffset(cpage);
if((totalpage-pagelink)>=links){
str=str+"[<a href="+pagename+"?pagelink="+cpage+"&offset="+noffset+"&find="+find+"&search="+search+"><font size=2 color=blue>다음10</font></a>]";
}else {
str=str+"[<font size=2 color=gray>다음</font>]";
}
//<!--마지막 페이지>
loffset=countOffset(totalpage);
if(vpage!=totalpage) {
str=str+"[<a href="+pagename+"?pagelink="+totalpage+"&offset="+loffset+"&find="+find+"&search="+search+"><font size=2 color=red>마지막</font></a>]";
}else {
str=str+"[<font size=2 color=gray>마지막</font>";
}
str=str+"</td></tr></table>";
return str;
}//showPaging 메서드
like 연산자 preparedStatement
[*mysql]
String query = " select * from tab col like ?";
pstmt.setString(1,"%""~~~