Thomas Tu
thomas.tu@ehealth-china.com
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
*1 action mapping
*2 interceptors
*3 action & result

1
2
3

ActionContext
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
Action Mapping – find the right action/method
Task: url + parameters  namespace, action, method
 How to do?
 namespace:...
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
OGNL Context (ActionContext)

OGNL

Action Context

Value Stack (OGNL root)
|___Action
|___other objects…

#parameters
#re...
Data Binding & Type Conversion
Based on OGNL, struts 2 support data binding and accessing as
follows:
From request to acti...
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
Interceptors
request

– do common jobs before or after

exceptionInterceptor

… loginInterceptor
… sessionValidator
…

act...
Interceptors in EHI
from struts.xml
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception">
<param name...
Q: why struts 2 action needn’t be required to
implement any interface?
 Why need a interface?

 Because it can help core...
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
Result Types – help produce response content
Q: How struts 2 to support multiple result types?
 How to produce response c...
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
Configuration
In struts-default.xml:
<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
<bean type="com.o...
Initialization
In web.xml:
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filte...
Agenda
 Struts 2 Architecture & Request Processing
 Action Mapping
 Action Context & Data Binding
 Interceptors
 Resu...
Struts 2 in EHI Software Architecture
freemarker

jsp

template
template

template

page page

Struts 2

action
action

ac...
Thanks!
Upcoming SlideShare
Loading in …5
×

Sturts 2 in EHI

250 views

Published on

a struts 2 training ppt for ehealthinsurance's new employees

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
250
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Request Processing: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 SiteMeshPlugin. 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.xmlfile). 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.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.Notes: 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.
  • Sturts 2 in EHI

    1. 1. Thomas Tu thomas.tu@ehealth-china.com
    2. 2. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    3. 3. *1 action mapping *2 interceptors *3 action & result 1 2 3 ActionContext
    4. 4. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    5. 5. Action Mapping – find the right action/method Task: url + parameters  namespace, action, method  How to do?  namespace: url  actionName: url < special parameter  methodName: special parameter < dynamic method, config < default Related codes: DefaultActionMapper.java ActionMapping mapping = new ActionMapping(); …… parseNameAndNamespace(uri, mapping, configMan ager); handleSpecialParameters(request, mapping); if (mapping.getName() == null) { return null; } parseActionName(mapping); return mapping;
    6. 6. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    7. 7. OGNL Context (ActionContext) OGNL Action Context Value Stack (OGNL root) |___Action |___other objects… #parameters #request #session #application #attr (searches p, r, s, then a)
    8. 8. Data Binding & Type Conversion Based on OGNL, struts 2 support data binding and accessing as follows: From request to action model: census.zipCode=90001  action. getCensus(). setZipCode(“90001”) census.requestEffectiveDate=5/1/2011  action. getCensus(). setRequestEffectiveDate(..) From action context to template (freemarker): ${plan.officeVisitText}  productView.getOfficeVisitText() ${plan.pastRate?string("$#,##0.00")}  formatter.format(productView.getPastRate(), "$#,##0.00")
    9. 9. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    10. 10. Interceptors request – do common jobs before or after exceptionInterceptor … loginInterceptor … sessionValidator … action result response error output
    11. 11. Interceptors in EHI from struts.xml <interceptor-stack name="defaultStack"> <interceptor-ref name="exception"> <param name="logEnabled">true</param> <param name="logLevel">WARN</param> </interceptor-ref> <interceptor-ref name="servletConfig"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="setupContexts"/> <interceptor-ref name="https"/> <interceptor-ref name="sessionTimeout"/> <interceptor-ref name="login"/> <interceptor-ref name="alliance"/> <interceptor-ref name="ehiServlet"/> <interceptor-ref name="webAppContext"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="params"/> <interceptor-ref name="sessionValidator"/> <interceptor-ref name="prepare"/> <interceptor-ref name="changeSessionInactiveInterval"/> <interceptor-ref name="chain"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel</param> </interceptor-ref> <interceptor-ref name="ab"/> <interceptor-ref name="tracking"/> </interceptor-stack>
    12. 12. Q: why struts 2 action needn’t be required to implement any interface?  Why need a interface?  Because it can help core controller to find: action method name and its parameter requirements  Action method was invoked by reflection, so it can be any method name  Interceptors can help prepare any parameters declared by action class
    13. 13. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    14. 14. Result Types – help produce response content Q: How struts 2 to support multiple result types?  How to produce response content?  Model + template = content (json, redirect)  Result type can help prepare the required model
    15. 15. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    16. 16. Configuration In struts-default.xml: <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" /> <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class=“…”/> <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" class=“…"/> <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class=“…"/> In struts-plugin.xml (spring plugin): <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" /> In struts.xml <constant name="struts.ui.templateDir" value="/WEB-INF/tags"/> <constant name="struts.ui.theme" value="simple"/> <constant name="struts.objectFactory" value="spring"/> <constant name="struts.action.extension" value=""/> <constant name="struts.mapper.class" value="com.ehi.struts.core.ActionMapper"/> In struts/xwork codes: @Inject public void setContainer(Container container) { … @Inject(StrutsConstants.STRUTS_ACTION_EXTENSION) public void setExtensions(String extensions) {
    17. 17. Initialization In web.xml: <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> When starting app server: StrutsPrepareAndExecuteFilter  Dispatcher.init() When incoming request (in StrutsPrepareAndExecuteFilter.doFilter(req, resp) ): prepare.setEncodingAndLocale(request, response); prepare.createActionContext(request, response); prepare.assignDispatcherToThread(); if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) { chain.doFilter(request, response); } else { request = prepare.wrapRequest(request); ActionMapping mapping = prepare.findActionMapping(request, response, true); if (mapping == null) { boolean handled = execute.executeStaticResourceRequest(request, response); if (!handled) { chain.doFilter(request, response); } } else { execute.executeAction(request, response, mapping); } }
    18. 18. Agenda  Struts 2 Architecture & Request Processing  Action Mapping  Action Context & Data Binding  Interceptors  Result Types  Initialization & Configuration  Struts 2 in EHI Software Architecture
    19. 19. Struts 2 in EHI Software Architecture freemarker jsp template template template page page Struts 2 action action action spring Business Object Business Object action screen screen screen Helper Helper Helper Business Object db EHIDataBase resources Business Business Object Object
    20. 20. Thanks!

    ×