当客户端请求与action的name相匹配时,框架会使用struts.xml文件中的映射来处理请求.通常指向action的映射是由标签生成的.action标签(在struts.xml文件的struts根节点中)通过name,框架提供的默认扩展和其它必须的信息来指定action.
Handler类的默认进入方法是由Action接口定义的.
Struts2 Action接口 :
所有的Action可能会实现这个拥有execute()方法的接口.你可以随意创建POJO来维护相同的由这个接口定义的契约而不需确实实现这个接口.
Java代码
package com.opensymphony.xwork2;
public interface Action {
//The action execution was a failure.
public final static String ERROR;
//The action execution require more input in order to succeed
public final static String INPUT;
//The action could not execute, since the user most was not logged in
public final static String LOGIN;
// The action execution was successful but do not show a view.
public final static String NONE;
//The action execution was successful.
public final static String SUCCESS;
//the logic of the action is implemented
public String execute() throws Exception;
}
package com.opensymphony.xwork2;
public interface Action {
//The action execution was a failure.
public final static String ERROR;
//The action execution require more input in order to succeed
public final static String INPUT;
//The action could not execute, since the user most was not logged in
public final static String LOGIN;
// The action execution was successful but do not show a view.
public final static String NONE;
//The action execution was successful.
public final static String SUCCESS;
//the logic of the action is implemented
public String execute() throws Exception;
}
实现Action接口是可选的.如果Action没有被实现,框架会调用反射来寻找execute()方法.如果没有execute()方法并且没有其它方法在配置文件中被指定,框架会抛出异常.
Struts2引入了一个简单的实现使得Action类很接近POJO(简单Java旧对象).一个Action最基本的使用方法就是在工作时始终有一个单一的结果被返回,就像这样 :
Java代码
public class NewAction {
public String execute() throws Exception {
// do the work
return "success";
}
}
public class NewAction {
public String execute() throws Exception {
// do the work
return "success";
}
}
注意这里Action类并没有继承任何类或接口.一个Action执行时调用的方法就是"execute"方法."execute"没有任何参数且返回一个String对象.然而在Struts2中如果你使用了helper接口(Helper提供了常用的常量结果像是"success", "none", "error", "input"和"login"),你就能得到不同的返回类型而不仅仅是String对象.
Action类经常起着模块的作用,并依据请求对象和输入的参数来执行指定的业务逻辑.在早期的Struts版本中(早于Struts2.0),一个Action类应该继承org.apache.struts.Action,并且需要重写含有4个参数的Action.execute()方法.
基本上,Action意味着处理若干对象像HttpServletRequest, HttpServletResponse.但在这,我们的Action没有处理任何对象参数.这就产生了一个重要的问题,你是如何访问你想要用来工作的对象的.答案就在于"控制反转"或"依赖注入"模式.
为了提供一个松耦合的体系,Struts2用了一种叫依赖注入或叫控制反转的技术.依赖注入可以由构造器注入,接口注入,setter注入来实现.Struts2使用setter注入.这就意味着要在Action中使用对象,我们仅需提供一个setter方法.同样有些对象如HttpServletRequest可以通过访问ActionContext或实现ServletRequestAware来获得.首选继承ServletRequestAware.任何与业务无关的对象都有一个相对应的Action需要实现的接口(就是aware接口)
为了更好的理解反转控制,让我们看个处理Action请求访问当前请求HttpServletRequest对象的例子.在这个例子中依赖注入的途径是接口注入.通过名称的暗示,我们知道使用接口注入必须要有个接口被实现.该接口包含setter方法,用来向Action提供数据.在我们的例子中我们使用ServletRequestAware接口,就是这个 :
Java代码
public interface ServletRequestAware {
public void setServletRequest(HttpServletRequest request);
}
public interface ServletRequestAware {
public void setServletRequest(HttpServletRequest request);
}
当我们实现这个接口时,我们简单的Action得到了一点点修改,但是现在我们有了一个HttpServerRequest对象可以使用.
Java代码
ublic class NewAction implements addDependency {
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String execute() throws Exception {
// do the work using the request
return "SUCCESS";
}
}
ublic class NewAction implements addDependency {
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String execute() throws Exception {
// do the work using the request
return "SUCCESS";
}
}
在Struts2中,任意请求都会创建一个Action的实例.它不是共享的,在请求完成是,它会被丢弃.
Action映射
Action映射可以指定一系列结果类型,一系列例外处理程序和拦截器栈.但只有name属性是必须的.其它属性都可以在package作用域中得到.通过struts.xml文件指定.
这个Action的配置文件就像这样 :
Xml代码
<action name="new" class="NewAction" >
<result>view.jsp</result>
</action>
<action name="new" class="NewAction" >
<result>view.jsp</result>
</action>
name属性以new.action的形式提供URL信息来调用Action.扩展名.action是在struts.properties中配置的.class属性提供了调用的Action的名字和所在包的全名.
Struts2像处理POJO一样处理Action,而且允许返回不同的结果----这取决于逻辑的结果.想要得到不同结果,类应该这样修改 :
Java代码
class NewAction
{
public String execute() throws Exception
{
if (its-ok())
{
return "login";
}
else
{
return "none";
}
}
}
class NewAction
{
public String execute() throws Exception
{
if (its-ok())
{
return "login";
}
else
{
return "none";
}
}
}
现在类提供了两个不同的结果,我们需要在struts.xml中为每一种情况配置action标签.像这样修改配置 :
Xml代码
<action name="new" class="NewAction" >
<result>login.jsp</result>
<result name="none">none.jsp</result>
</action>
分享到:
相关推荐
### Struts2中的struts.properties配置详解 在Struts2框架中,`struts.properties`文件扮演着极其重要的角色,它用于定义各种配置项来控制框架的行为。下面将详细介绍该文件中的一些关键配置项。 #### struts....
struts2 chm 程序包 org.apache.struts2 接口概要 接口 说明 StrutsStatics Constants used by Struts. 类概要 类 说明 RequestUtils Request handling utility class. ServletActionContext Web-specific ...
通过上述介绍,我们可以看到Struts2框架在配置、Action定义、结果处理和异常管理等方面的强大功能,这对于初学者来说是一个非常好的学习资源。掌握Struts2不仅可以提升个人的技术水平,还能帮助开发者更高效地构建...
在Struts2中,`struts.xml`是核心配置文件,它是整个应用的入口点,负责定义动作(Actions)、结果(Results)、拦截器(Interceptors)等关键元素。让我们深入探讨一下`struts.xml`的基本配置: 1. **Action配置**...
StrutsActions是Apache Struts框架的核心组成部分,它定义了用户交互与业务逻辑之间的桥梁。Struts是一个开源的Java EE Web应用程序框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户接口、处理...
5. struts.continuations.package:这是一个包名,包含使用Rife continuations的actions。 6. struts.custom.i18n.resources:这是一个附加的国际化属性文件路径,Struts2将加载这个文件中的国际化信息。 7. ...
创建一个名为`UploadAction`的类,该类需要继承`org.apache.struts2.actions.FileUploadAction`,并在其中定义一个`List<File>`类型的属性,用于接收上传的文件。 ```java public class UploadAction extends ...
- `org.apache.struts.actions`:提供特定适配器,将HTTP请求转化为业务处理。 - `org.apache.struts.config`:解析并管理`struts-config.xml`配置文件。 - `org.apache.struts.util`:提供实用工具类,如连接池和...
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、高效且易于维护的Web应用。这个框架基于MVC(Model-View-Controller)设计模式,为开发者提供了丰富的功能来处理请求、业务逻辑和视图展示。在本文...
#### 一、Struts2 Convention 插件介绍与使用 在 Struts2 框架的发展过程中,随着版本的更新和技术的演进,其配置方式也发生了变化。从 Struts2.1 版本开始,官方不再推荐使用 Codebehind 作为零配置插件,而是转向...
### Struts2配置详解 #### 一、总览 在深入了解Struts2配置文件之前,我们首先需要了解其整体架构。Struts2的核心配置文件通常采用XML格式,并且具有非常清晰的结构。此配置文件主要负责定义应用的行为、组件以及...
本文将详细介绍Struts2的核心配置文件及其元素。 首先,我们来看一下Struts2的主要配置文件: 1. **web.xml**: 这是Web应用程序的部署描述符,包含所有必要的框架组件配置。Struts2会在这里注册过滤器,如`...
首先,`struts.xml`是Struts2框架的主要配置文件,它定义了动作(Actions)、结果(Results)、拦截器(Interceptors)等核心组件。以下是一些关键概念的解释: 1. **动作(Actions)**:在Struts2中,一个动作通常...
### Struts2注解详细说明 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种构建企业级Java Web应用的解决方案。自Struts2.1版本开始,引入了一个重要的插件——Convention Plugin,该...
Struts2是Java Web开发中一个非常流行的MVC框架,它极大地简化了Web应用程序的构建。在使用Struts2进行开发时,遵循一套规范对于代码的可读性、可维护性和团队协作至关重要。以下是对"Struts2命名规范"的详细解释: ...
本教程将介绍如何使用Struts2搭建一个简单的JavaWeb后台,包括创建一个名为"login"的Action,该Action能够处理用户请求,并返回JSON格式的数据。我们将使用Gson库来实现JSON的序列化和反序列化。 首先,我们需要...
源码的提供使得读者能够深入理解Struts 2的工作原理,并有机会亲手实践书中所介绍的各种技术。 Struts 2是Java企业级应用开发中的一个关键框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建...
7. **Action(Actions)**:`org.apache.struts2.dispatcher.ng.executors`包下的`ActionExecutor`接口定义了如何执行Action,而`ActionInvocation`则封装了Action的执行流程。 8. **请求处理(Request Handling)*...