`
YiSingQ
  • 浏览: 88420 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Struts2 ZeroConfig

阅读更多

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-config-browser-plugin-2.3.28-hjx20200915.jar

    默认的struts2-config-browser-plugin包中的ftl文件include标签路径用的相对路径,会找到包内的include文件,将包内ftl里include的路径改成的/开头的全路径。

    struts2-config-browser-plugin-2.1.8.1.jar

    struts2-config-browser-plugin-2.1.8.1.jar

    struts2-config-browser-plugin-2.3.20.zip

    而"struts2-config-browser-plugin-2.3.20.zip"是一个Struts2框架的插件包,主要用于增强Struts2应用的配置管理能力。这个插件的主要功能是提供一个可视化的配置浏览器,帮助开发者更方便地浏览和管理Struts2应用的...

    struts2-config-browser-plugin-2.2.3.jar

    struts2-config-browser-plugin-2.2.3.jar

    struts-config.xml struts标准配置文件 struts-config

    struts-config.xml struts标准配置文件 struts-config

    Struts框架中struts-config.xml文件配置小结

    ### Struts框架中struts-config.xml文件配置详解 #### 一、引言 在Java Web开发领域,Struts是一个非常重要的MVC(Model-View-Controller)框架,它极大地简化了Web应用程序的开发过程。而在Struts框架中,`struts...

    Struts struts-config.xml配置

    ### Struts struts-config.xml配置详解 #### 一、引言 在Java Web开发领域,Struts框架一直是构建MVC架构应用的重要工具之一。而`struts-config.xml`配置文件则是Struts应用的核心配置文件,它负责管理Struts应用中...

    Struts1.3和config配置详解

    Struts1.3是Apache软件基金会的一个开源框架,主要用于构建基于Java EE的Web应用程序。...同时,持续学习和实践Struts1.x的相关知识,对于理解和掌握其他MVC框架,如Spring MVC或Struts2,也会有极大的帮助。

    struts-config详解

    Struts-config详解 Struts-config.xml 是Struts框架的核心配置文件,它描述了所有的Struts组件。在这个文件中,我们可以配置主要的组件及次要的组件。下面是struts-config.xml文件的主要元素: 一、struts-config....

    配置struts--config.xml详解

    在 Struts 应用程序中,`struts-config.xml` 文件是核心配置文件,它定义了应用的行为、控制器(Actions)、数据源(Form Beans)以及视图(JSP 页面)之间的关系。本文将深入探讨 `struts-config.xml` 的主要元素和...

    struts-config.xml

    `struts-config.xml`是Struts框架的核心配置文件,它定义了应用的各个组件及其交互方式。下面将详细介绍这个配置文件的主要元素和子元素。 ### 主要元素 1. **`&lt;data-sources&gt;`**: 这个元素用于配置数据源,通常...

    Struts2-3.24集合jar

    struts2-config-browser-plugin-2.3.24.jar, struts2-core-2.3.24.jar, struts2-jasperreports-plugin-2.3.24.jar, struts2-jfreechart-plugin-2.3.24.jar, struts2-pell-multipart-plugin-2.3.24.jar, struts2-...

    struts2-config-browser-plugin-2.1.6.jar

    struts2-config-browser-plugin-2.1.6.jar

    Struts2开发常用jar包

    2.5.10.1.jar,struts2-config-browser-plugin-2.5.10.1.jar,struts2-convention-plugin-2.5.10.1.jar,struts2-dwr-plugin-2.5.10.1.jar,struts2-embeddedjsp-plugin-2.5.10.1.jar,struts2-gxp-plugin-2.5.10.1....

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    STRUTS2:零配置插件CodeBehind

    本文将详细介绍Struts2中的两个插件——Zero Config(零配置)与CodeBehind,以及它们如何共同工作以减少配置文件的复杂度。 #### 二、Zero Config插件介绍 Zero Config插件的主要目的是减少甚至消除`struts.xml`...

    struts-config配置文件详解

    struts-config配置文件详解

    Struts2视频教程

    ### Struts2核心知识点解析 #### 一、Struts2框架概述 - **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,...

Global site tag (gtag.js) - Google Analytics