1:在web.xml 中为何要配置为 /* ?
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts2默认处理自己包中的静态文件,对静态文件的请求,struts2会查找配置的静态目录,
看下了下源代码,对/struts,/static这2个开头的uri,struts2会认为是自己的静态文件处理
这样看来,struts2配置为/* ,是有处理性能损失的,具体损失多少,目前还没研究
解决方式:struts2提供了一个配置参数:struts.action.excludePattern,该参数指定那些uri模式不被struts2处理,该参数在struts2预处理之前重定向,性能有所提高
2 在filterMapping中精确配置模式,但是需要配置3个/*.do,/struts/* ,/static/*,
这样的话扩展名称就固定了
该方案未测试
2:struts2中集成了简单的性能测试,能记录下每一个请求在各个环节的处理时间(主要包括,创建action,走filter,等)
配置打开性能监控:需要配置启动时的变量,-Dxwork.profile.activate= true
也可以在自己的页面代码中增加时间监控用UtilTimerStack ,这样就可以看到整个流程各个环节消耗的时间了
样例:
[2012-08-13 10:53:14 INFO ] util.profiling.UtilTimerStack - [3732ms] - Handling request from Dispatcher
[33ms] - create DefaultActionProxy:
[33ms] - actionCreate: index
[3684ms] - invoke:
[3684ms] - interceptor: exception
[3684ms] - invoke:
[3684ms] - interceptor: alias
[3684ms] - invoke:
[3684ms] - interceptor: servletConfig
[3674ms] - invoke:
[3674ms] - interceptor: i18n
[3674ms] - invoke:
[3674ms] - interceptor: prepare
[3671ms] - invoke:
[3671ms] - interceptor: chain
[3671ms] - invoke:
[3671ms] - interceptor: debugging
[3671ms] - invoke:
[3671ms] - interceptor: scopedModelDriven
[3668ms] - invoke:
[3668ms] - interceptor: modelDriven
[3668ms] - invoke:
[3668ms] - interceptor: fileUpload
[3668ms] - invoke:
[3668ms] - interceptor: checkbox
[3668ms] - invoke:
[3668ms] - interceptor: multiselect
[3668ms] - invoke:
[3668ms] - interceptor: staticParams
[3665ms] - invoke:
[3665ms] - interceptor: actionMappingParams
[3663ms] - invoke:
[3663ms] - interceptor: params
[3661ms] - invoke:
[3661ms] - interceptor: conversionError
[3661ms] - invoke:
[3661ms] - interceptor: validation
[3548ms] - invoke:
[3548ms] - interceptor: workflow
[3548ms] - invoke:
[2170ms] - interceptor: userLoginInterceptor
[1109ms] - rmi method invoke:getLastUpdatePackageInfo
[283ms] - rmi method invoke:getLastUpdatePackageInfo
[1357ms] - executeResult: noLogin