본문 바로가기

Dev.../웹서비스

[펌] Easy Struts 플러긴 사용법입니다

오늘은 전에 말씀 드렸던 이지 스트러츠 플러긴에 대해서 설명을 드릴까 합니다...
 
아직 스트러츠가 설치 되어 있지 않다면 http://struts.apache.org/에서 다운
받아 적당한 위치에 압축을 풉니다....
 
그리고 이지스트러츠는
http://easystruts.sourceforge.net/로 가서
이클립스의 Update Manager를 이용하여 설치하거나 직접 다운 받아 압축을 풀고 이클립스의
plugins 폴더로 복사하고 이클립스를 Reload 합니다..
이클립스의 메뉴중 Window에서 Preferences를 연후 Easy Struts를 선택하여 
이지스트러츠의 환경을 설정합니다..


사용할 스트러츠 버젼(이젠 거의 1.1을 쓰겠죠..)을 선택하고  Add JARs.. 버튼을 누르고
먼저 설치해 놓은 스트러츠의 lib 폴더에서 모든 jar파일을 선택하여 추가합니다...
한번에 안되니까 하나씩 하나씩 추가합니다...
 

그리고 바로 아래에 있는 Add TLDs... 버튼을 누르고 위에서와 같은 폴더에서 같은 방법으로
모든 tld파일을 추가합니다...
jar 파일들과 tld 파일들을 모두 추가했으면 Ok 버튼을 눌러 이지스트러츠 설정을 모두 마칩니다..
이제 본격적으로 이지스트러츠를 이용하여 웹 어플리케이션을 만들어 보겠습니다..
톰캣이나 레진과 같은 이클립스 플러그인이 설치 되어 있지 않다는 가정하에 설명을 드릴까 합니다.
자바프로젝트를 하나 만듭니다...
저는 편의상 그냥 이클립스 ?p스페이스에 만들었습니다..
자바프로젝트로 만들었지만 웹프로젝트처럼 사용하기 위해 소스폴더와 클래스파일 폴더를
아래와 같이 생성해 줍니다.
이제 만들어진 strutsTest라는 프로젝트에 이지스트러츠를 이용해 스트러츠를 적용합니다..
먼저 선택한 프로젝트에서 New > Other..를 선택합니다..
자바를 확장하면 Easy Struts가 나옵니다..
여기서 먼저 Add Easy Struts support를 사용하여
앞서 Preferences >  Easy Struts에서 설정해 놓은 환경을 적용합니다...
 
Webapp folders는 root로 사용하려면 /만 쓰면 됩니다..
그리고 기본 패키지와 다국어 처리를 위한 resource파일을 적당한 패키지와 이름으로 설정합니다..

앞에서 설정한 jar파일들과 tld파일들이 해당 프로젝트에 복사되어 스트러츠를 사용할 수 있는
환경으로 변합니다.
 
이제는 폼을 만들어 봅니다.
 
Form name을 입력하고 실제로 자바파일로  생성될 Form type도 적절히 입력합니다.
그리고 Form properties도 필요한 만큼 JSP input type을 설정해 가면 입력합니다...



 
입력한 Form properties를 바탕으로 만들어질 (Create JSP) input 명을 입력합니다..

 
Finish버튼을 누르면 아래처럼 폼파일과 login.jsp파일이 생성됩니다.

 
그런데 폼파일에 에러표시가 있습니다...
이것은 웹프로젝트가 아니라 서블릿 API가 없어서입니다..
 
각기 사용하는 서블릿엔진이 설치되어 있는  디렉토리의 lib파일에 있는 서블릿 jar파일을
클래스패스 설정하면 해결됩니다....
 
저는 설정이 간편한 resin 서버를 사용하였기에 아래와 같이 jsdk23.jar파일을 연결했습니다..
strutsTest 프로젝트 선택 > 마우스 오른쪽 메뉴 > Properties > Java Build Path > Libraries
> Add External JARs로 연결하면 됩니다...

 
이제는 Action을 설정해 봅니다..
그전에 Action설정시 사용할 success.jsp를 login.jsp가 있는 곳에 하나 만듭니다..
간단히 login이 성공되었다는 메제지를 뿌리도록 만들어 보았습니다..
------ success.jsp ---------
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html>
 <head>
    <title>Success</title>
 </head>
 <body>
  Hello, <bean:write name="id"/>  Welcome Easy Strust!!!
 <body>
</html>
 

Path를 설정하고 Type도 적절히 입력합니다..
Action에 연결한 Form name을 Browse...버튼을 눌러 선택합니다..


(Create JSP) input 의 Browse...버튼을 눌러 login.jsp를 선택합니다...

Next...버튼을 눌러 다음으로 진행합니다...

 
Forward name을 적절히 입력하고 실제적으로 Forwarding될 jsp를 이전에 만들어 놓은 success.jsp로 연결합니다...



이제 다 되었습니다...

 
TestAction.java를 테스트를 위해 아래처럼 변경합니다...
String id = TestForm.getId(); //폼에 저장되어 있는 id
  
 request.setAttribute("id", id); // success.jsp에서 사용할 id 저장.
 return mapping.findForward("success");  //success.jsp로 forward
 
 --------------------------- TestAction.java ----------------------------
// Created by Xslt generator for Eclipse.
// XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))
// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl
package test.easystruts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 test.easystruts.form.TestForm;
/**
 * TestAction.java created by EasyStruts - XsltGen.
 * http://easystruts.sf.net
 * created on 07-07-2004
 *
 * XDoclet definition:
 * @struts:action path="/Test" name="TestForm" input="/login.jsp" validate="true"
 * @struts:action-forward name="/success.jsp" path="/success.jsp"
 */
public class TestAction extends Action {
 // --------------------------------------------------------- Instance Variables
 // --------------------------------------------------------- Methods
 /**
  * Method execute
  * @param ActionMapping mapping
  * @param ActionForm form
  * @param HttpServletRequest request
  * @param HttpServletResponse response
  * @return ActionForward
  * @throws Exception
  */
 public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  throws Exception {
  TestForm TestForm = (TestForm) form;
  String id = TestForm.getId();
  
  request.setAttribute("id", id);
  return mapping.findForward("success"); 
  //throw new UnsupportedOperationException("Generated method 'execute(...)' not implemented.");
 }
}
-----------------------------------------------------------------------------
 
에러를 막기위해 TestForm.java에서 validate를 일단 막습니다.
validate메소드를 만들지 않으려면 폼을 생성할때 validate메소드에 체크표시를 없애면 만들지
않습니다..reset 메소드도 마찬가지입니다..
 
보통 개발시에는 validate와 reset을 사용하지 않습니다.
클라이언트에서 자바스크립트를 이용합니다..
 
public ActionErrors validate(
  ActionMapping mapping,
  HttpServletRequest request) {
  return null;
  //throw new UnsupportedOperationException("Generated method 'validate(...)' not implemented.");
 }
 
 
login.jsp를 열고
<html:form action="/[ACTION_PATH]"> 이부분을
<html:form action="/Test"> 과 같이 변경합니다.
"/Test" 는 Easy Action을 만들때 지정한 Path명입니다..
 
struts-config.xml을 열어서도 위에서 만들었던 폼과 액션 기타 작업을 할 수 도 있습니다.
소스 탭을 열어서 직접 수정하거나 카피앤 페이스트하여 변경도 할 수 있습니다.
이때 struts-config.xml에 에러가 나는데 이때는 struts-config.xml 파일을 리로드 시켜야
에러가 사라집니다..
이제 웹서버를 띄워서 확인해 봅니다...
저는 웹어플리케이션명을 /strutsTest로 해서 만들어 보았습니다.
레진은 아래와 같이 resion.conf파일에 추가하면 됩니다..
<web-app id='/strutsTest' app-dir='D:eclipse2workspacestrutsTest'/>






 
/login.jsp도 Action명으로 대체 할 수있습니다..
위에서 생성했던 Action을 응용하여 한번 해보세요...
-------------------- LoginAction.java ---------------------------------------
// Created by Xslt generator for Eclipse.
// XSL :  not found (java.io.FileNotFoundException:  (Bad file descriptor))
// Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl
package test.easystruts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
 * LoginAction.java created by EasyStruts - XsltGen.
 * http://easystruts.sf.net
 * created on 07-07-2004
 *
 * XDoclet definition:
 * @struts:action
 */
public class LoginAction extends Action {
 // --------------------------------------------------------- Instance Variables
 // --------------------------------------------------------- Methods
 /**
  * Method execute
  * @param ActionMapping mapping
  * @param ActionForm form
  * @param HttpServletRequest request
  * @param HttpServletResponse response
  * @return ActionForward
  * @throws Exception
  */
 public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  throws Exception {
  return mapping.findForward("login");
  //throw new UnsupportedOperationException("Generated method 'execute(...)' not implemented.");
 }
}
 
struts-config.xml도 아래처럼 추가되었겠죠...
<action path="/Login" type="test.easystruts.action.LoginAction" validate="false">
     <forward name="login" path="/login.jsp" />
</action>

 
위와 같이 했으면
http://localhost:8080/strutsTest/login.jsp 로 접근하지 말고
http://localhost:8080/strutsTest/Login.do 하면 같은 결과를 볼 수 있습니다..
 
위와 같이 하면 <forward name="login" path="/login.jsp" />의 path의 jsp이름만
변경하면 항상 Login.do로 접근할 수 있는 장점이 있습니다..
 
잘되었나요..수고하셨습니다....
 
데이타소스 기능은 기다지 많이 사용하지 않습니다..
자체 웹서버가 지원해 주는 데이타소스를 공통 static메소드로 구현해 많이 사용합니다..
 
이상으로 가장 많이 사용하는 기능위주로 설명을 드렸습니다..