Zero Config能根据web.xml中配置的actionPackages自动扫描所有Action类,并猜测其NameSpace.
再利用CodeBehind猜测Result指向的jsp,实现了struts.xml的零配置(其实也不是完全没有struts.xml,
而是指struts.xml的内容不会随action的增加而膨胀)
如果有特殊的结果指向(如redirect类型的结果),在Action处用@Result配置。
如有package级的配置(如使用非默认的Interceptor栈),仍在struts.xml中定义package,用@ParentPackage指定。
不过,目前ZeroConfig的Annotation较少,只有@Result、@ParentPackage,@NameSpace(java的package名不符合约定规则时使用),
还有exception-Mapping之类的配置没有包含。
1.ZeroConfig
在Web.xml 中设置ActionPackages ,则 Struts2会自动扫描这些Package下的Class,Class名含Action或扩展子ActionSupport的类都将被载入。
其中actionPackages的设置很有学问,比如 cn.com.sise.expert.web, 则cn.com.sise.expert.web.user.RoleAction,
访问路径就会被自动的猜测为 /user/role.action
如果package名不符合这个规则,就需要自行设定NameSpace了,可以用Namespace annotation。
又或者用ParentPackage annotation指定package,再在struts.xml中定义package的namespace.
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>cn.com.sise.expert.web</param-value>
</init-param>
</filter>
@Results({
@Result(name=CRUDActionSupport.RELOAD, value="role", type=ServletActionRedirectResult.class)
})
public class RoleAction
在Action类中,用Annotation 对特殊的RELOAD返回值进行了注释,其余的results就交给code-behind去猜了。
2.CodeBehind
指定JSP的默认目录在/WEB-INF/jsp 下,原因就是希望保护jsp不能被直接打开,安全模块只要保护Action的地址即可
<constant name="struts.codebehind.pathPrefix" value="/WEB-INF/jsp/" />
1. 可以用 /login.action的URL 打开 /WEB-INF/jsp/login.jsp ,而LoginAction无需实际编写。
2. 对于UserAction返回return SUCCESS,默认访问/WEB-INF/jsp/user/user.jsp 或 user-success.jsp.
返回 "input" ,默认访问/WEB-INF/jsp/user/user-input.jsp
codebehind plugin是一个可以简化struts2配置的插件
code-behind在struts2里有两种表现形式:
1.Default mappings (默认映射):
比如说在项目${root}/user 目录下 有这么一个user.jsp.
我可以在地址栏里输入:http://localhost:8080/项目名称/user/user.action 来访问这个 user.jsp
这就是默认映射。
2.Default results (默认结果):其实就是无须显示的在struts-*.xml里配置那些返回 jsp, vm. ftl视图的Action。
比如说,我有一个以下配置文件, 没有result.
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="cn.com.sise.expert.user.UserAction" />
</package>
Action文件是这样的:
package cn.com.sise.expert.user;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String flag = "";
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String execute() {
if (flag == null || flag.equals("")) {
this.addActionMessage("input message");
return INPUT;
} else if (flag != null && flag.equals("error")) {
this.addActionError("error happen");
return ERROR;
} else {
this.addActionMessage("I am leo");
return SUCCESS;
}
}
}
故意设置了一个 flag 来查看结果。 通过,http://localhost:8080/项目名称/user/user.action?flag=测试值
你会发现,
INPUT 对应 http://localhost:8080/项目名称/user/user-input.jsp
ERROR 对应 http://localhost:8080/项目名称/user/user-error.jsp
SUCCESS 对应 http://localhost:8080/项目名称/user/user-success.jsp
如果user-input.jsp 或user-error.jsp 或user-success.jsp 文件不存在,直接默认为user.jsp
这就是默认结果的意思。
当然这里有一个约定,返回页面的路径为
struts.codebehind.pathPrefix + package namespace + action name + action returntype + .jsp
这里的环境:
struts.codebehind.pathPrefix = /WEB-INF/jsp/
package namespace = /
action name = user
action returntype = 为success时,值为空,为其他时,值为"-" + return type
所以返回的页面地址就为 /WEB-INF/jsp/user/user.jsp
如果return type为input,地址就为 /WEB-INF/jsp/user/user-input.jsp
其实,codebehind已经做了很多工作了,如果请求page.action,寻找对应的页面有这么一个顺序:
page.jsp
page.vm
page.ftl
直到找到为止,并不只限于jsp页面
分享到:
相关推荐
本文将详细介绍Struts2中的两个插件——Zero Config(零配置)与CodeBehind,以及它们如何共同工作以减少配置文件的复杂度。 #### 二、Zero Config插件介绍 Zero Config插件的主要目的是减少甚至消除`struts.xml`...
### Struts2配置详解 #### 一、总览 在深入了解Struts2配置文件之前,我们首先需要了解其整体架构。Struts2的核心配置文件通常采用XML格式,并且具有非常清晰的结构。此配置文件主要负责定义应用的行为、组件以及...
2. **配置文件**:`struts-config.xml`是Struts应用的核心配置文件,用于定义动作映射、数据源、国际化资源等,它告诉Struts如何处理HTTP请求并跳转到相应的Action。 3. **Action类**:每个Action类对应一个用户...
Convention Plugin是自Struts 2.1版本开始集成的一个插件,它替代了早期的CodeBehind Plugin和Zero Config插件,旨在简化开发流程并提高开发效率。 #### 二、特性概述 Convention Plugin提供了一系列基于命名约定...
`struts.xml` 利用了 ZeroConfig + CodeBehind 插件,实现了无需显式配置的约定优于配置风格。Struts2 的 Convention Plugin 自动根据包名、类名和方法名推断 Action 和结果页面,简化了配置工作。 在实际开发中,...
ActionServlet是Struts的核心,它接收HTTP请求,根据struts-config.xml配置文件转发给相应的Action,Action再调用业务逻辑处理请求,最后返回响应给用户。 【Spring框架】 Spring框架的核心是IoC容器,它管理着...
Note that this requires kde 4.11 for the config interface at least Tiling script for kwin, featuring: - A useractionmenu to selectively tile windows - Three layouts, all mouse-resizable - One layout ...