네번째 시간이다.
actionForm에서 에러없이 writeAction을 실행하게 된다면 writeAction클래스를 실행하게 될 것이다. writeAction클래스를 보도록 하자.
writeAction 클래스 소스
package guestbook.actions;
import java.sql.Timestamp;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import guestbook.beans.GuestBookBean;
import guestbook.beans.GuestBookManager;
import guestbook.forms.writeForm;
public class writeAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
GuestBookManager gbManager = GuestBookManager.getInstance();
writeForm writeform = (writeForm)form;
GuestBookBean gbBean = new GuestBookBean();
gbBean.setId(writeform.getId());
gbBean.setRegister(new Timestamp(System.currentTimeMillis()));
gbBean.setName(writeform.getName());
gbBean.setEmail(writeform.getEmail());
gbBean.setPassword(writeform.getPassword());
gbBean.setContent(writeform.getContent());
gbManager.insert(gbBean);
ActionForward forward = null;
forward = mapping.findForward("success");
return forward;
}
}
잘보면 excute에서 있는 매게변수 form을 writeForm으로 형변환해서 writeform객체에 넣는다. 그래서 writeform에서 폼에서 입력한 데이터 값을 빈을 하나 선언해서 빈에다가 넣는다.
그 빈을 Manager클래스에 있는 insert메소드를 통해 db에 등록을 한다. insert메소드는 나중에 살펴보도록 하자. 그다음 글을 넣는데 성공했으므로 forward는 success로 포워드한다.
자 다음은 GuestBookManager클래스의 inssert메소드이다.
GuestBookManager클래스의 insert메소드
public void insert(GuestBookBean book) throws Exception {
Connection conn;
PreparedStatement pstmt = null;
try{
Class.forName("com.mysql.jdbc.Driver");
}catch (ClassNotFoundException e){
System.out.println("jdbc에러");
}
try {
String url = "jdbc:mysql:mysql주소";
conn = DriverManager.getConnection(url, "dbid", "db비밀번호");
pstmt = conn.prepareStatement("insert into GUESTBOOK (REGISTER,NAME,EMAIL,PASSWORD,CONTENT) "+
"values (?,?,?,?,?)");
pstmt.setTimestamp(1, book.getRegister());
pstmt.setString(2, book.getName());
pstmt.setString(3, book.getEmail());
pstmt.setString(4, book.getPassword());
pstmt.setCharacterStream(5, new StringReader(book.getContent()), book.getContent().length());
pstmt.executeUpdate();
} catch(SQLException ex) {
throw new Exception("insert", ex);
}
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
그냥 매개변수로 받은 bean을 db에 넣는 작업이다.
이렇게 되면 거의 다 완성이 됐는데 한글이 아직 지원이 안될 것이다. 한글 지원을 위해서 RequestProcessor를 만들어야 한다.
RequestProcessor클래스를 상속받은 NewRequestProcessor클래스.
NewRequestProcessor클래스 소스
package guestbook.controller;
import java.io.UnsupportedEncodingException;
import org.apache.struts.action.RequestProcessor;
import javax.servlet.http.*;
/**
* RequestProcessor를 상속받아 한글 인코딩 부분을 설정한다.
*/
public class NewRequestProcessor extends RequestProcessor {
/**
* 모든 Action이 실행되기 전에 request와 response에 실행되어야 할 사항들을 실행한다.
*/
protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response) {
try {
// HTTP 파라미터의 인코딩을 설정한다.
request.setCharacterEncoding("euc-kr");
} catch (UnsupportedEncodingException e) {
// do nothing;
}
return true;
}
}
이것을 써주기 위해서는 struts-config.xml에 이 줄을 추가해야한다.
<controller processorClass="guestbook.controller.NewRequestProcessor"/>
이클래스로 인해 한글이 가능해질 것이다.
이렇게 하면 대충 글만 써지고 쓴 글 리스트로 보이는 방명록을 만들 수 있을 것이다.
아래는 지금 까지 만든 방명록 소스다.
Trackback URL : http://mudchobo.tomeii.com/tt/trackback/36
당신의 의견을 작성해 주세요.
관리자만 볼 수 있는 댓글입니다.
메일 드렸어요 ^^ 방문해주셔서 감사해요 ^^
머드초보님..
메일을 확인해봤는데요.. 스팸메일하고 다 확인해 봤는데...
메일함에 들어온 것이 없네요..
죄송하지만 다시 한번 부탁드리겠습니다... -_-;;
메일주소 : rootyh@empal.com 또는 k_y_h77@nate.com
다시 보내드렸어요 ^^ 별내용은 없는데 ^^