Struts Action 클래스
org.apache.struts.action.Action 클래스는 컨트롤러 컴포넌트의 연장으로 보시면 되며 클라이언트의 요청과 비즈니스 로직을 연결해 주는 역할을 합니다. Action 클래스에서는 비지니스 로직을 처리하기 전의 인증이나 세션 검증 등의 작업을 수행 합니다.
Action에 대해서는 Model이냐 Controller이냐를 고민 하는 경우가 있는데 아마도 Controller 영역으로 보시는 것이 맞을 것 같습니다, 그 이유 중 하나는 Model 영역은 컨트롤러 영역을 알면 안되지만 Action 클래스는 ActionServlet에 접근 하므로 컨트롤러의 모든 자원에 접근이 가능 하기 때문에 이를 Controller 쪽으로 보는 것 입니다.
만약 Action 클래스 내에 비즈니스 로직을 넣어 둔다면 스트럿츠 프레임워크를 다른 프레임워크로 바꾸는 경우가 발생 한다면 다른 클래스로 대체해야 할지도 모릅니다. 결국 비즈니스 로직을 Action 클래스 안에 두는 것은 다른 타입의 클라이언트에서 재사용하지 못하는 결과를 초래 할 수도 있습니다.
Action 클래스는 여러 메소드를 포함하지만 가장 중요한 메소드는 execute() 입니다.
원형을 살펴보면 다음과 같습니다.
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HtpServletRequest request,
HttpServletResponse response) throws Exception;
클라이언트의 요청을 받으면 execute() 메소드가 호출 됩니다.Controller는 Action 클래스의 인스턴스가 존재하지 않으면 생성하며 있으면 재활용 합니다. 스트럿츠에서는 각 Action 클래스에 대해 하나의 인스턴스만 생성하여 자원을 공유 합니다.
Action 클래스의 execute() 메소드의 기본적인 구현은 null을 return 하므로 새로운 Action 클래스를 작성하여 execute() 메소드를 오버라이드 해야 합니다.
스트럿츠에서 폼액션을 처리하기 위해 여러 개의 Action 클래스를 만들 수 있는데 각 클래스가 org.apache.struts.action.Action 클래스를 상속 받은 후 execute() 메소드를 오버라이드 한다는 이야기 입니다.
그런데 다음처럼 모든 Action 클래스들이 상속 받아서 구현할 추상 클래스를 만들어 둘 수 있는데 … Action클래스들의 공통 기능이 있는 경우 이를 추상클래스에서 처리하고 나머지는 이 추상클래스에서 상속 받은 하위 클래스에서 정의하도록 추상 클래스를 만들어 둘 수 있습니다.
앞의 로그인 예제를 생각 한다면 LoginAction과 LogoffAction이 공통적으로 하는 일은 세션을 확인 하는 일인데 이러한 부분을 추상클래스를 두어 처리가 가능 하다는 이야기 입니다.
Action 클래스를 만들 때 주의할 부분은 execute() 메소드 안에 try/catch 블록이 없다는 것입니다. 아래를 참고 하세요…
<global-exceptions>
<exception
key=”global.error.invalidlogin”
path=”/login.jsp”
scope=”request”
type=”login2.exception.InvalidLoginException”
</global-exceptions>
위와 같이 설정을 해 둔다면 프레임워크에서 어떤 동작으로 인해 InvalidLoginExceptiondl 발생 했을 경우 요청을 login.jsp로 포워드하고 global.error.invalidLogin 이라는 key를 통해 에러 메시지를 구축 하도록 설정을 하는 것 입니다.
Controller가 어떤 요청을 받았을 때 어떤 Action 클래스의 인스턴스를 수행 할지를 어떻게 알 것인가? …… 컨트롤러는 Action 매핑을 조사 함으로서 Action 인스턴스를 결정 하는데 웹 애플리케이션이 시작 될 때 web.xml 파일에 있는 스트럿츠 설정 부분에 struts-config.xml 파일의 위치를 설정 합니다. 이 정보를 바탕으로 이 내용을 메모리에 올려 객체화 해서 웹 애플리케이션에서 보관을 하고 있는데 이 정보 중 Action 매핑 정보를 참고 한다고 생각 하시면 됩니다. (물론 스트럿츠 설정 파일의 이름이 struts-config.xml 일 필요는 없습니다.)
struts-config.xml 파일에 있는 Action과 관련된 매핑 정보는 org.apache.struts.action.ActionMapping 클래스의 인스턴스로 표현 되는데 ActionMapping 객체는 URI와 매칭되는 path 속성을 포함하고 있습니다.
아래는 struts-config.xml 파일에서의 Action 매핑 예 입니다.(로그인 예제의 경우)
<!-- valiedate를 true라고 함으로써 LoginForm의 validate가 호출 됩니다. -->
<action-mappings>
<!-- loginAction에 대한 정의 -->
<action
path="/LoginSubmit"
type="login2.LoginAction"
name="loginForm"
validate="true"
input="/login.jsp"
/>
<!-- logoffAction에 대한 정의 -->
<action
path="/logoff"
type="login2.LogoffAction"
name="logoffForm"
validate="false"
/>
</action-mappings>
로그인과 관련된 액션 매핑을 보면 /LoginSubmit 패스와 login2.LoginAction를 매핑 하고 있는 것을 알 수 있습니다. Controller가 “/LoginSubmit” 문자열이 포함된 요청을 받으면 LoginAction 인스턴스의 execute() 메소드를 실행 하게 되는 것 입니다. 물론 스트럿츠에서는 매핑 정보를 Action 인스턴스의 execute()가 종료 한 후 포워드 할 곳을 인식하는데도 사용 합니다.
org.apache.struts.action.Action 클래스는 컨트롤러 컴포넌트의 연장으로 보시면 되며 클라이언트의 요청과 비즈니스 로직을 연결해 주는 역할을 합니다. Action 클래스에서는 비지니스 로직을 처리하기 전의 인증이나 세션 검증 등의 작업을 수행 합니다.
Action에 대해서는 Model이냐 Controller이냐를 고민 하는 경우가 있는데 아마도 Controller 영역으로 보시는 것이 맞을 것 같습니다, 그 이유 중 하나는 Model 영역은 컨트롤러 영역을 알면 안되지만 Action 클래스는 ActionServlet에 접근 하므로 컨트롤러의 모든 자원에 접근이 가능 하기 때문에 이를 Controller 쪽으로 보는 것 입니다.
만약 Action 클래스 내에 비즈니스 로직을 넣어 둔다면 스트럿츠 프레임워크를 다른 프레임워크로 바꾸는 경우가 발생 한다면 다른 클래스로 대체해야 할지도 모릅니다. 결국 비즈니스 로직을 Action 클래스 안에 두는 것은 다른 타입의 클라이언트에서 재사용하지 못하는 결과를 초래 할 수도 있습니다.
Action 클래스는 여러 메소드를 포함하지만 가장 중요한 메소드는 execute() 입니다.
원형을 살펴보면 다음과 같습니다.
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HtpServletRequest request,
HttpServletResponse response) throws Exception;
클라이언트의 요청을 받으면 execute() 메소드가 호출 됩니다.Controller는 Action 클래스의 인스턴스가 존재하지 않으면 생성하며 있으면 재활용 합니다. 스트럿츠에서는 각 Action 클래스에 대해 하나의 인스턴스만 생성하여 자원을 공유 합니다.
Action 클래스의 execute() 메소드의 기본적인 구현은 null을 return 하므로 새로운 Action 클래스를 작성하여 execute() 메소드를 오버라이드 해야 합니다.
스트럿츠에서 폼액션을 처리하기 위해 여러 개의 Action 클래스를 만들 수 있는데 각 클래스가 org.apache.struts.action.Action 클래스를 상속 받은 후 execute() 메소드를 오버라이드 한다는 이야기 입니다.
그런데 다음처럼 모든 Action 클래스들이 상속 받아서 구현할 추상 클래스를 만들어 둘 수 있는데 … Action클래스들의 공통 기능이 있는 경우 이를 추상클래스에서 처리하고 나머지는 이 추상클래스에서 상속 받은 하위 클래스에서 정의하도록 추상 클래스를 만들어 둘 수 있습니다.
앞의 로그인 예제를 생각 한다면 LoginAction과 LogoffAction이 공통적으로 하는 일은 세션을 확인 하는 일인데 이러한 부분을 추상클래스를 두어 처리가 가능 하다는 이야기 입니다.
Action 클래스를 만들 때 주의할 부분은 execute() 메소드 안에 try/catch 블록이 없다는 것입니다. 아래를 참고 하세요…
<global-exceptions>
<exception
key=”global.error.invalidlogin”
path=”/login.jsp”
scope=”request”
type=”login2.exception.InvalidLoginException”
</global-exceptions>
위와 같이 설정을 해 둔다면 프레임워크에서 어떤 동작으로 인해 InvalidLoginExceptiondl 발생 했을 경우 요청을 login.jsp로 포워드하고 global.error.invalidLogin 이라는 key를 통해 에러 메시지를 구축 하도록 설정을 하는 것 입니다.
Controller가 어떤 요청을 받았을 때 어떤 Action 클래스의 인스턴스를 수행 할지를 어떻게 알 것인가? …… 컨트롤러는 Action 매핑을 조사 함으로서 Action 인스턴스를 결정 하는데 웹 애플리케이션이 시작 될 때 web.xml 파일에 있는 스트럿츠 설정 부분에 struts-config.xml 파일의 위치를 설정 합니다. 이 정보를 바탕으로 이 내용을 메모리에 올려 객체화 해서 웹 애플리케이션에서 보관을 하고 있는데 이 정보 중 Action 매핑 정보를 참고 한다고 생각 하시면 됩니다. (물론 스트럿츠 설정 파일의 이름이 struts-config.xml 일 필요는 없습니다.)
struts-config.xml 파일에 있는 Action과 관련된 매핑 정보는 org.apache.struts.action.ActionMapping 클래스의 인스턴스로 표현 되는데 ActionMapping 객체는 URI와 매칭되는 path 속성을 포함하고 있습니다.
아래는 struts-config.xml 파일에서의 Action 매핑 예 입니다.(로그인 예제의 경우)
<!-- valiedate를 true라고 함으로써 LoginForm의 validate가 호출 됩니다. -->
<action-mappings>
<!-- loginAction에 대한 정의 -->
<action
path="/LoginSubmit"
type="login2.LoginAction"
name="loginForm"
validate="true"
input="/login.jsp"
/>
<!-- logoffAction에 대한 정의 -->
<action
path="/logoff"
type="login2.LogoffAction"
name="logoffForm"
validate="false"
/>
</action-mappings>
로그인과 관련된 액션 매핑을 보면 /LoginSubmit 패스와 login2.LoginAction를 매핑 하고 있는 것을 알 수 있습니다. Controller가 “/LoginSubmit” 문자열이 포함된 요청을 받으면 LoginAction 인스턴스의 execute() 메소드를 실행 하게 되는 것 입니다. 물론 스트럿츠에서는 매핑 정보를 Action 인스턴스의 execute()가 종료 한 후 포워드 할 곳을 인식하는데도 사용 합니다.
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(8/04)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(8/04)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(8/08)[기업100%환급]SQL기초에서 Schema Object까지
(8/08)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(8/11)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(8/08)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(8/28)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(7/26)Spring3.X, MyBatis, Hibernate실무과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/09)안드로이드개발자과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(8/04)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(8/04)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(8/08)[기업100%환급]SQL기초에서 Schema Object까지
(8/08)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(8/11)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/04)웹퍼블리싱 마스터
(8/05)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(8/08)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(8/28)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(7/26)Spring3.X, MyBatis, Hibernate실무과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/09)안드로이드개발자과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기