Struts2是一个强大的MVC框架,其核心配置文件是`struts.xml`,它负责定义Action、拦截器、结果类型等关键组件。让我们深入探讨一下`struts.xml`的详细配置。
**namespace属性**
`namespace`属性是用于定义包的命名空间。命名空间在Struts2中起到路由的作用,它允许你将不同的Action分组到不同的URL路径下,避免Action名称冲突。如果未指定`namespace`,默认值为空字符串`""`,这意味着Action将响应根路径下的请求。
**struts-default包**
`struts-default`包是Struts2框架内置的一个特殊包,它包含了Struts2许多核心功能的默认配置,比如内置拦截器和Result类型。例如,`params`拦截器用于从请求中提取参数并注入到Action中,`chain` Result类型用于转发到另一个Action。为了让Action能够使用这些内置功能,你需要让自定义的包继承`struts-default`包。`struts-default.xml`配置文件位于`struts2-core-2.x.x.jar`中,框架启动时会自动加载。
**abstract属性**
`abstract="true"`可以将包定义为抽象包,抽象包不能包含Action,但可以被其他包继承,作为基础配置。继承抽象包的包可以复用其配置,同时添加自己的Action和特定配置。
**Action配置**
在`struts.xml`中,Action配置包括定义Action类、Action名称、Action的执行方法以及结果映射。Action类是业务逻辑的载体,可以使用三种方式编写:传统Action、POJO Action和注解Action。Action中的数据传递通常是通过Action实例的成员变量进行,这些变量可以自动绑定来自请求参数的值。
**访问Servlet环境对象**
在Action中,可以通过`ActionContext`来访问Servlet环境对象,如`HttpServletRequest`、`HttpServletResponse`以及`ServletContext`,从而获取或设置请求、响应及应用级的信息。
**动态调用Action方法**
通过`execute`方法的返回值,Struts2可以动态调用下一个Action。返回一个字符串,这个字符串与结果类型映射,决定调用哪个方法或跳转到哪个页面。
**使用通配符定义Action**
使用通配符`*`可以定义一组Action,比如`<action name="save*">`可以匹配到`saveUser`、`saveProduct`等Action,这样可以减少配置量。
**为Action的属性注入值**
Struts2提供了丰富的拦截器,如`params`拦截器,它可以自动将请求参数注入到Action的属性中。此外,还可以使用`<action>`元素的`<param>`子元素手动指定参数值。
**Action的结果类型详解**
Action的结果类型决定了请求处理后的跳转路径,常见的结果类型有`dispatcher`(转发到JSP或其他视图)、`redirect`(重定向到新的URL)、`stream`(流式结果,如下载文件)等。结果类型可以在`struts.xml`中全局定义,也可以在Action级别局部定义。
**Struts2框架启动**
Struts2框架通过`FilterDispatcher`(在Struts2较旧版本中)或`StrutsPrepareAndExecuteFilter`(在新版本中)过滤器启动。在`web.xml`中配置这个过滤器,并将所有请求映射给它。过滤器启动后,会读取`struts.xml`文件并将其内容加载到内存中,后续的请求处理都将基于这些内存中的配置。
`struts.xml`是Struts2框架的核心配置文件,它定义了Action的结构、行为以及与请求的交互方式。通过精细配置`namespace`、继承`struts-default`包、定义抽象包以及其他特性,可以构建出灵活且易于维护的MVC架构。理解并熟练掌握这些配置,将有助于提升Struts2应用的开发效率和质量。