티스토리 뷰

지난번에 게시판 만들기를 해봤습니다..

그리고 그 다음 작품으로는 이메일 시스템 만들기였는데..

이메일 만들기는 시간이 좀 걸리는 것들이 많아서 우선 패스;..

제가 게시판 소스를 책보고 처음 만들어본겁니다.. 그래서 소스도 뒤죽박죽이구요..

인터넷 보면서 작성한거라.. 필요없는 부분도 조금 있습니다..

그래서.. 더 간단하게 해보자 하는 생각에..

게시판 만들기 후속작인.. 공지사항 만들기를 한번 해보겠습니다..

게시판 만들기나 다시 해주지 왠 공지사항이냐?.. 라고 하시는 분들도 계실것 같은데..

공지사항이나 게시판이나 기본적인건 똑같습니다..

그냥 게시판인데.. 공지사항 글을 쓰는것 이라고 생각하시면 될겁니다..

그래서.. 게시판 만들기에서 사용했던 페이지 7개와 공지사항 만들기에 사용할 페이지 7개는 똑같습니다..



다만 이름만 틀릴뿐이죠..


우선 공지사항 목록이 보여줄 notice_list.. 이게 board_list 랑 같은겁니다..
공지사항에 글 쓰는 페이지 notice_add.. 이게 board_write 구요..
따로 한개씩 설명 안해도 되겠죠?..
notice_edit 가 수정하는 페이지.. notice_delete 가 삭제하는 페이지..
마지막으로 notice_view 가 글 내용 보여줄 페이지입니다..

톰캣 설정으로 기존에 사용했던 DB주소를 그대로 읽어오면.. 각 페이지에서 따로 커넥트 할 필요가 없는데..
이건 나름 복잡하니.. 그냥 각 페이지에서 커넥트하겠습니다..


자세한 내용은 게시판 만들기를 참조하시면 되구요..

공지사항 만들기 시작하겠습니다..

우선 DB에 테이블 부터 만들어줍니다..
전에도 한번 말씀 드렸지만.. 토드는 정말 좋은 프로그램입니다.. 토드 사용하시는걸 추천해 드립니다..



CREATE TABLE NOTICE
(
SEQ NUMBER PRIMARY KEY NOT NULL,
USER_ID VARCHAR2(50 BYTE),
SUBJECT VARCHAR2(200 BYTE),
CONTENTS CLOB,
REG_DATE DATE DEFAULT SYSDATE
)

이번에는 게시판 만들기와는 다르게.. 본문 내용을 CLOB로 설정했습니다..
제가 전에 올린 게시판 만들기 보시면 내용에 VARCHAR2 (2000) 으로 잡아놨는데..
더 길게 쓸수도 있기 때문에.. CLOB로 잡았습니다..

쿼리로 1씩 증가하게 만들 수 있으나.. 편한 시퀀스를 냅두고 그렇게 하는건 멍청한 짓이기 때문에..
시퀀스 하나 만들겠습니다..


CREATE SEQUENCE NOTICE_SEQ
  START WITH 0
  MAXVALUE 999999999999999999999999999
  MINVALUE 0
  NOCYCLE
  NOCACHE
  NOORDER;

그럼 기본 작업은 끝났군요.. 이제 코딩 들어가겠습니다.. 

처음 list에서 저장된 데이터가 없기 때문에.. 그냥 바로 글쓰기 페이지로 넘어가는 링크하나 만들어줍니다..

notice_list.jsp..
<html>
<head>
<title>공지사항</title>
</head>
<body>

<iframe name='action' width="0" height="0" frameborder="0" scrolling='yes'></iframe>
<!--  페이지 이동 없이 오류를 확인하기 위해서 아이프레임을 넣었구요..
        오류났을때 확인하는 방법은 아래에 설명을 하겠습니다 -->


<table>
 <tr>
  <td><a href="/notice/notice_add.jsp"><img src="이미지주소" border="0" alt="등록"></a></td>
 </tr>
</table>

</body>
</html>

위 소스로 페이지 만들면 아래처럼 나와야 됩니다..



이러면 바로 저장 페이지로 가겠죠?.. 그럼 저장 페이지를 게시판 글 쓰는 페이지 처럼 꾸며줍니다!..

notice_add.jsp..
<html>
<head>
<title>게시판</title>
</head>
<body>

<iframe name='action' width="0" height="0" frameborder="0" scrolling='yes'></iframe>

<!-- 여기서도 폼값 넘어갈때 오류가 나면 바로 확인하기 위해서 아이프레임을 넣었습니다 -->

<form name="addForm" method="post" target="action" action="/notice/notice_add_act.jsp">
<table>
 <tr>
  <td>

   <table>
    <tr>
     <td>공지사항</td>
    </tr>
   </table>

   <table>
    <tr>
     <td>아이디</td>
     <td><input name="user_id" size="50" maxlength="50"></td>
    </tr>
    <tr>
     <td>제목</td>
     <td><input name="subject" size="50" maxlength="100"></td>
    </tr>
    <tr>
     <td>내용</td>
     <td><textarea name="contents" cols="50" rows="13"></textarea></td>
    </tr>
   </table>

   <table>
    <tr>
     <td><input type="image" src="이미지주소" border="0" alt="저장"></td>
     <td><a href="/notice/notice_list.jsp"><img src="이미지주소" border="0" alt="취소"></a></td>
    </tr>
   </table>

  </td>
 </tr>
</table>
</form>


</body>
</html>




전혀 꾸미기 없이 진행되는것이기 때문에.. 테두리 설정, 버튼 센터 이동은.. 게시판 만들기 참조하세요..


게시판 만들기에서 writr_insert.jsp 부분 보시면 제목, 내용 등이 빈칸일때 경고창 나오게 만들었는데..
그것도 게시판 만들기 참고 하시면 됩니다..

그냥 이런 저런 부분들은 다 된다는 가정하에 넘어가는겁니다..

이른바 속성반이라고 할 수 있겠죠!..

글을 썼으면 DB에 저장을 해야지요..

notice_add_act.jsp..
이거 게시판 만들기에 있던것 그대로 가지고 온겁니다..
// 오라클 커넥션을 위한 메소드
<%!
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" ); // (url, ID, PASSWD)

// 위와 같이 안하고 아래와 같은 방법으로도 할 수 있습니다..
// String username = "study";
// String userpass = "study";
// Connection conn = DriverManager.getConnection( url, username, userpass );
return conn;
}

%
 Connection conn = DB_Connection();
 Statement stmt = null;
 ResultSet rs = null;
 StringBuffer query = null;

 String user_id = request.getParameter("user_id");
 String subject = request.getParameter("subject");
 String contents = request.getParameter("contents");

 try
 {
  stmt = conn.createStatement();
  query = new StringBuffer();

  String seq = "";

  query.setLength(0);
  query.append("SELECT NOTICE_SEQ.NEXTVAL AS SEQ FROM DUAL");
  rs = stmt.executeQuery(query.toString());
  if (rs.next()) {
      seq = rs.getString("SEQ");
  }
  rs.close();

  query.setLength(0);
  query.append("INSERT INTO NOTICE ( SEQ, USER_ID, SUBJECT, CONTENTS )")
    .append("VALUES ( '"+seq+"', '"+user_id+"', '"+subject+"', '"+contents+"' )");
  stmt.executeUpdate(query.toString());
  stmt.close();

 } catch( Exception e ) {
  out.println( e.toString() );
 }

out.println("<SCRIPT>parent.location.href='/notice/notice_list.jsp';</SCRIPT>");
%>

예전소스와 한번 비교해볼까요?..                              뭔가 많이 심플해졌죠?.. 주석이 없어서 그렇게 보일지도 모릅니다;..


 



나머지는 다음시간에;..

언제나 그렇듯이.. 오늘의 소스입니다..