[关闭]
@MrXiao 2017-12-21T14:20:30.000000Z 字数 6514 阅读 927

Struts2(1)——基本认识

Struts2


Struts2就是一个web层框架,并且是使用MVC设计模式实现的的一个框架,之前使用的是Serlvet+JSP来开发web项目,现在用Struts2框架来替代他,那Struts2到底有哪些优点呢?那就需要我们自己来研究它了.
请求 -----------  Servlet -------------- JSP    serlvet+JSP

请求 ----------- Action    -------------- JSP    Struts

1.工作原理

struts2

请求在struts2框架中的处理流程大概可以分为以下几步:

  1. 客户端初始化一个指向servlet容器(例如Tomcat)的请求
  2. 该请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
  3. 然后FilterDispather(StrutsPrepareAndExecuteFilter)被调用,询问ActionMapper来决定这个请是否需要调用某个Action。
  4. 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy.
  5. ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
  6. ActionProxy创建一个ActionInvocation的实例
  7. ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
  8. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

在上述过程中所有的对象(Action,Results,Interceptors等)都是通过ObjectFactory来创建的。

2.配置文件

配置文件的名称 位置 主要内容 说明
default.properties struts2-core-2.3.15.3.jar/org/apache/struts2/default.properties 一些参数配置 程序员不能直接修改的
struts-default.xml struts2-core-2.3.15.3.jar/struts-default.xml 一些参数配置 程序员不能直接修改的
struts.xml 应用的classpath中 struts的配置文件 程序员使用的
struts.properties 应用的classpath中 struts的参数配置文件 程序员使用的
web.xml WEB-INF/web.xml 应用的配置文件 给过滤器配置参数

以上配置文件在应用被启动的时候就完成了加载;而且有加载的顺序要求。后面的配置会覆盖掉前面配置文件中相同的信息。

2.1 default.properties

参数名称 参数的默认值 说明
struts.i18n.encoding UTF-8 框架使用的默认编码
struts.action.extension action 进入框架核心的uri的后缀。多个值用逗号分隔
struts.serve.static.browserCache true 告诉客户端要不要缓存静态的资源
struts.configuration.xml.reload 被注释掉了:建议true 每当xml配置文件被修改后,不需要重新加载应用就能够使配置生效。适合开发阶段
struts.devMode false 是否是开发模式。开发阶段应该设置为true

如何修改他们的默认值呢?
struts.xml:通过该文件来进行修改

  1. <!--通过constant元素覆盖掉之前配置文件参数的默认值-->
  2. <constant name="struts.devMode" value="true" />

2.2 struts-default.xml

struts-default.xml

这个文件定义了action返回结果类型,struts的拦截器,以及一些其他默认配置。

2.3 struts.xml

2.4 struts.properties

这个文件是struts2框架的全局属性文件,也是自动加载的文件。该文件包含了系列的key-value对。该文件完全可以配置在struts.xml文件中,使用constant元素。下面是这个文件中一些常见的配置项及说明。

  1. ### 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration
  2. ### 开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。
  3. # struts.configuration=org.apache.struts2.config.DefaultConfiguration
  4. ### 设置默认的locale和字符编码
  5. # struts.locale=en_US
  6. struts.i18n.encoding=UTF-8
  7. ### 指定struts的工厂类
  8. # struts.objectFactory = spring
  9. ### 指定spring框架的装配模式
  10. ### 装配方式有: name, type, auto, and constructor (name 是默认装配模式)
  11. struts.objectFactory.spring.autoWire = name
  12. ### 该属性指定整合spring时,是否对bean进行缓存,值为true or false,默认为true.
  13. struts.objectFactory.spring.useClassCache = true
  14. ### 指定类型检查
  15. #struts.objectTypeDeterminer = tiger
  16. #struts.objectTypeDeterminer = notiger
  17. ### 该属性指定处理 MIME-type multipart/form-data,文件上传
  18. # struts.multipart.parser=cos
  19. # struts.multipart.parser=pell
  20. struts.multipart.parser=jakarta
  21. # 指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir
  22. struts.multipart.saveDir=
  23. struts.multipart.maxSize=2097152
  24. ### 加载自定义属性文件 (不要改写struts.properties!)
  25. # struts.custom.properties=application,org/apache/struts2/extension/custom
  26. ### 指定请求url与action映射器,默认为org.apache.struts2.dispatcher.mapper.DefaultActionMapper
  27. #struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
  28. ### 指定action的后缀,默认为action
  29. struts.action.extension=action
  30. ### 被 FilterDispatcher使用
  31. ### 如果为 true 则通过jar文件提供静态内容服务.
  32. ### 如果为 false 则静态内容必须位于 <context_path>/struts
  33. struts.serve.static=true
  34. ### 被 FilterDispatcher使用
  35. ### 指定浏览器是否缓存静态内容,测试阶段设置为false,发布阶段设置为true.
  36. struts.serve.static.browserCache=true
  37. ### 设置是否支持动态方法调用,true为支持,false不支持.
  38. struts.enable.DynamicMethodInvocation = true
  39. ### 设置是否可以在action中使用斜线,默认为false不可以,想使用需设置为true.
  40. struts.enable.SlashesInActionNames = false
  41. ### 是否允许使用表达式语法,默认为true.
  42. struts.tag.altSyntax=true
  43. ### 设置当struts.xml文件改动时,是否重新加载.
  44. ### - struts.configuration.xml.reload = true
  45. ### 设置struts是否为开发模式,默认为false,测试阶段一般设为true.
  46. struts.devMode = false
  47. ### 设置是否每次请求,都重新加载资源文件,默认值为false.
  48. struts.i18n.reload=false
  49. ###标准的UI主题
  50. ### 默认的UI主题为xhtml,可以为simple,xhtml或ajax
  51. struts.ui.theme=xhtml
  52. ###模板目录
  53. struts.ui.templateDir=template
  54. #设置模板类型. 可以为 ftl, vm, or jsp
  55. struts.ui.templateSuffix=ftl
  56. ###定位velocity.properties 文件. 默认 velocity.properties
  57. struts.velocity.configfile = velocity.properties
  58. ### 设置velocity的context.
  59. struts.velocity.contexts =
  60. ### 定位toolbox.
  61. struts.velocity.toolboxlocation=
  62. ### 指定web应用的端口.
  63. struts.url.http.port = 80
  64. ### 指定加密端口
  65. struts.url.https.port = 443
  66. ### 设置生成url时,是否包含参数.值可以为: none, get or all
  67. struts.url.includeParams = get
  68. ### 设置要加载的国际化资源文件,以逗号分隔.
  69. # struts.custom.i18n.resources=testmessages,testmessages2
  70. ### 对于一些web应用服务器不能处理HttpServletRequest.getParameterMap()
  71. ### 像 WebLogic, Orion, and OC4J等,须设置成true,默认为false.
  72. struts.dispatcher.parametersWorkaround = false
  73. ### 指定freemarker管理器
  74. #struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
  75. ### 设置是否对freemarker的模板设置缓存
  76. ### 效果相当于把template拷贝到 WEB_APP/templates.
  77. struts.freemarker.templatesCache=false
  78. ### 通常不需要修改此属性.
  79. struts.freemarker.wrapper.altMap=true
  80. ### 指定xslt result是否使用样式表缓存.开发阶段设为true,发布阶段设为false.
  81. struts.xslt.nocache=false
  82. ### 设置struts自动加载的文件列表.
  83. struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
  84. ### 设定是否一直在最后一个slash之前的任何位置选定namespace.
  85. struts.mapper.alwaysSelectFullNamespace=false

2.5 web.xml

配置struts2的核心过滤器和spring的加载器。
这里针对struts2相关配置作介绍。

  1. <!-- Struts2核心过滤器 -->
  2. <filter>
  3. <filter-name>struts2</filter-name>
  4. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  5. <!-- 指定action所在包路径 -->
  6. <init-param>
  7. <param-name>actionPackages</param-name>
  8. <param-value>com.topvision</param-value>
  9. </init-param>
  10. <!-- 指定struts.xml文件路径,默认classpath下 -->
  11. <init-param>
  12. <param-name>filterConfig</param-name>
  13. <param-value>classpath:struts.xml</param-value>
  14. </init-param>
  15. </filter>
  16. <!-- 设置url过滤 -->
  17. <filter-mapping>
  18. <filter-name>struts2</filter-name>
  19. <url-pattern>/*</url-pattern>
  20. </filter-mapping>
  21. <!-- 编码 -->
  22. <filter>
  23. <filter-name>encodingFilter</filter-name>
  24. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  25. <init-param>
  26. <param-name>encoding</param-name>
  27. <param-value>UTF-8</param-value>
  28. </init-param>
  29. </filter>
  30. <filter-mapping>
  31. <filter-name>encodingFilter</filter-name>
  32. <url-pattern>/*</url-pattern>
  33. </filter-mapping>
  34. <!-- 404错误跳转 -->
  35. <error-page>
  36. <error-code>404</error-code>
  37. <location>/error.jsp?code=404</location>
  38. </error-page>
  39. <!-- 首页设置 -->
  40. <welcome-file-list>
  41. <welcome-file>index.html</welcome-file>
  42. <welcome-file>index.htm</welcome-file>
  43. <welcome-file>index.jsp</welcome-file>
  44. <welcome-file>default.html</welcome-file>
  45. <welcome-file>default.htm</welcome-file>
  46. <welcome-file>default.jsp</welcome-file>
  47. </welcome-file-list>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注