최근 포토로그


기본적인 JSP 게시판 만들기.....기본은 지키자 JSP

JSP로 간단한 게시판 만들기(DB이용) 소스|♥- JAVA 깡소주 --*▷ 제이SP
2006.06.12 17:52
주의할점!!!
여기서 connectionpool은 자신의 아이피에 맞는 클래스를 써야한다.

CREATE TABLE BOARD_T(
IDX NUMBER(4),
WRITER VARCHAR2(20),
EMAIL VARCHAR2(50),
HOMEPAGE VARCHAR2(50),
SUBJECT VARCHAR2(30),
CONTENT VARCHAR2(4000),
WRITEDATE DATE,
READHIT NUMBER(3),
FILENAME VARCHAR2(20),
REF NUMBER(4),
LEV NUMBER(4),
SEQ NUMBER(4),
PWD VARCHAR2(10));

 

CREATE SEQUENCE BOARD_IDX
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;

 

CREATE SEQUENCE BOARD_REF
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;

 

insert into BOARD_T values(
1,'마루치',null,null,'Test',
'아싸 들어갔당~',sysdate,0,null,
1,0,0,'1234');

 

===============================================================================================

 

board_List.jsp 게시판리스트부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.sql.*, test1.ConnectionPool"%>
<%!
 //선언부
 ConnectionPool cp;
 Connection con;
 PreparedStatement pst;
 ResultSet rs;

 //답변형을 위한 SQL문
 String sql = "select * from BOARD_T order by ref desc, seq asc";

 //첫 방문자만 수행하는 부분
 public void jspInit(){
  try{
   cp = new ConnectionPool();
//   if(application.getAttribute("pool") == null)
//    application.setAttribute("pool",cp);
// 현재 영역은 서비스 영역이 아니므로 application이라는 내장객체가
// 아직 만들어진 상태가 아니다. 그래서 application을 사용하지 못한다.
  }catch(Exception e){
   e.printStackTrace();
  }
 }
%>
<%
 // 스크립트 릿은 서비스 영역이므로 모든 접속자가 수행하는 부분
 if(application.getAttribute("pool") == null)
  application.setAttribute("pool",cp);
%>
<HTML>
<HEAD>
<TITLE> 게시판 List </TITLE>
<style type="text/css">
 a:link {text-decoration:none; color:#87aaec};
 a:visited {text-decoration:none; color:#87aaec};
 a:hover {text-decoration:none; color:orange};

 input, select,textarea {font-size:9pt; background-color:#efefef; border:1 dashed #999999; color:#d2691e};

 td {font-size:8pt; color:#996600};
 .tt {font-size:10pt; font-weight:bold; color:white};
</style>
</HEAD>

<BODY>
<center>
 <hr width="600" size="2" color="#999999">
 <font size="6" face="Monotype Corsiva" color="#777777">
  Board List
 </font>
 <hr width="600" size="2" color="#999999">

 <table width="600" cellspacing="0">
   <tr>
      <td colspan="5" align="left">
   <b><a href="/bb/board_write.html">[글올리기]</a></b>
  </td>
   </tr>
   <tr align="center" bgColor="#cccccc">
   <td width="10%" class="tt">No.</td>
   <td width="40%" class="tt">제   목</td>
   <td width="15%" class="tt">글쓴이</td>
   <td width="20%" class="tt">날짜</td>
   <td width="15%" class="tt">조회수</td>
   </tr>
<%
 int totalCount = 0; //총 게시물의 수
 int pageSize = 10; //한 페이지당 보여질 게시물의 수
 int totalPage = 0; //총 페이지 수
 int c_page = 0; //현재 페이지
 int count = 0; //한 페이지당 pageSize를 벗어나는지를 검증하는 변수

 //현재 페이지 값 구하기
 String current_p = request.getParameter("page");
 if(current_p == null || current_p.equals(""))
  c_page=1;
 else
  c_page=Integer.parseInt(current_p);

 try{
  con = cp.getConn();
/*
  pst = con.prepareStatement(sql);
  ResultSet rs = pst.executeQuery();

  // 전체 게시물의 수 구하기
  while(rs.next())
   totalCount++;
  // 현재 위치에서는 ResultSet은 모두 소진한 상태이므로
  // 다시 ResultSet을 구해야 한다.
*/
// ResultSet의 커서를 보다 유동적으로 사용하기 위해
// ResultSet을 구하는 PreparedStatement를 생성할 때
// ResultSet의 형태를 정의하여 생성한다.
  pst = con.prepareStatement(sql,
   ResultSet.TYPE_SCROLL_SENSITIVE,
   ResultSet.CONCUR_UPDATABLE);
  
  rs = pst.executeQuery();
  rs.last(); //ResultSet의 커서를 마지막 행으로 이동
  totalCount = rs.getRow(); //총 게시물의 수 구하기

  // 전체 페이지 수 구하기
  totalPage = totalCount/pageSize;
  if(totalCount % pageSize != 0)
   totalPage++;

  rs.beforeFirst();// 첫 행의 전으로 이동

  // 현재 페이지 값에 따라 첫 데이터의 위치를 알아내는 공회전
  for(int i=0 ; i<(c_page-1)*pageSize ; i++)
   rs.next();

  while(rs.next()){  //실제 자원을 출력해 주는 반복문
   int idx = rs.getInt("idx");
   int num = totalCount - (rs.getRow()-1);
   String writer  = rs.getString("writer");
   String subject = rs.getString("subject");
   String writeDate = rs.getString("writedate");
   int readHit = rs.getInt("readHit");
   int ref = rs.getInt("ref");
   int lev = rs.getInt("lev");
   int seq = rs.getInt("seq");
%>
    <tr align="center">
     <td><%=num%></td>
     <td align="left">
<%
     // lev 값에 따라 들여쓰기
     for(int i=0 ; i<lev ; i++)
      out.print("&nbsp;&nbsp;");

     if(lev > 0)
      out.print("<font color='orange'>[Re]</font>");
%>
     <a href="board_Content.jsp?idx=<%=idx%>&page=<%=c_page%>&num=<%=num%>">
<%
     if(subject.length() > 10)
      out.print(subject.substring(0,10)+"...");
     else
      out.print(subject);
%>
     </a>
     </td>
     <td><%=writer%></td>
     <td><%=writeDate%></td>
     <td><%=readHit%></td>
    </tr>
<%
    if(++count >= pageSize)
     break;
  } // while문의 끝
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  try{
   if(rs != null)
    rs.close();
   if(pst != null)
    pst.close();
   if(con != null)
    cp.returnConn(con);
  }catch(Exception e){}
 }

 if(totalCount == 0){
%> 
  <tr>
    <td colspan="5" align="center" height="90">
     <font size="3" color="black"><b>현재 등록된 데이터가 없습니다.</b></font>
    </td>
  </tr>
<%
 } // end if
%>

<%-- 페이징 기법 --%>
  <tr>
   <td colspan="5" align="left">
    <hr width="600" size="2" color="#999999">
<%
    if(c_page > 1){
%>
      <a href="board_List.jsp?page=<%=c_page-1%>">◀이전페이지</a>
<%
    }else
     out.print("<font color='#bcbcbc'>◀이전페이지</font>");
%>
     ||
<%
    if(c_page < totalPage){
%>
     <a href="board_List.jsp?page=<%=c_page+1%>">다음페이지▶</a>
<%
    }else
     out.print("<font color='#bcbcbc'>다음페이지▶</font>");
%>
    <hr width="600" size="2" color="#999999">
   </td>
  </tr>
  <tr>
   <td colspan="5" align="right">
    page/pages(총 게시물 )
   </td>
  </tr>
 </table>
</center>
</BODY>
</HTML>

 

===============================================================================================

 

board_write.html 게시판글쓰기폼

 

<HTML>
<HEAD>
<TITLE> 글 쓰기 </TITLE>
<style type="text/css">
 td{font-size:9pt; color:#d2691e};
 input,select,textarea {font-size:9pt;background-color:#efefef;
  border:1 dashed #999999;color:#d2691e};
</style>
<script language="JavaScript">
 function send(ff)
 {
  
  if(ff.writer.value =="")
  {
   alert("이름을 입력하세요");
   ff.writer.focus();
   return;
  }
  if(ff.subject.value =="")
  {
   alert("제목을 입력하셔야죠?");
   ff.subject.focus();
   return;
  }
  if(ff.content.value =="")
  {
   alert("최소한 몇자는 입력하셔야죠?");
   ff.content.focus();
   return;
  }
  if(ff.pwd.value =="")
  {
   alert("비밀번호를 입력하세요?");
   ff.pwd.focus();
   return;
  }
  ff.submit();
 }
</script>
</HEAD>

<BODY><br><br>
<form name="frm" method="post" action="board_write.jsp" enctype="multipart/form-data">
 <table width="600" cellpadding="0" cellspacing="0" border="0" align="center">
  <tr bgColor="#ffffff" height="25">
   <td width="20%" align="center">글쓴이</td>
   <td width="80%"><input type="text" name="writer" maxlength="10"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">E-mail</td>
   <td><input type="text" name="email" maxlength="50" size="40"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">Homepage</td>
   <td><input type="text" name="homepage" maxlength="50" size="40"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">글제목</td>
   <td><input type="text" name="subject" maxlength="20" size="40"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">글 내용</td>
   <td><textarea cols="60" rows="10" name="content"></textarea></td>
  </tr>

  <tr bgColor="#ffffff" height="25">
   <td align="center">첨부파일</td>
   <td><input type="file" name="file" size="47"></td>
  </tr>

  <tr bgColor="#ffffff" height="25">
   <td align="center">암호</td>
   <td><input type="password" name="pwd" maxlength="20"></td>
  </tr>

  <tr><td>&nbsp;</td></tr>
  <tr bgColor="#ffffff" height="25">
   <td>&nbsp;</td>
   <td>
   <table width="100%">
    <tr>
     <td width="70%">
      <input type="button" value="보내기" style="height:22;border:1 solid" onClick="send(this.form)">&nbsp;&nbsp;
      <input type="reset" value="다시 쓰기" style="height:22;border:1 solid">
     </td>
     <td width="30%">
      <input type="button" value=" List " style="height:22;border:1 solid">
     </td>
    </tr>
   </table>
   </td>
  </tr>
 </table>
</form>


</BODY>
</HTML>

 

===============================================================================================

 

board_write.jsp 게시판글쓰기부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.sql.*, test1.ConnectionPool"%>
<%@ page import="java.io.*"%>
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%
 // 첨부 파일이 저장될 경로를 절대 경로로 구한다.
 //      application.getRealPath(String p);
 //  application은 ServletContext = 현재 사용되는 사이트(/bb)
 //      C:\Board\fileUpload\data
 String path = application.getRealPath("/fileUpload/data");
 
 ConnectionPool cp = (ConnectionPool)application.getAttribute("pool");
 if(cp != null){
  Connection con = null;
  PreparedStatement pst = null;
  String sql = "insert into board_T values(board_idx.nextVal,?,?,?,?,?,sysdate,0,?,board_ref.nextVal,0,0,?)";

  try{
   MultipartRequest mr = new MultipartRequest(
    request, path, 5*1024*1024, "euc-kr" , new DefaultFileRenamePolicy());

   String s_writer = mr.getParameter("writer");
   String s_email = mr.getParameter("email");
   String s_homepage = mr.getParameter("homepage");
   String s_subject = mr.getParameter("subject");
   String s_content = mr.getParameter("content");
   String s_pwd = mr.getParameter("pwd");

   String f_name = mr.getFilesystemName("file");// 파일 저장후 이름 얻기
//   파일의 원래 이름 얻기
//   String s_name = mr.getOriginalFileName("file");

   // 파일의 사이즈를 구하고 싶다면...
/*   File f = null;
   String fileSize = null;
   if(f_name != null){
    f = mr.getFile("file");
    fileSize = String.valueOf(file.length());
   }
*/   
   //DB작업
   con = cp.getConn();
   pst = con.prepareStatement(sql);
   pst.setString(1,s_writer);
   pst.setString(2,s_email);
   pst.setString(3,s_homepage);
   pst.setString(4,s_subject);
   pst.setString(5,s_content);
   pst.setString(6,f_name);
   pst.setString(7,s_pwd);
   pst.executeUpdate();

  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pst != null)
     pst.close();
    if(con != null)
     cp.returnConn(con);
   }catch(Exception e){}
  }
  response.sendRedirect("board_List.jsp");// 이동
 }
%>

 

===============================================================================================

 

board_Content.jsp 게시판내용보기부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.net.*,java.sql.*, test1.ConnectionPool"%>
<%!
 ConnectionPool cp;
 Connection con;
 PreparedStatement pst;
 String sql = "select * from board_T where idx=?"; 
%>
<%
 ConnectionPool cp = (ConnectionPool)application.getAttribute("pool");
 if(cp != null){
  int idx = Integer.parseInt(request.getParameter("idx"));
  String num = request.getParameter("num");
  String p = request.getParameter("page");
%>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<style type="text/css">
 a:link {text-decoration:none; color:#87aaec};
 a:visited {text-decoration:none; color:#87aaec};
 a:hover {text-decoration:none; color:orange};

 input, select,textarea {font-size:9pt; background-color:#efefef; border:1 dashed #999999; color:#d2691e};

 td {font-size:8pt; color:#996600};
 .tt {font-size:10pt; font-weight:bold; color:white};
</style>
<script language="javaScript">
 function list()
 {
  document.f.action="board_List.jsp";
  document.f.submit();
 }
 function edit()
 {
  document.f.action="board_Edit.jsp";
  document.f.submit();
 }
 function del()
 {
//  document.f.action="board_Del.jsp";
//  document.f.submit();
  open("board_Del.jsp?idx=<%=idx%>&page=<%=p%>", "delete", "width=320,height=120,top=300,left=350");
 }
 function ans()
 {
  document.f.action="board_Ans.jsp";
  document.f.submit();
 }
</script>
</HEAD>

<BODY>
<p>
<center>
<form name="f" method="post">
 <font size="6" face="Monotype Corsiva" color="#777777">
  Board Content Page
 </font><br>
 <hr width="600" size="2" color="#999999">
<%
 
 try{
  con = cp.getConn();

  // 조회수 1 증가 --------------------------------------------------------
  Statement st =
   con.createStatement();
  st.executeUpdate("update board_T set readHit=readHit+1 where idx="+idx);
  st.close();
  //---------------------------------------------------------------------------------
  pst = con.prepareStatement(sql);
  pst.setInt(1,idx);
  
  ResultSet rs = pst.executeQuery();
  if(rs.next())
  {
   String writer = rs.getString("writer");
   String email = rs.getString("email");
   String homepage = rs.getString("homepage");
   String subject = rs.getString("subject");
   String content = rs.getString("content");
   String writeDate = rs.getString("writeDate");
   int readHit = rs.getInt("readHit");
   String fileName = rs.getString("fileName");
   //답변을 위한 필드들
   String ref = rs.getString("ref");
   String lev = rs.getString("lev");
   String seq = rs.getString("seq");

%>
   <table width="600">
    <tr align="center">
     <td width="20%" bgColor="#efefef">No.</td>
     <td width="30%"><%=num%></td>
     <td width="20%" bgColor="#efefef">날짜</td>
     <td width="30%"><%=writeDate%></td>
    </tr>
    <tr align="center">
     <td bgColor="#efefef">글쓴이</td>
     <td><%=writer%></td>
     <td bgColor="#efefef">Homepage</td>
     <td><%=homepage%></td>
    </tr>
    <tr>
     <td colspan="4" bgColor="#fefefe" style="border:1 solid #999999; font-size:12pt; color:navy">
      <b>제목:</b><%=subject%></font>
     </td>
    </tr>
   <%
    if(fileName != null)
    {
      String enFile = URLDecoder.decode(fileName);
   %>
    <tr>     
     <td colspan="4">
      <img src="images/down.gif" border="0">
      <b>
       <a href="downLoad.jsp?fileName=<%=enFile%>">
        <%=fileName%>
       </a>
      </b>
     </td>
    </tr>
   <%
    }//end if
   %>
    <tr>
     <td colspan="4" style="border:1 deshed #999999" height="200">
      <pre><%=content%></pre>
     </td>
    </tr>
   </table>
   <hr width="600" size="2" color="#999999">
   <input type="hidden" name="idx" value="<%=idx%>"> 
   <input type="hidden" name="name" value="<%=writer%>"> 
   <input type="hidden" name="ref" value="<%=ref%>">
   <input type="hidden" name="lev" value="<%=lev%>">
   <input type="hidden" name="seq" value="<%=seq%>">
   <input type="hidden" name="page" value="<%=p%>">

<% 
  }// end if
 }catch(Exception e){
  e.printStackTrace();
 }finally
 {
  try{
   if(con != null)
    cp.returnConn(con);
  }catch(Exception e){}
 }
%>
<input type="button" value=" 편 집 " onClick="edit()" style="cursor:hand">
<input type="button" value=" 삭 제 " onClick="del()" style="cursor:hand">
<input type="button" value=" 답 변 " onClick="ans()" style="cursor:hand">
<input type="button" value=" List " onClick="list()" style="cursor:hand">
<hr width="600" size="2" color="#999999">
</form>
</center>
</BODY>
</HTML>
<%
 }else
  response.sendRedirect("board_List.jsp");
%>

 

===============================================================================================

 

board_Ans.jsp 게시판답변부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%
 //현재 페이지에서는 DB 연결을 하지 않는다.
 request.setCharacterEncoding("euc-kr");

 String s_name = request.getParameter("name");
 int ref = Integer.parseInt(request.getParameter("ref"));
 int lev= Integer.parseInt(request.getParameter("lev"));
 int seq= Integer.parseInt(request.getParameter("seq"));
 
 String p = request.getParameter("page");
%>
<HTML>
<HEAD>
<TITLE> 글 쓰기 </TITLE>
<style type="text/css">
 td{font-size:9pt; color:#d2691e};
 input,select,textarea {font-size:9pt;background-color:#efefef;
  border:1 dashed #999999;color:#d2691e};
</style>
<script language="JavaScript">
 function send(ff)
 {
  
  if(ff.writer.value =="")
  {
   alert("이름을 입력하세요");
   ff.writer.focus();
   return;
  }
  if(ff.subject.value =="")
  {
   alert("제목을 입력하셔야죠?");
   ff.subject.focus();
   return;
  }
  if(ff.content.value =="")
  {
   alert("최소한 몇자는 입력하셔야죠?");
   ff.content.focus();
   return;
  }
  if(ff.pwd.value =="")
  {
   alert("비밀번호를 입력하세요?");
   ff.pwd.focus();
   return;
  }
  ff.submit();
 }
</script>
</HEAD>

<BODY><br><br>
<form name="frm" method="post" action="ans_ok.jsp" enctype="multipart/form-data">
 <table width="600" cellpadding="0" cellspacing="0" border="0" align="center">
  <tr bgColor="#ffffff" height="25">
   <td colspan="2">reple to : <%=s_name%></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td width="20%" align="center">글쓴이</td>
   <td width="80%"><input type="text" name="writer" maxlength="10"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">E-mail</td>
   <td><input type="text" name="email" maxlength="50" size="40"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">Homepage</td>
   <td><input type="text" name="homepage" maxlength="50" size="40"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">글제목</td>
   <td><input type="text" name="subject" maxlength="20" size="40"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">글 내용</td>
   <td><textarea cols="60" rows="10" name="content"></textarea></td>
  </tr>

  <tr bgColor="#ffffff" height="25">
   <td align="center">첨부파일</td>
   <td><input type="file" name="file" size="47"></td>
  </tr>

  <tr bgColor="#ffffff" height="25">
   <td align="center">암호</td>
   <td><input type="password" name="pwd" maxlength="20"></td>
  </tr>

  <tr><td>&nbsp;</td></tr>
  <tr bgColor="#ffffff" height="25">
   <td>&nbsp;</td>
   <td>
   <table width="100%">
    <tr>
     <td width="70%">
      <input type="button" value="보내기" style="height:22;border:1 solid" onClick="send(this.form)">&nbsp;&nbsp;
      <input type="reset" value="다시 쓰기" style="height:22;border:1 solid">
     </td>
     <td width="30%">
      <input type="button" value=" List " style="height:22;border:1 solid" onClick="javascript(location.href='board_List.jsp?page=<%=p%>')">
     </td>
    </tr>
   </table>
   </td>
  </tr>
 </table>
 <%-- 원글의 정보(ref, lev, sunbun)들을 같이 보낸다. --%>
 <input type="hidden" name="ref" value="<%=ref%>">
 <input type="hidden" name="lev" value="<%=lev%>">
 <input type="hidden" name="seq" value="<%=seq%>">
 <input type="hidden" name="page" value="<%=p%>">
</form>


</BODY>
</HTML>

 

===============================================================================================

 

Ans_ok.jsp 게시판답변이 리스트에 올라가는 부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.sql.*, test1.ConnectionPool"%>
<%@ page import="java.io.*"%>
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%!
 ConnectionPool cp;
 Connection con;
 PreparedStatement pst;
 String sql1 = "update board_T set seq=seq+1 where ref=? and seq>?";
 String sql2 = "insert into board_T values(board_idx.nextVal,?,?,?,?,?,sysdate,0,?,?,?,?,?)";
%>
<%
 cp = (ConnectionPool)application.getAttribute("pool");
 if(cp != null){
  String path = application.getRealPath("/fileUpload/data");
  
  MultipartRequest mr = new MultipartRequest(
   request, path, 5*1024*1024 , "euc-kr" , new DefaultFileRenamePolicy());

  // board_Ans.jsp로 부터 전달되는 데이터를 받는다.
  String s_writer = mr.getParameter("writer");
  String s_email = mr.getParameter("email");
  String s_homepage = mr.getParameter("homepage");
  String s_subject = mr.getParameter("subject");
  String s_content = mr.getParameter("content");
  String s_pwd = mr.getParameter("pwd");

  String f_name = mr.getFilesystemName("file");// 파일 저장후 이름 얻기

  int s_ref = Integer.parseInt(mr.getParameter("ref"));
  int s_lev = Integer.parseInt(mr.getParameter("lev"));
  int s_seq = Integer.parseInt(mr.getParameter("seq"));
  int s_page = Integer.parseInt(mr.getParameter("page"));

  //DB작업 - 우선 순서 상의의미로 인해 이미 입력되어 있는 답변들의 seq값을
  //1씩 증가 시킨다.
  try{
   con = cp.getConn();
   pst = con.prepareStatement(sql1);
   pst.setInt(1,s_ref);
   pst.setInt(2,s_seq);
   pst.executeUpdate();

   pst.close();

   pst = con.prepareStatement(sql2);
   pst.setString(1, s_writer);
   pst.setString(2, s_email);
   pst.setString(3, s_homepage);
   pst.setString(4, s_subject);
   pst.setString(5, s_content);
   pst.setString(6, f_name);
   pst.setInt(7, s_ref);
   pst.setInt(8, s_lev+1);
   pst.setInt(9, s_seq+1);
   pst.setString(10, s_pwd);
   pst.executeUpdate();

  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pst != null)
     pst.close();
    if(con != null)
     cp.returnConn(con);
   }catch(Exception e){}
  }
  response.sendRedirect("board_List.jsp?page="+s_page);
 }else
  response.sendRedirect("board_List.jsp");
%>

 

===============================================================================================

 

board_Edit.jsp 편집부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.sql.*, test1.ConnectionPool"%>
<%
 String s_idx = request.getParameter("idx");
 String s_page = request.getParameter("page");

 ConnectionPool cp = (ConnectionPool)application.getAttribute("pool");

 if(cp != null){

  Connection con = null;
  PreparedStatement pst = null;
  String sql = "select * from board_T where idx=?";
  ResultSet rs = null;
  try{

   con = cp.getConn();
   pst = con.prepareStatement(sql);
   pst.setInt(1, Integer.parseInt(s_idx));
   rs = pst.executeQuery();

   if(rs.next()){
    String s_writer = rs.getString("writer");
    String s_email = rs.getString("email");
    String s_homepage = rs.getString("homepage");
    String s_subject = rs.getString("subject");
    String s_content = rs.getString("content");

%>
<HTML>
<HEAD>
<TITLE> 글 쓰기 </TITLE>
<style type="text/css">
 td{font-size:9pt; color:#d2691e};
 input,select,textarea {font-size:9pt;background-color:#efefef;
  border:1 dashed #999999;color:#d2691e};
</style>
<script language="JavaScript">
 function send(ff)
 {
  
  if(ff.writer.value =="")
  {
   alert("이름을 입력하세요");
   ff.writer.focus();
   return;
  }
  if(ff.subject.value =="")
  {
   alert("제목을 입력하셔야죠?");
   ff.subject.focus();
   return;
  }
  if(ff.content.value =="")
  {
   alert("최소한 몇자는 입력하셔야죠?");
   ff.content.focus();
   return;
  }
  if(ff.pwd.value =="")
  {
   alert("비밀번호를 입력하세요?");
   ff.pwd.focus();
   return;
  }
  ff.submit();
 }
</script>
</HEAD>

<BODY><br><br>
<form name="frm" method="post" action="board_Edit_ok.jsp">
 <table width="600" cellpadding="0" cellspacing="0" border="0" align="center">
  <tr bgColor="#ffffff" height="25">
   <td width="20%" align="center">글쓴이</td>
   <td width="80%"><input type="text" name="writer" maxlength="10" value="<%=s_writer%>" readOnly></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">E-mail</td>
   <td><input type="text" name="email" maxlength="50" size="40"
   value="<%
        if(s_email != null)
          out.print(s_email);
      %>"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">Homepage</td>
   <td><input type="text" name="homepage" maxlength="50" size="40" value="<% if(s_homepage != null) out.print(s_homepage);%>"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">글제목</td>
   <td><input type="text" name="subject" maxlength="20" size="40" value="<%=s_subject%>"></td>
  </tr>
  <tr bgColor="#ffffff" height="25">
   <td align="center">글 내용</td>
   <td><textarea cols="60" rows="10" name="content"><%=s_content%></textarea></td>
  </tr>

  <tr bgColor="#ffffff" height="25">
   <td align="center">암호</td>
   <td><input type="password" name="pwd" maxlength="20" value=""></td>
  </tr>
 <input type="hidden" name="idx" value="<%=s_idx%>">
 <input type="hidden" name="page" value="<%=s_page%>">
  <tr><td>&nbsp;</td></tr>
  <tr bgColor="#ffffff" height="25">
   <td>&nbsp;</td>
   <td>
   <table width="100%">
    <tr>
     <td width="70%">
      <input type="button" value="보내기" style="height:22;border:1 solid" onClick="send(this.form)">&nbsp;&nbsp;
      <input type="reset" value="다시 쓰기" style="height:22;border:1 solid">
     </td>
     <td width="30%">
      <input type="button" value=" List " style="height:22;border:1 solid">
     </td>
    </tr>
   </table>
   </td>
  </tr>
 </table>
</form>


</BODY>
</HTML>
<%
   }//end if
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pst != null)
     pst.close();
    if(con != null)
     cp.returnConn(con);
   }catch(Exception e){}
  }
 }else
  response.sendRedirect("board_List.jsp");
%>

 

===============================================================================================

 

board_Edit_ok.jsp 편집하고 올라가는 부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.sql.*, test1.ConnectionPool"%>
<%!
 ConnectionPool cp;
 Connection con;
 PreparedStatement pst;
 String sql = "update board_T set email=?,homepage=?,subject=?,content=? where idx=? and pwd=?";
 boolean f; // false - 33행에서 사용된 cnt값에 의해 SQL문 적용 레코드를 알아내는데 쓰인다.
%>
<%
 f = false;
 //요청한 곳으로부터 자원을 가져오기 위하여 한글 처리
 request.setCharacterEncoding("euc-kr");
 String s_email = request.getParameter("email");
 String s_homepage = request.getParameter("homepage");
 String s_subject = request.getParameter("subject");
 String s_content = request.getParameter("content");
 String s_pwd = request.getParameter("pwd");
 String s_page = request.getParameter("page");
 String s_idx = request.getParameter("idx");

 cp = (ConnectionPool)application.getAttribute("pool");
 if(cp != null){
  try{
   con = cp.getConn();
   pst = con.prepareStatement(sql);
   pst.setString(1,s_email);
   pst.setString(2,s_homepage);
   pst.setString(3,s_subject);
   pst.setString(4,s_content);
   pst.setInt(5,Integer.parseInt(s_idx));
   pst.setString(6,s_pwd);
   int cnt = pst.executeUpdate();
   if(cnt >= 1)
    f = true;
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pst != null)
     pst.close();
    if(con != null)
     cp.returnConn(con);
   }catch(Exception e){}
  }
  if(f) //수정된 레코드가 1개 이상이다면
   out.println("수정 완료!");
  else
   out.println("패스워드가 틀려 수정 하지 못했습니다.");
%>
  <input type="button" value="목록가기" onClick="javascript:location.href='board_List.jsp?page=<%=s_page%>'">
<%
 }else
  response.sendRedirect("board_List.jsp");
%>

===============================================================================================

 

board_Del.jsp 삭제하는 부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%
 String s_idx = request.getParameter("idx");
 String s_page = request.getParameter("page");
%>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<style>
 input { border:1 solid #898989};
 td {font-size:9pt}
</style>
<script>
 function del(){
  if(document.ff.pwd.value == ""){
   alert("비밀번호를 입력하세요");
   document.ff.pwd.focus();
   return;
  }
  document.ff.action="board_Del_ok.jsp";
  document.ff.submit();
 }
</script>
</HEAD>

<BODY>
<form name="ff" method="post">
<input type="hidden" name="idx" value="<%=s_idx%>">
<input type="hidden" name="page" value="<%=s_page%>">
 <table align="center" width="300" cellpadding="5">
  <tr>
   <td style="border:1 solid #229983" width="100%">
    <table width="100%">
     <tr>
      <td colspan="2">
       삭제할 자원의 비밀번호를 입력하세요?!
      </td>
     </tr>
     <tr>
      <td align="right" width="80%">
       <input type="password" name="pwd">
      </td>
      <td width="20%">&nbsp;</td>
     </tr>
     <tr>
      <td align="center" colspan="2">
       <input type="button" value="삭제" onClick="del()">
       <input type="button" value="취소" onClick="javascript:self.close()">
      </td>
     </tr>
    </table>
   </td>
  </tr>
 </table>
</form>
</BODY>
</HTML>

 

===============================================================================================

 

board_Del_ok.jsp 삭제해서 올라오는 부분...

 

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.sql.*, test1.ConnectionPool"%>
<%!
 ConnectionPool cp;
 Connection con;
 PreparedStatement pst;
 String sql = "delete from board_T where idx=? and pwd=?";
%>
<%
 cp = (ConnectionPool)application.getAttribute("pool");

 String s_idx = request.getParameter("idx");
 String s_pwd = request.getParameter("pwd");
 String s_page = request.getParameter("page");
 if(cp != null){
  try{
   con = cp.getConn();
   pst = con.prepareStatement(sql);
   pst.setInt(1, Integer.parseInt(s_idx));
   pst.setString(2, s_pwd);
   pst.executeUpdate();
//   response.sendRedirect("board_List.jsp?page="+s_page);//이동
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pst != null)
     pst.close();
    if(con != null)
     cp.returnConn(con);
   }catch(Exception e){}
  }
 }else
//  response.sendRedirect("board_List.jsp");
%>
<script>
 opener.location.href="board_List.jsp?page=<%=s_page%>";
 self.close();
</script>

 

===============================================================================================




덧글

  • 기혁빠돌 2009/09/15 15:44 # 답글

    커넥션을 전역변수로 선언한건 그렇다쳐도..
    ResultSet이나 PreparedStatement를 전역화시키면 안될텐데요...
  • 민족의태양 2009/09/16 17:36 # 답글

    네..물론입니다.
  • 이레이져 2011/11/07 11:03 # 삭제 답글

    소스 감사합니다
    그런데 Ans_ok.jsp부분과 board_write.jsp파일에
    <%@ page import="com.oreilly.servlet.MultipartRequest"%>
    <%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>

    이부분이 없다고 에러가 떠서요 서블릿구분같은데

    어떻게해야되는건가요 ㅠ 어떻게해야할줄을 모르겠어서 질문남김니다 ㅠ
  • k2il 2011/11/25 17:20 # 삭제 답글

    <%@ page import="java.sql.*, test1.ConnectionPool"%>
    계속 오류가 뜨는데요? test1.ConnectionPool은 어디에 있는걸까요

    답변좀 ㅜㅜ k2il@naver.com
  • 그대한잔 2012/11/14 00:49 # 삭제 답글

    좋은 글 감사히 잘 봤습니다.
    저도 이레이져님과 k2il님의 질문에 대한 답변이 궁금합니다.
    혹시 이글을 보신다면 답변좀 부탁드리겠습니다.
  • 박디 2013/01/04 15:42 # 삭제 답글

    //k2il, 그대한잔
    자료 찾다가 지나가면서 남깁니다. ConnectionPool은 아마 작성자 분이 dataSource를 가져오기
    위해 클래스를 제작하신것 같습니다. 즉 ConnectionPool cp = new ConnectionPool()부분은
    dataSource를 사용하시거나 간단히 JDBC커넥션을 사용해보셔도 결과를 보실수 있을겁니다.

    ex) Connection cp = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521,ID,PW);
    (기억이 가물하네요..getConnection부분은 JDBC로 검색해서 찾아보시면 됩니다.

    com.oreilly.servlet.MultipartRequest 는 파일 전송을 위한 oreilly책에 수록된 라이브러리 입니다.
    사용하기가 간단해서 널리 쓰이는 라이브러리 이며 이또한 MultipartRequest 파일전송 으로 찾아보시면
    cos.jar라는 라이브러리를 찾으실 수 있습니다. 보통 WEB-INF/lib 폴더에 추가하셔보면 될겁니다.
  • 간돌 2014/06/23 14:24 # 삭제 답글

    저도 윗분들처럼
    <%@ page import="com.oreilly.servlet.MultipartRequest"%>
    <%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
    부분 에러나는데
    ConnectionPool 부분 이해가 가질않습니다
    여기서 connectionpool은 자신의 아이피에 맞는 클래스를 써야한다.... << 이부분 어렵네요..
    gandol4692@naver.com 답변좀 부탁드립니다
  • 짜릿한 만남~ 오늘 2016/10/21 14:36 # 삭제 답글

    짜릿한 만남~ 오늘밤 만나 볼까요??

    매일 매일 같은 섹.파가 지겨우 세요??
    그럼 지금 바로 새로운 섹.파를 찾아서 떠나볼까요?
    대한민국 섹.파 검색, 스와핑, 초대남, 성. 인 만남을 무료료 할 수 있는곳~!!!

    "코코킹"에서 그 시작을 해보세요.


    주소1: http://q.gs/AN6Sl
    주소2: https://twitter.com/sexking38802406
  • cialis_cheap 2018/10/01 04:01 # 삭제 답글

댓글 입력 영역