이렇게 되면 거의 다 완성이 됐는데 한글이 아직 지원이 안될 것이다. 한글 지원을 위해서 RequestProcessor를 만들어야 한다.
RequestProcessor클래스를 상속받은 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에 실행되어야 할 사항들을 실행한다. */
이제 글을 쓰는 기능을 구현해보도록하자. 글을 쓸 때에는 살짝 복잡하다. 백번 말하는 것보다 소스코드를 보면서 실습하는게 훨씬 더 이해가 잘된다.
글쓰기기능이 단순한 list보기보다 조금 틀린점은 ActionForm이라는 녀석이 들어간다.
ActionForm은 글을 쓸 때 폼에 맞춰서 이름, 비밀번호, 내용 등을 적은 다음에 submit해주면 그 폼에 있는 내용이 제대로 되었는지 검사하는 등 폼에 있는 내용을 가지고 뭘 하는 거다-_-; 솔직히 자세히는 모르겠지만, 글을 쓸 때에는 내용검사만 필요할 것같아서 내용검사만 공부해보자-_-;
가장 먼저 struts-config.xml파일을 건드려보자.
<form-beans> <!-- write를 위한 ActionForm 설정 --> <form-bean name="writeForm" type="guestbook.forms.writeForm"> </form-bean> </form-beans>
ActionForm을 사용하기 위해서는 form-beans 태그를 작성한다. 그래서 그안에 form-bean태그를 이용해서 폼태그와 클래스이름을 넣어준다.
잘 보면 listAction태그랑 비슷하다. 하지만, validate에서 true를 놓아서 유효성검사를 하겠다는 것이다. 유효성검사해서 에러가 발생하면 다시 writeForm.jsp로 가라는 뜻이다. 에러가 발생하지 않으면 writeAction을 실행하게 된다. 그리고 중간에 forward는 success를 받으면 list.do를 redirect(이거 안하면 주소창에서 다시 읽지 않아서 write.do로 남아있게 된다. 글쓰고 해줘야한다.)로 실행하라는 것이다.
태그라이브러리로 html:form을 사용했다. 뭐 html에서 사용하는 form과 하는 역할은 거의 비슷하다. action은 write라고 써있는데 이것은 write.do를 실행하게 된다. focus는 처음 실행시 포커스위치이고, 나머지 html:text, html:password, html:textarea도 input태그와 같은 역할을 한다. 저렇게 하고 html:submit버튼을 만들면 form태그는 완성이다. 그 뒤에 html:messages태그를 한번 보도록 하자. 저 태그는 이름을 안적고 submit해버리면 이름을 적으라고 메시지를 보내는 역할을 하는 것이다. 나중에 writeAction클래스를 보면서 다시 설명해보자.
public class writeForm extends ActionForm{ private static final long serialVersionUID = 1222179582713735628L; // 요고이 안쓰면 워링이 떠버린다. 뭔지는 잘 모른다. private int id; private Timestamp register; private String name; private String email; private String password; private String content;
public int getId() { return id; } public void setId(int id) { this.id = id; }
public String getName() { return name; } public void setName(String name) { this.name = name; }
public Timestamp getRegister() { return register; } public void setRegister(Timestamp register) { this.register = register; }
public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }
public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }
public String getContent() { return content; } public void setContent(String content) { this.content = content; }
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors();
if (name == null || name.length() == 0) { errors.add("invalidNameError", new ActionMessage("error.invalidName")); }
if (password == null || password.length() == 0) { errors.add("invalidPasswordError", new ActionMessage("error.invalidPassword")); }
if (content == null || content.length() == 0) { errors.add("invalidContentError", new ActionMessage("error.invalidContent")); }
/* * ActionErrors errors 객체가 null이거나 아무런 ActionMessage 객체도 포함하고 있지 않으면 * 오류가 발생하지 않았다고 가정한다. */ return errors; } }
빈클래스와 비슷해보인다. 여기서는 폼에서 받은 데이터 값을 가지고 유효성 검사를 한다. 보면 validate라는 메소드가 보인다. 이 메소드에서 검사를 해서 만약에 name이나, password, content 등이 null이 되버리면 errors메시지를 추가한다. 아까 writeForm.jsp에 본 invalidContentError이라는 이름으로 정하고 error.invalidContent라는 메시지를 생성하는 것이다. error.invalidContent는 어디에 있느냐! 이것은 따로 properties파일을 만들어준다.
build->class -> resources -> application.properties 라는 파일을 생성한다.
왠 이상한 유니코드냐! 한글이 안된다. 그러므로 java sdk에서 제공하는 native2ascii를 실행해서 한글을 쓰면 유니코드가 나오는데 이것을 여기에 적어 넣도록하자. 이 properties파일을 사용하기 위해서 struts-config.xml파일에 추가하자. <message-resources parameter="guestbook.resources.application" />
설치는 이클립스는 그냥 압축풀고, 톰캣도 그냥 압축풀고, 스트럿츠는 나중에 프로젝트 만들고나서 설정하겠다. JDK5.0 다음신공으로 설치하면 끝이다.
다 설치를 했으면 이클립스를 구동하자.
우선 서버를 추가하자. File->New->Other선택 후 Server에서 Server선택해서 자신의 톰캣버전을 선택하자.
그다음 프로젝트를 만들자. File->New->Project 선택 후 dy라고 쳐서 Dynamic Web Project선택. Project Name은 SimpleGuestBook이라고하고 모든 옵션을 디폴트로하고 Finish를 하자.
여러 폴더가 보일 것이다. Java Resources: src -> 자바소스를 넣는 곳. build -> 자바소스가 빌드되어서 이곳에 클래스로 저장이 된다. WebContent -> WEB-INF폴더와 jsp, web.xml, struts-config.xml등의 설정파일을 저장할 곳.
대충 이런 구조로 되어있다. 우선 가장 먼저 "Hello 방명록"을 출력하는 것을 만들어보자.
※스트럿츠설치는 WebContent/WEB-INF/lib 폴더에 struts를 받아서 풀면 있는 lib폴더에 있는 lib파일을 다 가져다가 넣는다. 그리고 태그라이브러리라는 것을 써야 하는데 struts-taglib-1.3.8.jar파일을 풀면 META-INF/TLD폴더에 TLD파일들이 있는데 이 파일을 WEB-INF/TLD폴더를 생성해서 넣어 놓도록 하자.
WebContent/WEB-INF/web.xml을 열어서 수정하자. <web-app>안에 이렇게 넣자.
<!-- ActionServlet은 이 웹 어플리케이션 시작시에 함께 시작되어야 한다. --> <load-on-startup>1</load-on-startup> </servlet>
<!-- “*.do”로 끝나는 모든 URL 패턴은 ActionServlet을 거쳐서 수행되어야 한다. --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
rs.close(); stmt.close(); con.close(); } catch (SQLException e) { System.err.println("SQL에러."); } } } [/code] 우선 JAVA와 연동하기 위해서는 JDBC가 필요하다. MYSQL 홈페이지가면 받을 수 있다. http://www.mysql.org/downloads/connector/j/