HTML_JS(Sol)/JSP(sol)

210525_1(일반형게시판4_글목록_글보기_수정_삭제)

너굴셉 2021. 5. 25. 15:56

글보기

---------------------------------------이벤트발생

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">&nbsp;<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">&nbsp;글 보 기<br></td>
</tr>
<tr>
<td width="17%">&nbsp;이름</td>
<td>&nbsp;<%=boardBean.getName()%></td>
</tr>

<tr>
<td>&nbsp;이메일</td>
<td><a href="mailto:<%=boardBean.getEmail()%>"><%=boardBean.getEmail()%></a></td>
</tr>

<tr>
<td>&nbsp;홈페이지</td>
<td>&nbsp;<a href="http://<%=boardBean.getHomepage()%>"><%=boardBean.getHomepage()%></a></td>
</tr>

<tr>
<td>&nbsp;제목</td>
<td>&nbsp;<%=boardBean.getTitle()%></td>
</tr>

<tr>
<td>&nbsp;본문</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">&nbsp;
<input type="button" value="수정하기" onclick="editsend(<%=boardBean.getIdx()%>)">&nbsp;&nbsp;&nbsp;
<input type="button" value="삭제하기" onclick="delsend(<%=boardBean.getIdx()%>)">
</td>
</tr>
</table>
</form>
<br>
<!--  //////////////////////////////////////////////////// -->
<table width="550" align="center" border="1">
<tr>
<td align="center">&nbsp;<input type="button" value="돌아가기" onClick="history.back()" style="cursor:pointer;">&nbsp;&nbsp;&nbsp;조회수:[<%=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">&nbsp;<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">&nbsp;글수정하기<br></td>
</tr>
<tr>
<td width="17%">&nbsp;이름</td>
<td><input type="text" name="name" size="10" value="<%=boardBean.getName()%>"></td>
</tr>
<tr>
<td>&nbsp;이메일</td>
<td><input type="text" name="email" size="30" value="<%=boardBean.getEmail()%>"></td>
</tr>
<tr>
<td>&nbsp;홈페이지</td>
<td><input type="text" name="homepage" size="30" value="<%=boardBean.getHomepage()%>"></td>
</tr>
<tr>
<td>&nbsp;제목</td>
<td><input type="text" name="title" size="50" value="<%=boardBean.getTitle()%>"></td>
</tr>
<tr>
<td>&nbsp;본문</td>
<td><textarea rows="10" cols="50" name="content"><%=boardBean.getContent()%></textarea></td>
</tr>
<tr>
<td>&nbsp;암호</td>
<td><input type="password" name="pwd" size="10"></td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#CCCCCC">&nbsp;
<input type="button" value="수정하기" onclick="trans(this.form);">&nbsp;&nbsp;&nbsp;
<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">&nbsp;[<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 태그: 사용 못하게 하기

------------글목록,글보기 할때

<는 &lt; 대체합니다.

>는 &gt; 대체 합니다.

결과, 화면에는 태그가 그냥 문자열로 뿌려집니다.

------------------------------------dao에서

String title = rs.getString("title");
title =title.replaceAll("<","&lt;");
title =title.replaceAll(">","&gt;");
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%">&nbsp;[글수:<%=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>]&nbsp;
		</td>
	</tr>
</table>

<br>
<table width="550" align="center" border="1">
	<tr>
		<td width="10%" bgcolor="#CCCCCC">&nbsp;번호</td>
		<td width="17%" bgcolor="#CCCCCC">&nbsp;일자</td>
		<td width="50%" bgcolor="#CCCCCC">&nbsp;제목</td>
		<td width="13%" bgcolor="#CCCCCC">&nbsp;이름</td>
		<td width="10%" bgcolor="#CCCCCC">&nbsp;조회</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>&nbsp;<%=boardBean.getIdx()%></td>
		<td>&nbsp;<%=boardBean.getWdate()%></td>
		<td>&nbsp;<a href="content.jsp?idx=<%=boardBean.getIdx()%>"><%=boardBean.getTitle()%></a></td>
		<td>&nbsp;<%=boardBean.getName()%></td>
		<td>&nbsp;<%=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("<","&lt;");
				title =title.replaceAll(">","&gt;");
				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,"%""~~~