Sturts 2 in EHI

20
Thomas Tu [email protected]

description

a struts 2 training ppt for ehealthinsurance's new employees

Transcript of Sturts 2 in EHI

Page 1: Sturts 2 in EHI

Thomas Tu

[email protected]

Page 2: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 3: Sturts 2 in EHI

*1 action mapping

*2 interceptors

*3 action & result

1

2

3

ActionContext

Page 4: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 5: Sturts 2 in EHI

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;

Page 6: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 7: Sturts 2 in EHI

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)

Page 8: Sturts 2 in EHI

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")

Page 9: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 10: Sturts 2 in EHI

Interceptors – do common jobs before or after

exceptionInterceptor

loginInterceptor…

sessionValidator…

…action

result

request

response

error output

Page 11: Sturts 2 in EHI

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>

Page 12: Sturts 2 in EHI

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

Page 13: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 14: Sturts 2 in EHI

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

Page 15: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 16: Sturts 2 in EHI

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) {

Page 17: Sturts 2 in EHI

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);

}}

Page 18: Sturts 2 in EHI

AgendaStruts 2 Architecture & Request Processing

Action Mapping

Action Context & Data Binding

Interceptors

Result Types

Initialization & Configuration

Struts 2 in EHI Software Architecture

Page 19: Sturts 2 in EHI

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

Page 20: Sturts 2 in EHI

Thanks!