Date post: | 06-Jul-2015 |
Category: |
Technology |
Upload: | minglei-tu |
View: | 86 times |
Download: | 2 times |
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
*1 action mapping
*2 interceptors
*3 action & result
1
2
3
ActionContext
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
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, configManager);
handleSpecialParameters(request, mapping);
if (mapping.getName() == null) {return null;
}
parseActionName(mapping);
return mapping;
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
Action ContextO
GN
L
OG
NL
Co
nte
xt (
Act
ion
Co
nte
xt)
Value Stack (OGNL root)|___Action|___other objects…
#parameters#request#session#application#attr (searches p, r, s, then a)
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")
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
Interceptors – do common jobs before or after
exceptionInterceptor
loginInterceptor…
sessionValidator…
…action
result
request
response
error output
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>
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
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
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
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
ConfigurationIn 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) {
InitializationIn 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);
}}
AgendaStruts 2 Architecture & Request Processing
Action Mapping
Action Context & Data Binding
Interceptors
Result Types
Initialization & Configuration
Struts 2 in EHI Software Architecture
Struts 2 in EHI Software Architecture
db resources
actionaction action
action
templatetemplate template page page
Business Object Business
ObjectBusiness Object
HelperHelperHelper
Business ObjectBusiness
ObjectEHIDataBase
screenscreenscreen
freemarker
Struts 2
spring
jsp
Thanks!