티스토리 뷰

공부 이야기

[JSP] 게시판 만들기4

판다(panda) 2011. 6. 21. 00:01

음;.. 잡다하게 이것저것 테스트 하느라 설치를 많이 했더니..
글 쓰기 눌러도 렉걸리네요;..

오늘 해볼 것은.. 글 내용 확인.. 글 검색 하기.. 입니다..



따라해보신분들은 테스트 잘 하셨나 모르겠네요.. 저는 페이지 테스트 한번 해봤습니다..
글 10개가 되면.. 자동으로 다음 페이지 생성 되고.. 글 밀리고..
페이지 [2] 눌렀을대 위와 같이 나오고.. 잘 되네요..


쿼리는 이미 다 작성을 했기 때문에.. <html> 테이블만 수정하면 됩니다..
'board_list.jsp'에서는 거의 다 했습니다.. 검색은 금방 끝나는데..

글 내용 보기는 조금 걸릴겁니다..
우선 글 내용 보기는 새로운 페이지를 만들어야 하기 때문에..

검색 부터 해보죠..

글쓰기 버튼 옆에 글 찾기 버튼을 만들어볼겁니다.. 글 찾기 폼을 추가해봅시다..
<table width=700>
 <tr>
  <td><input type=button value="글쓰기" OnClick="window.location='board_write.jsp'"></td>
  <td><form name=searchf method=post action="board_list.jsp">
   <p align=right><input type=text name=dbsearch size=50  maxlength=50>
   <input type=submit value="글찾기"></p></td>

 </tr>
</table>
</html>

그럼 끝~..
"뭐냐!.. 그럼 저번에 다 했으면 됐잖아!".. 라고 하시는 분들도 계실거 같군요..

그러게요;.. 그냥 저번에 다 끝낼걸 그랬네요;..

되는지 안되는지 확인을 해봐야겠죠?..

우선 "검색을".. 이란 내용으로 검색을 했습니다..


"검색을" 해보자.. 제대로 검색되었습니다..

이번에는 "을".. 이란 내용으로 검색을 했습니다..


글 검색"을", 글 내용"을".. 두개가 제대로 검색이 되었습니다..

이번엔.. "jsp" 를 검색해 봅시다..



어라!;.. 검색이 안되네요;.. 뭔가 문제인가 했는데..
"JSP" 로 검색하니까 검색이 되는군요..


게시판에서.. 이런 상황(대소문자 검색구분)이 발생되면 안되지요..

'board_list.jsp'에서 검색하는 부분에 UPPER 를 추가해서 소문자도 대문자로 검색하게 끔 만듭니다..
2개가 있기 때문에 2개 다 바꿔야 합니다..

 try
 {
  String sql_n = "select count(*) from board ";
  sql_n += "where upper(dbsubject) like upper ('%" + dbsearch + "%')";


  stmt = conn.createStatement();
  rs = stmt.executeQuery( sql_n );

  if( rs.next() )
   total_cnt = rs.getInt(1);

  start = total_cnt - ( c_page - 1 ) * list_num;

  String sql_c = "";

  sql_c +=  "select aid, dbname, dbsubject, to_char( dbdate, 'yyyy/mm/dd hh:mi:ss' ), dbhits, dbmemo from ( ";
  sql_c += " select * from ( ";
  sql_c +=   "select * from ( ";
  sql_c +=    "select * from board order by rid asc ) ";
  sql_c +=   "where upper(dbsubject) like upper ('%" + dbsearch + "%') ) ";
  sql_c +=  "where rownum <= " + start + " order by rid desc ) ";
  sql_c += "where rownum <= " + list_num;
  rs = stmt.executeQuery( sql_c );
  int title_len = 100;
  int aid = start;

그러면 소문자 검색도 끝~..




이제.. 글 내용을 확인 할 수 있게..
'board_view.jsp' 를 새로 만듭니다..

역시 여기도 오라클 메소드 추가합니다..
<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>
<%@ page language="java" import="java.util.*, java.sql.*, javax.servlet.http.*" %>

<%!
 Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, "study", "study" );
  return conn;
}
 
 String TO_DB( String str ) throws Exception
 {
  if( str == null )
   return null;
  return new String( str.getBytes( "8859_1" ), "euc-kr" );
 }
%>


<%
 Connection conn = DB_Connection();
 Statement stmt = null;
 ResultSet rs = null;
 
여기도 벡터로 설정했구요..
 Vector v_name = new Vector();
 Vector v_email = new Vector();
 Vector v_homepage = new Vector();
 Vector v_subject = new Vector();
 Vector v_memo = new Vector();
 Vector v_hits = new Vector();
 int hits = 0;
 int aid = 0;

 String str_aid = request.getParameter( "str_aid" );
 String str_c_page = request.getParameter( "str_c_page" );

 String sql = "select ";
 sql += "dbname, nvl(dbemail,' '), nvl(dbhomepage,' '), dbsubject, dbmemo, dbhits ";  
// nvl(string, replace_with) - string 값이 null 값일때 replace_with 값으로 바꿀 때 사용
 sql += "from board where aid=" + str_aid;

try {
  stmt = conn.createStatement();
  rs = stmt.executeQuery( sql );
  if( rs.next() )
  {
   v_name.addElement( rs.getString(1) );
   v_email.addElement( rs.getString(2) );
   v_homepage.addElement( rs.getString(3) );
   v_subject.addElement( rs.getString(4) );
   v_memo.addElement( rs.getString(5) );
   v_hits.addElement( rs.getString(6) );
  }
  hits = Integer.parseInt( v_hits.elementAt(0).toString() );
  aid = Integer.parseInt( str_aid );
  hits++;
  sql = "update board set dbhits=" + hits + " where aid=" + aid;
  stmt.executeUpdate( sql );
  rs.close();
  stmt.close();
 } catch( SQLException e ) {
  out.println( e.toString() );
 }
%>

뭐 다른것이랑 크게 다를바 없는 내용입니다..
hit 가 있어서 글 내용 볼때마다 1씩 증가하는 내용말곤 특별한 내용은 없습니다..

<html>
<head>
<title>글보기</title>
</head>

<table cellspacing = 0 cellpadding = 5 border = 1 width=500>
 <tr><td><b>조회수</b></td><td><%=hits%></td></tr>
 <tr><td><b>이름 </b></td><td><%=v_name.elementAt(0)%></td></tr>
 <tr><td><b>이메일 </b></td><td><%=v_email.elementAt(0)%></td></tr>
 <tr><td><b>홈페이지 </b></td><td><%=v_homepage.elementAt(0)%></td></tr>
 <tr><td><b>제목 </b></td><td><%=v_subject.elementAt(0)%></td></tr>
 <tr><td><b>내용 </b></td><td width=350><%=v_memo.elementAt(0)%></td></tr>
</table>

목록으로 다시 돌아갈 수 있게 버튼 하나 만들어줍니다..
 <table  cellspacing = 0 cellpadding = 0 border = 0 width=500>
 <tr><td>
  <input type=button value="목록" OnClick="window.location='board_list.jsp'">
 </td></tr>
</table>

</html>

이러면 끝이냐?.. 아니죠.. 한가지 더 남았습니다..
'board_list.jsp'에서 글을 눌러 넘어갈 수 있는 링크를 만들어줘야 합니다..

 <tr>
 <td width=50><p align=center><%=v_articleid.elementAt(i)%></p></td>
 <td width=100><p align=center><%=v_name.elementAt(i)%></p></td>
 <td width=320><p align=center><a href="board_view.jsp?str_aid=<%=v_articleid.elementAt(i)%>&str_c_page=<%=str_c_page%>"><%=v_subject.elementAt(i)%></p></td>
 <td width=100><p align=center><%=v_date.elementAt(i)%></p></td>
 <td width=100><p align=center><%=v_hits.elementAt(i)%></p></td>
 </tr>

오옷.. 파란색의 링크가 떴습니다..



게시판에 쓰여진 내용을 봅시다.. 제목 클릭!..



참 쉽죠잉~..



여기서.. 팁 하나를 더 드리자면.. 추가했던..
<td width=320><p align=center><a href="board_view.jsp?str_aid=<%=v_articleid.elementAt(i)%>&str_c_page=<%=str_c_page%>"><%=v_subject.elementAt(i)%></p></td>
에다가..   title="<%=v_memo.elementAt(i)%>" 을 추가합니다..

그럼 이렇게 되겠죠?..
<td width=320><p align=center><a href="board_view.jsp?str_aid=<%=v_articleid.elementAt(i)%>&str_c_page=<%=str_c_page%>" title="<%=v_memo.elementAt(i)%>"><%=v_subject.elementAt(i)%></p></td>

이렇게 타이틀을 추가하면.. 링크에 마우스를 올려 놓으면 글 내용이 나오게 됩니다..


생각보다 길어졌네요.. 원래 글 삭제/수정도 해보려고 했는데 말이죠..
이건 다음 시간에 합시다..

오늘의 소스코드입니다..



저작권 표시 꼭!.. 상업적 이용 절대 불가!.. 컨텐츠 변경 안됨!..