스트럿츠

2020. 9. 1. 21:34FrameWork

스트럿츠

아파치 스트럿츠(Apache Struts)는 Java EE 웹 애플리케이션을 개발하기 위한 오픈 소스 프레임워크이다. 이전에는 자카르타 프로젝트의 하부프로젝트에 속하였으나 스트럿츠는 이제 최상위 레벨의 프로젝트가 되었다. MVC 아키텍처를 적용하는 개발자를 지원하기 위하여 자바 서블릿 API 를 사용하고 확장하였다.

이 프레임워크는 페이지 디자이너, 컴포넌트 개발자, 프로젝트 일부를 담당하는 다른 개발자 등 성격이 다른 그룹들에 의해 다루어지는 대형 웹 애플리케이션의 설계와 구현을 가능케 한다. 강력한 커스텀 태그 라이브러리, 타일형 디스플레이, 폼 유효성 검사등의 특징을 가진다. 또한 다양한 프레젠테이션 레이어들을 지원하여, JSP, XML/XSLT, JSF 등을 포함하고 있으며 또한 JavaBeans와 EJB 등 다양한 모델 레이어를 포함하고 있다.

스트럿츠 구조

ActionServlet에 사용자의 요청이 전달되면 다음과 같은 절차에 따라 처리된다.
1. 웹 애플리케이션이 구동되면 ActionServlet이 초기화된다.
ActionServlet이 초기화 될 때 스트럿츠의 각종 설정 파일들이 로드되고 각종 Config 클래스들과 RequestProcessor가 초기화된다.
2. ActionServlet은 사용자의 요청이 있으면 요청을 처리해줄 RequestProcessor를 찾아 사용자의 요청을 전달한다. RequestProcessor는 사용자의 요청 URL에 따라 ActionForm을 생성하고 요청 파라미터를 ActionForm에 저장한다. 이 때 필요에 따라 ActionForm 에 저장된 값이 올바른지 검증한다.
3. RequestProcessor는 사용자의 요청 URL에 따라 Action을 선택하여 execute() 메서드를 호출한다. 이때 앞서 생성한 ActionForm을 파라미터로 전달한다.
4. Action에서는 사용자의 요청을 수행하기 위한 모델 영역의 비즈니스 로직을 수행하고, 수행 결과 값을 ActionForm이나 스코프,세션 스코프 중 한 곳에 저장한다. 비즈니스로직의 수행 결과에 따라 RequestProcessor에 ActionForward를 리턴한다.
5. RequestProcessor는 Action에서 리턴한 ActionForward에 따라 뷰 영역의 리소스(주로 jsp)를 호출한다.
6. 뷰 영역에서는 프리젠테이션로직을 수행하고 수행결과(주로 HTML)를 사용자에게 전달한다.

컨트롤러 영역
org.apache.struts.action.Action 클래스를 상속받아 Action 클래스 생성.
org.apache.struts.action.ActionForm 클래스를 상속받아 ActionForm 클래스 생성.
스트럿츠 설정 파일에 어떤 요청 URL에 대하여 어떤 Action과 ActionForm이 사용되는지, 그리고 어떤 뷰를 호출할 것인지를 등록.
-----------------------------------------------------------------------------
Controller
사용자의 요청을 받는다.
사용자의 요청을 분석하여 할 일이 무엇인지를 판단하여 비지니스 로직을 수행하는
자바 클래스를 호출한다.
스트럿츠에서의 구현부는 ActionServlet, RequestProcessor, ActionForm, Action으로
이루어져있다.
ActionServlet : 어떤 Action(비지니스 로직을 호출하는 역할을 하는 자바클래스)를 사용할지 여부등 스트럿츠 전반에 대한 설정을 저장하고 있는 struts-config.xml 파일을 읽어 저장하는 Servlet 클래스이다.
RequestProcessor : 사용자의 요청을 받으면, struts-config.xml 설정에 따라 실제로 호출할 Action을 선택하고, request와 response 서블릿 객체를 이용해서 미리 선행작업을 하는 역할을 한다.
Action을 선택하는 방법은 요청 URL에 있다.
예를 들어 http://localhost:8080/login.do 를 호출했다면 "/login.do"를 인지하고 struts-config.xml 에서 "/login"이라는 이름(".do" 제외)으로 지정된 행동 지침관련 설정(<action>)을 찾아 그에 따른 비지니스 로직을 실행한다.
ActionForm : GET 또는 POST 방식으로 넘긴 파라미터들을 저장하고 분석하여 알맞은 값이 들어왔는지 여부등을 판단(유효성 검사)하는 자바빈이다. ActionForm은 없어도 되며 ActionForm에서 각 파라미터가 유효성 검사를 통과하지 못하면 Action을 호출하지 않는다.
Action : 비지니스 로직을 호출하는 부분이다. 실질적으로 자바 웹 서블릿과 같은 역할을 한다. 비지니스로직은 Action에서 직접 수행하지 말고 따로 Model 전용 클래스로 만들어서 파라미터들을 넘겨 호출만 하는 형태로 작성한다.
org.apache.struts.action.Action 클래스를 상속받아 작성하며, 수행은 execute()메서드에 의해 이뤄진다.

Model
비지니스 로직을 수행하는 부분.
데이터베이스 쿼리 및 업데이트 등을 수행.
수행 결과를 컨트롤러가 request나 session application 웹 서블릿 스코프 객체등에 setAttribute() 메서드를 이용해 저장.
실행 종료 후 컨트롤러로 복귀.
구현부는 자바 클래스(데이타베이스등을 액세스하는 자바 클래스)와 자바 빈(그 결과데이타를 저장하는 자바빈)으로 이루어져 있다.

View
JSP는 getAttribute() 로 컨트롤러가 저장한 수행 결과를 얻어 화면에 출력.
구현부는 jsp로 이루어져있다.

struts-config.xm
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
    <data-sources />
    <form-beans />
    <global-exceptions />
    <global-forwards />
    <action-mappings />
    <controller />
    <message-resources />
    <plug-in />
</struts-config>



요소들은 항상 위의 순서대로 작성 되어야 한다.

action 요소
ㆍattribute : 요청 스코프나 세션 스코프에서의 ActionForm 이름. name 속성을 통해 사용한 ActionForm이 지정됐을 때만 유효하며 ActionForm이 scope 속성을 통해 지정된 스코프에 저장될 때 사용될 이름. 별도로 지정하지 않으면 name 속성에서 지정한 이름이 그대로 사용된다.
ㆍforward : jsp나 서블릿 같은 리소스로 포워드하고자 할 때 경로 지정.
ㆍinclude : jsp나 서블릿 같은 리소스를 포함하고자 할 때 경로 지정.
ㆍinput : 이 액션을 호출한 웹 리소스명. 요청 파라미터의 검증 시 에러가 발생하면 이곳에 지정한 리소스로 되돌아간다.
ㆍname : Action에 사용할 ActionForm의 이름
ㆍpath : Action 요소가 매핑될 요청 경로. 항상 "/"로 시작해야 한다. ".do"제외.
ㆍparameter : Action에 전달 할 파라미터(요청 파라미터와 다르다.) Action에서는 ActionMapping의 getParameter() 메서드를 통해 조회.
ㆍtype : Action의 패키지 명을 포함한 클래스명. Action없이 forward, include 속성을 지정하여 뷰로 바로 이동 하는게 아니라면 Action의 이름은 반드시 정의되어야 한다.


로그인 폼을 생성한다면
1. 로그인 페이지(View)  jsp
2. 로그인 요청시 실행될 액션클래스(Controller) java
3. 비지니스 로직이 실행 될  클래스(Model) java
파일 등이 필요하다.

struts-config.xml 구성
<action-mappings>
   <action path="/login/loginForm" forward="/login/loginform.jsp"/>
   <action path="/login/login" type="strutsguide.actions.loginAction"
     validate="false">
        <forward name="success" path="/login/loginSuccess.jsp" redirect="true"/>
        <forward name="fail" path="/login/loginFail.jsp" />
</action-mappings>

View
<form action="login.do">

Controller
package strutsguide.actions;
..
public class loginAction extends Action{
   public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) throws Exception{
   String userNM=request.getParameter("userNM");
   ...
    ActionForward forward=null;
    if(test==null)
       forward=mapping.findForward("fail");
    else
       forward=mapping.findForward("success");

    return forward;
}
    
  
}

Model
public class LoginProcess{
  //비지니스 로직 구현
   ....
}

'FrameWork' 카테고리의 다른 글

ORM  (0) 2020.09.08
싱글톤 패턴  (0) 2020.09.07
Jetty  (0) 2020.09.04
JUnit  (0) 2020.09.03
메이븐  (0) 2020.09.02