날짜별 글 목록: 2008년 3월 2일

Struts2 아키텍처..

아래의 이미지는 Strut2의 아키텍처이고, 이 구조에서 사용자가 요청을 하면,

1. Request를 처리할 액션(Action)을 ActionMaper에서 찾아서 실행한다
2. Request가 처리되면서 Action의 Interceptor 전,후 처리를 한다.
3. Response를 한다. 

사용자 삽입 이미지

In the diagram, an initial request goes to the Servlet container (such as Jetty or Resin) which is passed through a standard filter chain. The chain includes the (optional) ActionContextCleanUp filter, which is useful when integrating technologies such as SiteMesh Plugin. Next, the required FilterDispatcher is called, which in turn consults the ActionMapper to determine if the request should invoke an action.

If the ActionMapper determines that an Action should be invoked, the FilterDispatcher delegates control to the ActionProxy. The ActionProxy consults the framework Configuration Files manager (initialized from the struts.xml file). Next, the ActionProxy creates an ActionInvocation, which is responsible for the command pattern implementation. This includes invoking any Interceptors (the before clause) in advance of invoking the Action itself.

Once the Action returns, the ActionInvocation is responsible for looking up the proper result associated with the Action result code mapped in struts.xml. The result is then executed, which often (but not always, as is the case for Action Chaining) involves a template written in JSP or FreeMarker to be rendered. While rendering, the templates can use the Struts Tags provided by the framework. Some of those components will work with the ActionMapper to render proper URLs for additional requests.

<!–[if !vml]–><!–[endif]–>

All
objects in this architecture (Actions, Results, Interceptors,
and so forth) are created by an ObjectFactory.
This ObjectFactory is pluggable. We can provide our own ObjectFactory for any
reason that requires knowing when objects in the framework are created. A
popular ObjectFactory implementation uses Spring as provided by the Spring
Plugin
.

Interceptors are executed again (in reverse order, calling the after clause). Finally, the response returns through the filters configured in the web.xml. If the ActionContextCleanUp filter is present, the FilterDispatcher will not clean up the ThreadLocal ActionContext. If the ActionContextCleanUp filter is
not present, the FilterDispatcher will cleanup all ThreadLocals.

스트러츠 2의 .action 확장자 변경하기

스트러츠(struts) 2는 기본으로 아래와 같은 환경파일을 사용하고 있다. 이 파일들 중에 struts.properties 파일이 스트러츠 2의 기본 설정을 가지고 있다.

File
Optional
Location Purpose
web.xml no /WEB-INF/ Web deployment descriptor to include all
necessary framework components
struts.xml yes /WEB-INF/classes/ Main configuration, contains result/view
types, action mappings, interceptors, and so forth
struts.properties yes /WEB-INF/classes/ Framework properties
struts-default.xml yes /WEB-INF/lib/struts2-core.jar Default configuration provided by Struts
struts-default.vm yes /WEB-INF/classes/ Default macros referenced by
velocity.properties
struts-plugin.xml yes At the root of a plugin JAR Optional configuration files for Plugins struts.xml. in
the same format as
velocity.properties yes /WEB-INF/classes/ Override the default Velocity configuration


위 설정 파일들 중에서 struts.properties 에서
### Used by the DefaultActionMapper

### You may provide a comma separated list, e.g.
struts.action.extension=action,jnlp,do struts.action.extension=action
위의 빨간색 설정 부분을
xxx,do,action 등과 같이 우선순위가 높은 순서대로 설정 하면 된다.