5. 글 쓰기를 위한 클래스 정의(Write.java)

데이터를 입력할 때 가장 편리한 방법은 역시 스크립틀릿으로 작성하는 것입니다.

굳이 데이터 입려처리를 위한 빈즈를 작성할 필요도 없으니까요.. 하지만 지금까지 빈즈로 처리했으니까 이것도 걍 빈즈로 처리해 보겠습니다. 소스의 양은 좀 많아지겠지만 빈즈에 대한 이해도 확실히 할 수 있을 뿐더러 잘만 설계된다면 두고두고 이용할 수 있을 것 같습니다.

글쓰기 입력 폼 이나 인증처리 부분은 사실 여기서 중요한 부분이 아닙니다.

실제로 빈즈가 어떻게 데이터를 처리하는지와 또 보여주기 로직(JSP 페이지)에서는 어떻게 구현을 하느냐 입니다.

게시판 작성 로직은 이미 많은 방법들이 공개되어 있고 웹프로그래밍을 하신다면 제일 먼저 접하시는 부분이라 생각됩니다.

그래서 이 부분에서는 입력 폼 이나 인증처리 부분은 과감히 생략하도록 하겠습니다.

관심 있으신 부분은 소스를 참고하시기 바랍니다(사실 완벽하지는 않습니다.^^;;).

 

글쓰기를 처리하기 위한 빈즈도 리스트 출력 빈즈와 마찮가지로 각 데이터를 설정(setProperty)하고 빈즈내의 데이터 처리 메서드를 호출하면 됩니다.

SetProperty 메서드는 필요한 요소들을 일정한 형식 setXXX(Object obj) 형식으로 작성하시면 되고 데이터 처리 메서드는 이렇게 셋팅(?)된 자료를 데이터 베이스에 추가하거나 삭제하는 등의 일련의 행위(?)를 구현하면 됩니다.

 

cmd.jsp

<%@ page contentType="text/html; charset=euc-kr" %>

<jsp:useBean id="ModifyDB" class="board.Write"/>

<%

String PAGE = request.getParameter("PAGE");

String key = request.getParameter("KEY");

String field = request.getParameter("FIELD");

String cmd = request.getParameter("CMD");

String no = request.getParameter("NO");

String name = request.getParameter("NAME");

String email = request.getParameter("EMAIL");

String subject = request.getParameter("SUBJECT");

String passwd = request.getParameter("PASSWD");

String content = request.getParameter("CONTENT");

%>

<jsp:setProperty name="ModifyDB" property="cmd" value="<%=cmd%>"/>

<jsp:setProperty name="ModifyDB" property="no" value="<%=no%>"/>

<jsp:setProperty name="ModifyDB" property="name" value="<%=name%>"/>

<jsp:setProperty name="ModifyDB" property="email" value="<%=email%>"/>

<jsp:setProperty name="ModifyDB" property="subject" value="<%=subject%>"/>

<jsp:setProperty name="ModifyDB" property="passwd" value="<%=passwd%>"/>

<jsp:setProperty name="ModifyDB" property="content" value="<%=content%>"/>

<%

ModifyDB.modifyData();

response.sendRedirect("list.jsp?PAGE=" + PAGE + "&KEY=" + key + "&FIELD=" + field);

%>

 

일단 setProperty로 데이터를 셋팅후 modifyData() 를 호출하므로써 작업이 마무리되도록 하였습니다.

modifyData() 는 셋팅된 커맨드에 따라 분기를 하는데..

cmd.jsp 에서는 수정과 입력(새로운글) 만이 처리됩니다. 나머지 삭제는 write.jsp에서 암호를 확인후 Write.java 의 deleteData(int no) 를 호출하므로써 이루어 집니다.

 

예로 글 입력 처리 메서드를 살펴보도록 하겠습니다.

 

write.java

public void addData() throws SQLException{

    int group_id = getMaxGroup();

    Connection con = null;

    PreparedStatement pstmt = null;

    String query;

 

    query = "INSERT INTO BOARD_T " +          

"(NAME,EMAIL,SUBJECT,CONTENT,”  +

“REGI_DATE,CNT,GROUP_ID,DEPTH,GROUP_ORDER,PASSWD)" +

                " VALUES (?,?,?,?,sysdate(),0,?,0,0,?)";

    try{

      con = getDBConnection();

 

      pstmt = con.prepareStatement(query);

      pstmt.setString(1,name);

      pstmt.setString(2,email);

      pstmt.setString(3,subject);

      pstmt.setString(4,content);

      pstmt.setInt(5,group_id);

      pstmt.setString(6,passwd);

      pstmt.execute();

      con.commit();

    }catch(SQLException e){

      e.getMessage();

    }finally{

      if(pstmt != null) pstmt.close();

      if(con != null) pstmt.close();

    }

  }

 

눈여겨 보실 부분이라면 preparedStatement 를 사용했다는 점과 입력되는 각 필드값을

preparedStatement 의 setString 이나 setInt 의 메서드를 사용해 입력처리한 부분입니다.

이렇게 처리하면 단따옴표를 특별히 변환해주지 않아도 된다는 점입니다.

게다가 반복되는 작업은 preparedStatement를 쓰는 것이 성능상 유리합니다.

 

나머지 작업을 위해 필요한 메서드는 소스를 참고 하시기 바랍니다.

 

이로써 게시판 만들기를 위한 사항들을 소스와 함께 살펴 보았습니다.

다른 스크립트 언어와는 많은 점들이 다를것입니다. 특히 빈즈를 이용해 각 기능별로 컴포넌트화 시킨점이나 태그라이브러리를 쓴 부분은 여타의 언어에서는 찾아보기 힘든 강력한 기능이라 할 수 있습니다.

물론 단점도 없지않아 있습니다.

특히 오버헤드가 많이 걸리는 데이터베이스 연결부분이 최적화 되어 있지 않은 점이나

지나치게 많은 메서드로 구분한점등이 그러합니다.

메서드(DB 컨넥션)가 많아 지기 때문에 오버헤드도 많이 걸리게 됩니다.

욕심을 내자면 이러한 부분은 커넥션 풀링을 사용하고 더 나아가 EJB로의 전향을 고려하는 것입니다.

 

그럼 이만 줄이겠습니다.