struts1을 그대로 사용하는 것이 아니라 개발하기 좀 더 편한 방법으로 커스터마이징 해서 사용해본다.
1. lib 셋팅
생성한 프로젝트의 WEB-INF의 lib 폴더에 설정할 라이브러리 파일을 갖다 넣는다 : struts, log4j, struts-test, junit
- apache, sourceforge 사이트에서 각각 다운로드를 받는다.
Junit은 C:\eclipse\plugins\org.junit_3.8.2.v20090203-1005 에서 junit.jar 파일을 사용한다.
- struts의 lib 폴더안에 있는 라이브러리 파일을 사용한다.
- log4j는 라이브러리와 함께, log4j.properties나, log4j.xml 설정 파일을 src 폴더 아래에 넣는다.
- strutstest는 struts를 WAS를 띄우지 않고 테스트 하기 위해 필요하다. strutstest.jar 파일과 common-collection.jar 파일이 필요하다.
2. 서블릿 설정
web.xml 안에 서블릿을 설정한다.
- 다운 받아 압출을 해제한 struts 폴더 안에 struts-blank 안에 있는 web.xml 에서 복사하거나, Servlet을 하나 만들어서 web.xml 안에 생성하게 하고, 만든 Servlet은 삭제 한다.
/action -> *.do 바꾼다.
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
1. lib 셋팅
생성한 프로젝트의 WEB-INF의 lib 폴더에 설정할 라이브러리 파일을 갖다 넣는다 : struts, log4j, struts-test, junit
- apache, sourceforge 사이트에서 각각 다운로드를 받는다.
Junit은 C:\eclipse\plugins\org.junit_3.8.2.v20090203-1005 에서 junit.jar 파일을 사용한다.
- struts의 lib 폴더안에 있는 라이브러리 파일을 사용한다.
- log4j는 라이브러리와 함께, log4j.properties나, log4j.xml 설정 파일을 src 폴더 아래에 넣는다.
- strutstest는 struts를 WAS를 띄우지 않고 테스트 하기 위해 필요하다. strutstest.jar 파일과 common-collection.jar 파일이 필요하다.
2. 서블릿 설정
web.xml 안에 서블릿을 설정한다.
- 다운 받아 압출을 해제한 struts 폴더 안에 struts-blank 안에 있는 web.xml 에서 복사하거나, Servlet을 하나 만들어서 web.xml 안에 생성하게 하고, 만든 Servlet은 삭제 한다.
/action -> *.do 바꾼다.
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3. struts-config.xml 생성
struts-config.xml을 WEB-INF 아래 만들고 struts-blank 안에 있는 struts-config.xml 파일에서 dtd 설정을 복사해서 넣는다.
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
나머지 설정(역시 struts-blank 참조)
<struts-config>
<!-- 액션 폼 설정 파일 -->
<form-beans>
</form-beans>
<!-- 공통 예외처리 -->
<global-exceptions>
</global-exceptions>
<!-- 공통 링크 이동 처리 -->
<global-forwards>
</global-forwards>
<!-- 액션 설정 -->
<action-mappings>
</action-mappings>
<!-- 커스터마이징된 RequestProcessor -->
<controller>
</controller>
<!-- 다국어 처리, 에러메시지 -->
<!-- <message-resources parameter=""></message-resources>-->
<!-- 외부 프레임웍, 라이브러리 연동 -->
<!-- <plug-in className=""></plug-in> -->
</struts-config>
여기까지 작업을 하고, WAS를 띄워서 http://127.0.0.1:8081/struts1/*.do 해서 * 아무이름이나 넣고 접속이 되는지 확인한다. 500에러가 발생할 것이다. 그러면 성공.
그리고 struts-config.xml 에서 아래와 같이 설정하고
<action-mappings>
<action path="/hello" forward="/hello.jsp"></action>
</action-mappings>
설정을 해주고 http://127.0.0.1:8081/struts1/hello.do 했을 때 hello.jsp 라고 뜨는지 확인한다.
log4j 설정을 해놨다면 콘솔창에 로그가 뜬다.
4. util 패키지 않에 기본적으로 구현할 Action을 추상 클래스로 만들어서 오버라이드 시킨다.
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3. struts-config.xml 생성
struts-config.xml을 WEB-INF 아래 만들고 struts-blank 안에 있는 struts-config.xml 파일에서 dtd 설정을 복사해서 넣는다.
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
나머지 설정(역시 struts-blank 참조)
<struts-config>
<!-- 액션 폼 설정 파일 -->
<form-beans>
</form-beans>
<!-- 공통 예외처리 -->
<global-exceptions>
</global-exceptions>
<!-- 공통 링크 이동 처리 -->
<global-forwards>
</global-forwards>
<!-- 액션 설정 -->
<action-mappings>
</action-mappings>
<!-- 커스터마이징된 RequestProcessor -->
<controller>
</controller>
<!-- 다국어 처리, 에러메시지 -->
<!-- <message-resources parameter=""></message-resources>-->
<!-- 외부 프레임웍, 라이브러리 연동 -->
<!-- <plug-in className=""></plug-in> -->
</struts-config>
여기까지 작업을 하고, WAS를 띄워서 http://127.0.0.1:8081/struts1/*.do 해서 * 아무이름이나 넣고 접속이 되는지 확인한다. 500에러가 발생할 것이다. 그러면 성공.
그리고 struts-config.xml 에서 아래와 같이 설정하고
<action-mappings>
<action path="/hello" forward="/hello.jsp"></action>
</action-mappings>
설정을 해주고 http://127.0.0.1:8081/struts1/hello.do 했을 때 hello.jsp 라고 뜨는지 확인한다.
log4j 설정을 해놨다면 콘솔창에 로그가 뜬다.
4. util 패키지 않에 기본적으로 구현할 Action을 추상 클래스로 만들어서 오버라이드 시킨다.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
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 org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public abstract class BasicAction extends Action {
protected static Logger logger = Logger.getLogger(BasicAction.class); //log4j 설정
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
logger.info("action path" + request.getRequestURI()); //log4j 설정
return executeAction(mapping, form, request,response);
}
protected abstract ActionForward executeAction(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception;
}
5. struts에서 기본적으로 CRUD가 나오면 DispatchAction을 사용한다.
action을 만들고 테스트 한다.
public class BbsAction extends DispatchAction {
private static Logger logger = Logger.getLogger(BbsAction.class);
public ActionForward add(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
return null;
}
}
- test 패키지에서 BbsTest.java를 만들어서 테스트 한다. strutstest는 가짜로 request, response를 만들어서 테스트 할 수 있게 해준다. 아래와 같이 작성 하고, Junit으로 테스트 한다.
import java.io.File;
public ActionForward add(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
return null;
}
}
- test 패키지에서 BbsTest.java를 만들어서 테스트 한다. strutstest는 가짜로 request, response를 만들어서 테스트 할 수 있게 해준다. 아래와 같이 작성 하고, Junit으로 테스트 한다.
import java.io.File;
import servletunit.struts.MockStrutsTestCase;
public class BbsTest extends MockStrutsTestCase {
public void setUp() throws Exception{
super.setUp();
this.setContextDirectory(new File("WebContent")); //반드시 WebContent가 들어가야 한다. WebContent아래 설정 파일들을 불러 오기 위해
}
public void testAdd() throws Exception{
this.setRequestPathInfo("/bbs");
this.actionPerform();
}
}
6. ActionForm을 안잡고 하는 방법.
ActionForm을 사용 할 경우 상당한 노가다를 해야한다. 그래서 LazyValidatorForm을 사용한다.
이것의 단점은 파라미터 검증을 할 수 없다는 것이다.(그래서 commons의 validation을 적용해서 사용한다.)
ActionForm은 타입이 똑같아야 들어가지만, BeanUtils는 타입이 달라도 들어간다.
- BbsVO 작성
- struts-config.xml 에서 추가.
<form-beans>
<form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm"></form-bean>
</form-beans>
<action path="/bbs"
type="org.bnk.bbs.BbsAction"
parameter="method"
name="lazyForm"
validate="false"></action> <!-- 검증을 할 수 없으므로 false -->
- BbsAction 추가
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
super.setUp();
this.setContextDirectory(new File("WebContent")); //반드시 WebContent가 들어가야 한다. WebContent아래 설정 파일들을 불러 오기 위해
}
public void testAdd() throws Exception{
this.setRequestPathInfo("/bbs");
this.actionPerform();
}
}
6. ActionForm을 안잡고 하는 방법.
ActionForm을 사용 할 경우 상당한 노가다를 해야한다. 그래서 LazyValidatorForm을 사용한다.
이것의 단점은 파라미터 검증을 할 수 없다는 것이다.(그래서 commons의 validation을 적용해서 사용한다.)
ActionForm은 타입이 똑같아야 들어가지만, BeanUtils는 타입이 달라도 들어간다.
- BbsVO 작성
- struts-config.xml 에서 추가.
<form-beans>
<form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm"></form-bean>
</form-beans>
<action path="/bbs"
type="org.bnk.bbs.BbsAction"
parameter="method"
name="lazyForm"
validate="false"></action> <!-- 검증을 할 수 없으므로 false -->
- BbsAction 추가
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.validator.LazyValidatorForm;
import org.bnk.bbs.vo.BbsCriteria;
import org.bnk.bbs.vo.BbsVO;
import org.bnk.util.VODisplayer;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.validator.LazyValidatorForm;
import org.bnk.bbs.vo.BbsCriteria;
import org.bnk.bbs.vo.BbsVO;
import org.bnk.util.VODisplayer;
public class BbsAction extends DispatchAction {
private static Logger logger = Logger.getLogger(BbsAction.class);
public ActionForward add(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
LazyValidatorForm lazyForm = (LazyValidatorForm) form;
BbsVO vo = new BbsVO();
BeanUtils.copyProperties(vo, lazyForm);
logger.info(VODisplayer.display(vo));
return null;
}
public ActionForward update(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
logger.info("update.......");
return null;
}
public ActionForward list(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
logger.info("list.......");
LazyValidatorForm lazyForm =
(LazyValidatorForm)form;
BbsCriteria cri = new BbsCriteria();
BeanUtils.copyProperties(cri, lazyForm);
logger.info(VODisplayer.display(cri));
return null;
}
}
- BbsTest 에서 Junit 으로 테스트
import java.io.File;
public ActionForward add(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
LazyValidatorForm lazyForm = (LazyValidatorForm) form;
BbsVO vo = new BbsVO();
BeanUtils.copyProperties(vo, lazyForm);
logger.info(VODisplayer.display(vo));
return null;
}
public ActionForward update(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
logger.info("update.......");
return null;
}
public ActionForward list(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
logger.info("list.......");
LazyValidatorForm lazyForm =
(LazyValidatorForm)form;
BbsCriteria cri = new BbsCriteria();
BeanUtils.copyProperties(cri, lazyForm);
logger.info(VODisplayer.display(cri));
return null;
}
}
- BbsTest 에서 Junit 으로 테스트
import java.io.File;
import servletunit.struts.MockStrutsTestCase;
public class BbsTest extends MockStrutsTestCase {
public void setUp() throws Exception{
super.setUp();
this.setContextDirectory(new File("WebContent"));
}
public void testAdd() throws Exception{
this.setRequestPathInfo("/bbs");
request.addParameter("method", "add");
request.addParameter("title", "게시물제목");
request.addParameter("content", "게시물내용");
request.addParameter("writer", "작성자");
this.actionPerform();
}
public void testList()throws Exception{
this.setRequestPathInfo("/bbs");
request.addParameter("method", "list");
request.addParameter("pageNo", "5");
request.addParameter("keyword", "워드");
request.addParameter("type", "title");
this.actionPerform();
}
}
7. BbsCriteria.java 를 만들어서 파라미터를 수집한다.
LazyValidatorForm은 파라미터를 수집한다. 그래서 페이징 할 때, 파라미터를 던지지 말고 객체를 던져서 사용한다. 만약에 파라미터가 변경이 된다면 다 고쳐야 하지만, 이렇게 따로 만들어 놓으면 여기만 고치면 된다.
- BbsTest에서 testList() 로 테스트 한다.
기본 적으로 이렇게 만들어서 개발을 하고, 여기다가 화면을 붙이면 개발 끝~
super.setUp();
this.setContextDirectory(new File("WebContent"));
}
public void testAdd() throws Exception{
this.setRequestPathInfo("/bbs");
request.addParameter("method", "add");
request.addParameter("title", "게시물제목");
request.addParameter("content", "게시물내용");
request.addParameter("writer", "작성자");
this.actionPerform();
}
public void testList()throws Exception{
this.setRequestPathInfo("/bbs");
request.addParameter("method", "list");
request.addParameter("pageNo", "5");
request.addParameter("keyword", "워드");
request.addParameter("type", "title");
this.actionPerform();
}
}
7. BbsCriteria.java 를 만들어서 파라미터를 수집한다.
LazyValidatorForm은 파라미터를 수집한다. 그래서 페이징 할 때, 파라미터를 던지지 말고 객체를 던져서 사용한다. 만약에 파라미터가 변경이 된다면 다 고쳐야 하지만, 이렇게 따로 만들어 놓으면 여기만 고치면 된다.
- BbsTest에서 testList() 로 테스트 한다.
기본 적으로 이렇게 만들어서 개발을 하고, 여기다가 화면을 붙이면 개발 끝~
'FrameWork > Struts1' 카테고리의 다른 글
Struts1 FileDownload (0) | 2009.08.18 |
---|---|
Struts1 fileUpload (0) | 2009.08.18 |
Struts1의 Action 4 (0) | 2009.08.16 |
Struts1의 Action 3 (0) | 2009.08.16 |
Struts1의 Action 2 (0) | 2009.08.12 |
Struts1의 Action 1 (0) | 2009.07.27 |
Struts1에서 ActionForm 사용하기. (0) | 2009.07.25 |
Struts1 에서 iBatis 사용하기 (0) | 2009.07.05 |
Struts 1 을 사용하여 간단한 회원가입, 리스트 불러오기. (0) | 2009.07.05 |
Struts1 개발환경 설정. (0) | 2009.07.05 |