Chapter 8. 스트럿츠에서의 컨트롤러
ActionServlet
: 웹어플리케이션이 초기화될 때 외부설정파일(struts-config.xml)을 읽어들여 ModuleConfig 객체를 생성한다.
: 사용자의 요청이 있을 때마다 이를 가로채 ModuleConfig 객체를 검색하여 모듈별로 정의된 RequestProcessor 에 처리를 위임.
RequestProcessor 의 사용자 요청처리절차
- RequestProcessor는 요청 경로에 따라 ActionMapping 을 조회
- RequestProcessor는 ActionMapping 에 정의된 ActionForm을 생성하고 사용자의 요청과 함께 전달된 파라메터를 저장
- RequestProcessor는 ActionMapping 에 정의된 Action 의 execute() 메서드를 호출하고 이때 ActionForm을 파라메터로 전달한다.
- Action 은 ActionForm 에 저장된 파라메터에 따라 모델계층에 사용자가 요청한 작업을 하도록 의뢰
- Action 은 모델계층의 수행결과에 따라 Action Mapping 에 정의된 ActionForward 를 찾아 반환
- RequestProcessor는 Action에서 반환된 ActionForward 의 수행결과에 따라 뷰계층을 호출.
Chapter 9. ActionServlet, RequestProcessor
ActionServlet
: 사용자의 요청을 받는 단일 진입점의 역할, 모든 클라이언트의 요청이 ActionServlet 을 거친다.
: web.xml, struts-config.xml 파일 설정에 따라 모듈별로 정의된 RequestProcessor 의 인스턴스를 생성하고, process() 메소드 호출.
: Struts 1.1 이후로는 ActionServlet은 설정파일의 초기화를 담당하고 RequestProcessor 가 컨트롤의 역할.
1) ActionServlet 의 초기화
: ActionServlet 이 수행하는 대부분의 처리는 서블릿 컨테이너가 init() 메소드를 호출할 때 발생
- 내부초기화 작업
- web.xml 에 설정된 서블릿 초기화 파라메터 조회
- web.xml 파일로부터 servlet-mapping 을 조회, struts-html 의 form 태그에서 정확한 URL을 구할 수 있다.
- default module 정보를 조회 : 일반적으로 struts-config.xml 이다.
- 모듈에 정의된 리소스를 초기화하여 ServletContext 에 저장하고, 데이터소스, 플러그인 초기화
- 추가모듈정보가 있다면 디폴트모듈과 동일하게 초기화.
2) RequestProcessor 의 요청 처리 절차
: 최초조회시 생성되어 ServletContext에 저장되고, 다음부터는 재활용됨.
: ActionServlet 이 조회된 RequestProcessor 의 process() 메서드를 호출하면 다음 처리절차를 거친다.
- HTTP 요청이 multi-part/form-data 형식으로 POST 된 경우 HttpServletRequest 를 대치하는 새로운 요청래퍼를 생성.
- 요청 URL을 분석하여 ActionMapping 에 사용할 path 값을 추출
- Locale 정보를 설정하여 세션에 저장. struts-config.xml 파일의 요소의 locale 속성이 "false" 라면 매번 새로 생성.
- 요청의 컨텐츠 타입과 인코딩 설정
- struts-config.xml 파일의 요소의 캐시 설정에 따라 설정.
- processPreprocess() 메소드를 호출
- path 값으로 ActionMapping 을 검색하고 사용자가 요청을 수행할 Role 을 가지고 있는지 검사.
- ActionMapping 에 설정된 ActionForm 을 찾아 스코프가 세션으로 지정되어있는지 검사한다.
- 요청 파라메터들을 ActionForm 에 설정하고 validate() 메서드를 호출,
* 에러가 있다면 ActionErrors 객체를 요청하여 요청스코프에 저장하고 ActionMapping 의 input 속성에 지정된 리소스로 포워드
- struts-config.xml 파일의 요소에 설정된대로 리소스를 포워드(forward)하거나 포함(include)한다
- Action 인스턴스를 검색하고 execute() 메소드를 호출, 이때의 리턴값을 ActionForward 에 설정된 리소스로 포워드
[:2008년 04월 23일 16:03:48 수정되었습니다.:] |