I've been evaluating struts 2.1.8.1 and have found some troubling
performance bottlenecks relating to the struts tag and freemarker. I have a
JSP that has 7 struts2 tags in it. (A simple signup form)

I noticed in my load testing that the throughput of this page was 4-5 times
slower under load (100 concurrent threads) than a JSP page with no struts2
tags on it. I cracked open my profiler and noticed the majority of the time
spent in a page request was within freemarker. I uploaded a screen shot from
my profiler here : http://tinypic.com/r/20johet/6 . I've seen a lot of
discussion on the mailing lists about performance related issues and the
recommendations that came along with them to address it. I believe I've done
everything I can to tune this simple page. I would appreciate any feedback
if there is something I am missing. Or is this a known issue?

struts.xml:
<struts>
<!-- Constants -->
<constant name="struts.devMode" value="false" />
 <constant name="struts.i18n.encoding" value="UTF-8" />
 <constant name="struts.multipart.maxSize" value="2000000" />
<constant name="struts.ui.theme" value="css_xhtml" />
 <constant name="struts.freemarker.templatesCache" value="true" />
<constant name="struts.ui.templateDir" value="template"/>
 <constant name="struts.enable.SlashesInActionNames" value="true" />
<constant name="struts.convention.action.disableScanning" value="true" />
 <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.url.includeParams" value="all" />

<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
 <result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"
/>
 </result-types>

<interceptors>
<!-- Copied from struts-default.xml and changed validation exclude methods
-->
 <interceptor-stack name="defaultStack">
<interceptor-ref name="exception" />
 <interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
 <interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
 <interceptor-ref name="debugging" />
<interceptor-ref name="profiling" />
 <interceptor-ref name="scopedModelDriven" />
<interceptor-ref name="modelDriven" />
 <interceptor-ref name="fileUpload" />
<interceptor-ref name="checkbox" />
 <interceptor-ref name="staticParams" />
<interceptor-ref name="params">
 <param name="excludeParams">dojo\..*</param>
</interceptor-ref>
 <interceptor-ref name="conversionError" />
<interceptor-ref name="validation">
 <param name="excludeMethods">cancel,delete,list</param>
</interceptor-ref>
 <interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
 </interceptor-ref>
</interceptor-stack>
<interceptor-stack name="fileUploadStack">
 <interceptor-ref name="fileUpload" />
<interceptor-ref name="defaultStack" />
 </interceptor-stack>
</interceptors>
<action name="new" class="testapp.CreateAccount" method="show">
 <result name="input" type="tiles">account.create</result>
</action>
 </package>
</struts>



JSP Page (snippet):
 <s:form action="create" >
<fieldset>
 <p><label>Name</label>
<s:textfield name="user.name" cssClass="txt-input small" />

<p><label>Email</label>
<s:textfield name="user.email" cssClass="txt-input small" />

<p><label>Site Address</label>
<s:textfield name="account.subDomain" cssClass="txt-input small" />

<p><label>Password</label>


<s:password name="user.password" cssClass="txt-input small"  />

<p><label>Confirm Password</label>
<s:password name="user.passwordConfirm" cssClass="txt-input small" />
 </fieldset>

<s:submit cssClass="button"/>
</s:form>

Reply via email to