Performance tuning
The following are some tips and tricks to squeeze the most performance out of Struts 2.
|
Important OGNL update For Struts 2 versions before 2.3: the OGNL version 3.0.3 library is a drop-in replacement for older OGNL jars, and provides much better performance. See the following Jira issue for more information: https://issues.apache.org/jira/browse/WW-3580
|
Turn off logging and devMode.
1.关闭logging and DEVMODE
devMode在struts.properties下修改:struts.devMode=false
logging在web.xml中修改:
<servlet>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>0</param-value>
</init-param>
</servlet>
devMode allows reloading of configuration and validation related files, but because they happen on each request, this setting will totally kill your performance.
When using logging, make sure to turn off logging (esp. Freemarker generates a LOT of logging), and check if a level is enabled before printing it, or you will get the cost of the String parsing/concatination anyways.
Use the Java Templates
2.使用java的模板
If you use the simple theme, and do not overwrite any of the FreeMarker templates, consider using the java templates, which provide a drop in replacement for most tags, and are a lot faster than the regular tags.
Do not use interceptors you do not need.
3.不要使用不需要的拦截器
如果一个Action不需要全栈的拦截器的话,就使用basicStack拦截器或移除不需要的拦截器。
If you do not require a full stack of interceptors for an Action, then try using a different one (basicStack), or remove interceptors you do not need. Remove the I18nInterceptor interceptor if you don't need it, as it can cause a session to be created.
Use the correct HTTP headers (Cache-Control & Expires).
4.使用正确的http头(缓存控制和过期时间)
当返回一个html页面的时候,要保证html页面包含正确的header,使得浏览器可以知道怎样缓存该html页面。
When returning HTML views, make sure to add the correct headers so browsers know how to cache them.
Copy the static content from the Struts 2 jar when using the Ajax theme (Dojo) or the Calendar tag.
5.当你使用struts2中的ajax theme(Dojo)或者日历tag的时候将其静态内容从struts2 jar中复制到http服务器
Struts 2 uses some external javascript libraries and cascading stylesheets for certain themes and tags. These by default are located inside the Struts 2 jar, and a special filter returns them when requesting a special path (/struts). Although Struts 2 can handle these requests, an application/servlet container is not optimized for these kind of requests. Consider moving these .js and .css files to a seperated server (Lighttpd, Apache HTTPD, ..).
Create a freemarker.properties file in your WEB-INF/classes directory.
6.在web-info/classes创建freemarker.propertices文件。
创建创建freemarker.propertices文件,并添加以下设置:
template_update_delay= 60000
|
开发的时候不要修改这个参数。
Create the freemarker.properties file and add the following setting (or whatever value you deem fitting):
This value determines how often Freemarker checks if it needs to reloads the templates from disk. The default value is 500 ms. Since there is no reason to check if a template needs reloading, it is best to set this to a very large value. Note that this value is in seconds and freemarker will convert this value to milliseconds.
See also: Freemarker configuration properties
Enable Freemarker template caching
7启用Freemarker模板缓存
将struts.freemark.templatesCache设置为ture启用freemark的缓存,此设置默认为false
As of Struts 2.0.10, setting the property struts.freemarker.templatesCache to true will enable the Struts internal caching of Freemarker templates. This property is set to false by default.
In Struts versions prior to 2.0.10, you had to copy the /template directory from the Struts 2 jar in your WEB_APP root to utilize Freemarker's built in chaching mechanism in order to achieve similar results.
The built in Freemarker caching mechanism fails to properly cache templates when they are retrieved from the classpath. Copying them to the WEB_APP root allows Freemarker to cache them correctly. Freemarker looks at the last modified time of the template to determine if it needs to reload the templates. Resources retrieved from the classpath have no last modified time, so Freemarker will reload them on every request.
When overriding a theme, copy all necessary templates to the theme directory.
8.当覆盖一个theme时,copy所有的模板到theme目录
当template在当前目录不能发现时,会有性能开销。因为在返回父模板前,struts2必须在当前目录进行theme检查. 晚先时候,这个缺陷将要通过一个 template缓存解决。
There's a performance cost when a template cannot be found in the current directory. The reason for this is that Struts 2 must check for a template in the current theme first before falling back to the parent theme. In the future, this penalty could be eliminated by implementing a missing template cache in Struts 2.
Do not create sessions unless you need them.
9如果不需要,不要创建sessions
除非需要,Struts2不会创建sessions(比如,在你的拦截器stack中有createSession拦截器)。注意当使用SiteMesh时, 一个session将总是被创建(看看http://forums.opensymphony.com /thread.jspa?messageID=5688的描述).
Struts 2 does not create sessions unless asked to (for example, by having the createSession interceptor in your interceptor stack). Note that when you use SiteMesh however, a session will always be created (See http://forums.opensymphony.com/thread.jspa?messageID=5688 for details). The I18nInterceptor interceptor can create sessions, so make sure you remove it, if you don't need it.
When using Freemarker, try to use the Freemarker equivalent rather than using the JSP tags.
10.当使用FreeMarker时,尽量使用等价的FreeMarker元素,代替JSP的标签
Freemarker支持list迭代, 显示属性,包含其他模版, macro's等等.使用等价的FreeMarker元素代替struts2的tags 会有小的性能提升。 (例如:<s:property value="foo"/>将要被${foo}代替).
Freemarker has support for iterating lists, displaying properties, including other templates, macro's, and so on. There is a small performance cost when using the S2 tags instead of the Freemarker equivalent (eg. <s:property value="foo"/> should be replaced by ${foo}).
参考文档:performance_tuning in website struts.apache.org/2.3.1.1/docs/performance-tuning.html
分享到:
相关推荐
本文将根据给定文件的信息,深入探讨Struts2项目性能优化的三个关键步骤,旨在帮助开发者提升系统响应速度和用户体验。 ### 一、关闭不必要的日志记录与开发模式 Struts2在默认情况下开启的日志记录和开发模式虽然...
在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...
5. Struts2框架的优化:在使用Struts2框架进行Web开发的过程中,开发者需要注意一些性能优化的问题。例如,可以通过合理的配置Action缓存,减少Action的创建和销毁,提高系统的性能。同时,也可以通过合理的配置结果...
- **性能优化**:Struts 2在内存管理和缓存机制等方面进行了优化,提高了整体性能。 - **国际化支持**:Struts 2内置了对多语言的支持,使得创建多语言的应用程序变得更加简单。 ### 实战应用案例 为了更好地理解...
**5.1 性能优化** - **减少 Action 调用**:合理设计 Action,避免不必要的多次调用。 - **缓存策略**:利用缓存机制减少数据库查询次数。 **5.2 安全性增强** - **输入验证**:确保所有输入数据经过严格的验证。 -...
Struts2 和 Struts1 是两个著名的 Java Web 开发框架,它们都出自 Apache Software ...尽管 Struts2 在某些方面仍存在挑战,如性能优化和学习曲线,但其综合优势使其成为很多开发者在构建企业级应用时的首选框架之一。
Struts2 是一个非常流行的Java Web应用程序框架,用于构建企业级的应用。它的核心是基于Model-View-Controller(MVC)设计模式,帮助开发者更好地组织和管理代码,提高开发效率。在Struts2中,DTD(Document Type ...
10. **最佳实践与性能优化**:分享Struts2开发中的最佳实践,如何优化应用性能,避免常见陷阱。 此外,书中还包含大量实例和案例研究,帮助读者在实际项目中应用所学知识。《Struts2 In Action中文版》是一本全面、...
- **Struts2**:通过拦截器和更优化的设计,性能通常优于Struts1。 总结起来,Struts2在设计和功能上都比Struts1有所改进,提供了更好的灵活性、可扩展性和易用性。然而,这并不意味着Struts1没有它的价值,对于...
深入研究Struts2源码,开发者可以更清楚地理解框架的工作原理,从而优化应用性能,解决实际问题,甚至为框架贡献代码。通过分析源码,我们可以学习到如何设计一个高性能、可扩展的MVC框架,这对提升Java Web开发技能...
它可能还会讲解如何调试Struts2应用,优化性能,以及安全问题,比如XSS和CSRF防护。 《Struts+2.pdf》: 书名中的"+"可能表示该书涵盖了Struts2的最新版本或与其他技术(如Spring、Hibernate)的结合。这可能涉及到...
Struts2是一个非常著名的Java Web开发...在实际开发中,根据项目需求,可以选择性地引入和配置这些库,以优化应用性能和功能。同时,定期更新这些库到最新版本也是很重要的,因为它们通常会修复安全漏洞和提供新特性。
通过这个"Struts2项目代码"实例,你可以学习如何配置Struts2框架,编写Action类,使用拦截器,理解MVC设计模式在实际项目中的运用,以及如何调试和优化Struts2应用。同时,它还能帮助你熟悉Struts2与其他技术(如...
Struts2是一个基于MVC...总的来说,Struts2 2.3.34 jar包是开发和维护Struts2应用的基础,它提供了框架的核心功能、更新的安全补丁以及更好的性能优化。通过合理使用和配置,可以构建高效、稳定且安全的Web应用程序。
通过理解并正确配置这些常量,开发者能够更精细地控制Struts2的行为,优化应用程序的性能和功能。例如,通过调整`struts.multipart.maxSize`可以防止因文件过大导致的服务器崩溃,而选择合适的`struts.multipart....
- **性能提升**:Struts2在执行效率方面进行了优化,能够更好地处理高并发请求。 - **功能增强**:Struts2引入了更多的内置特性,如拦截器、结果类型等,减少了自定义组件的需求。 - **安全性改善**:Struts2提供了...
7. **性能优化** - ** strut2-convention-plugin**:使用约定优于配置,减少XML配置。 - **Caching Interceptor**:缓存拦截器,提高性能。 - **异步Action**:利用Struts2的异步特性,提高响应速度。 8. **安全...
Struts2是一个强大的...此外,文档还会详细介绍如何利用Struts2的特性来优化性能,提高应用的安全性和可扩展性。对于初学者和经验丰富的开发者来说,"struts2-docs"都是理解和应用Struts2框架的不可或缺的参考资料。
Struts2是一个流行的Java web应用程序框架,它源自Struts1.x和WebWork的结合,具有稳定性和高性能。在深入理解Struts2的工作原理时,源码分析是必不可少的步骤。Struts2的核心设计理念和设计模式相比Struts1.x有了...
从2.3.26升级到2.3.34是一个常规的版本更新过程,旨在获取新版本中的安全修复、性能优化和功能增强。以下是对这个升级过程的详细解析: 1. **升级前准备**: - **备份**:在开始升级之前,确保备份现有的项目代码...