本文还有配套的精品资源,点击获取
简介:Struts 2.0是一个广泛使用的Java Web框架,基于MVC设计模式,简化了Web应用开发流程。它包含多个关键组件,如Action类、配置文件、拦截器、OGNL表达式语言等,支持国际化、异常处理和Ajax集成。开发者可以通过继承ActionSupport类实现业务逻辑,并利用配置文件定义Action映射和拦截器链。Struts 2.0还支持注解配置,提高了开发效率和代码质量,适用于需要构建可扩展、易维护的Java应用程序的场景。本课程将深入讲解Struts 2.0核心包的使用,帮助学生掌握框架的核心概念和实战技巧。
Struts 2.0 是一个用于构建Web应用程序的开源框架,它是著名的Struts框架的后续版本,继承了MVC(模型-视图-控制器)设计模式的精神。通过清晰的分层架构,它简化了复杂的用户界面和业务逻辑之间的交互。Struts 2.0的出现,为Java开发者提供了一个更为灵活和强大的选择,使得Web开发更为高效和可维护。
MVC设计模式将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。模型代表了应用程序的数据结构,视图负责显示数据,控制器则处理输入并更新模型和视图。这种模式的优点在于,它能够将数据逻辑与展示逻辑分离,使得代码更加清晰且易于维护。Struts 2.0框架天然支持MVC设计模式,它通过Action类来充当控制器的角色,视图则依赖于JSP或其他模板技术,而模型则通常由普通的JavaBean或者POJO(Plain Old Java Object)来实现。
与传统的MVC框架相比,Struts 2.0提供了一些独特的优势。首先,它支持拦截器(Interceptor)机制,这为开发者提供了强大的功能,比如日志记录、权限检查、数据验证等,可以在请求处理的不同阶段进行拦截和处理。其次,Struts 2.0引入了OGNL(Object-Graph Navigation Language),允许开发者以简单的方式访问对象图,并且这种语言比传统的EL表达式更加灵活和强大。最后,Struts 2.0也支持与Spring框架的集成,使得开发者能够在同一个项目中利用两种框架的优势,为开发提供了极大的灵活性。
Action类在Struts 2框架中扮演着控制器的角色,它负责接收用户的请求并调用相应的业务逻辑方法,最后将结果返回给客户端。与传统的MVC框架中的控制器有所不同,Struts 2的Action类更偏向于服务层的职责,因为它并不直接操作视图层,而是通过返回的结果集来通知视图层如何渲染页面。
Action类的特点在于它将用户的请求处理逻辑封装起来,这使得代码更加模块化、易于管理和维护。它通常包括以下职责:
Action类通常不需要继承特定的类,但它们需要实现 Action
接口或继承 ActionSupport
类,后者提供了许多默认的实现和便利方法,例如国际化消息处理、类型转换和验证功能。
Struts 2.0通过拦截器和值栈技术来实现Action类与业务逻辑的绑定。值栈提供了一个数据共享的空间,用于在Action类和其他组件之间传递数据。而拦截器则负责处理请求的生命周期和调用相应的Action方法。
绑定方式主要依赖于以下几个核心概念:
一个典型的Action类绑定过程是这样的:
execute
方法(或其他命名方法)。 execute
方法执行业务逻辑,并决定返回结果。 Action类的生命周期从一个HTTP请求的开始到结束,主要分为以下几个关键点:
execute
方法来执行业务逻辑。 整个生命周期中,Action类的实例在每次请求时都会被创建,并在请求结束时被销毁。这保证了Action类的状态不会在请求间发生干扰。
尽管Action类的实例在每次请求后都会被销毁,但在某些情况下,开发者可能需要保持状态信息,例如用户会话信息或请求范围的数据。这可以通过多种方式实现:
在实现状态管理时,应注意以下几点:
数据封装和传递是Action类的基本任务之一。Struts 2通过OGNL实现了一个灵活且强大的数据交互机制,OGNL可以轻松访问和操作Action的属性。
基本数据封装与传递的方法包括:
在Web应用开发中,数据验证是保证数据质量的重要环节。Struts 2提供了一套内建的验证框架,使得数据验证变得简单而强大。
数据验证的实现方法包括:
@Validation
注解来指定验证规则。 struts.xml
中定义验证规则或使用 validate.xml
文件来实现验证。 错误处理技巧:
public class UserAction extends ActionSupport {
private String username;
private String password;
private List errors;
// Getter and setters
public String execute() {
// ...业务逻辑...
if (/* some validation check */) {
addFieldError("username", getText("error.username.exists"));
return INPUT;
}
return SUCCESS;
}
}
在上述代码中, addFieldError
方法用于添加字段级别的错误,这将使得在JSP页面上可以根据字段错误进行特别的显示处理。
Struts 2.0配置文件是整个框架配置的核心,它定义了Struts应用程序的运行方式,包括如何处理请求、映射URL到Action类以及配置拦截器等。配置文件通常以XML格式编写,位于项目的 src/main/resources
目录下的 struts.xml
文件中。
配置文件的核心元素包括
根元素、
元素、
元素、
元素、
元素和
元素等。
是根元素,它包含其他所有配置元素,如
,
,
,
, 等。
元素用于设置Struts2框架中使用的常量值,如日志级别、请求处理超时时间等。
元素是
和
的容器,它定义了一组Action的逻辑分组。
元素将一个请求映射到一个具体的Action类。
元素定义了一个拦截器,可以在请求处理之前或之后执行特定任务。
元素定义了一个Action执行后跳转到的结果页面或视图。 Struts 2.0配置文件支持继承和覆盖机制,允许开发者将通用配置抽取到一个父
中,子
可以继承父
的配置,并通过 extends
属性指定其父
。
例如,你可以创建一个基础包 base-package
用于存放通用设置,然后其他包可以通过 extends="base-package"
继承这些设置。
/success.jsp
/error.jsp
在上述配置中, my-module
包继承了 base-package
包的配置,同时添加了特定的Action映射。
全局配置是指影响整个Struts应用程序的配置,它通常定义在
元素之外或在根
元素中。全局配置适用于整个应用,除非在子包中被局部覆盖。
全局配置的一个常见用途是定义拦截器堆栈(interceptor stack),拦截器堆栈是一组拦截器的集合,它们可以被多个Action共享。定义全局拦截器堆栈可以简化Action的配置。
局部配置是指仅对特定包或Action有效的配置。局部配置可以覆盖全局配置,提供灵活的定制能力。局部配置的优先级高于全局配置,确保了配置的灵活性和细粒度控制。
例如,你可以为特定包配置不同的拦截器或结果页面。
/exampleSuccess.jsp
在上述配置中, my-module
包使用了自定义的拦截器堆栈 customStack
,并定义了特定的结果页面 exampleSuccess.jsp
。这些配置只在 my-module
包内有效,不会影响到其他包。
在进行配置时,应当注意以下几点:
通过这种方式,Struts 2.0允许开发者以灵活的方式定制和优化应用程序的行为,以满足特定需求。
拦截器(Interceptor)是Struts 2.0框架中的一个重要特性,它为开发者提供了一种灵活的机制来干预和修改Action的生命周期。通过拦截器,开发者可以在请求处理之前或之后插入自定义的处理逻辑,这使得代码更加模块化,有利于维护和重用。本章节将深入探讨拦截器的基础知识、自定义拦截器的创建过程以及在实际开发中的应用场景。
拦截器在Struts 2.0框架中扮演着至关重要的角色。它本质上是一个实现了 Interceptor
接口的对象,能够在一个请求被处理之前或之后执行特定的逻辑。拦截器的工作原理和生命周期是理解其核心功能的基础。
拦截器的工作原理与AOP(面向切面编程)的概念类似,它可以在方法执行前后添加额外的行为。Struts 2.0框架将请求传递给拦截器链,拦截器链按照定义的顺序处理请求,然后将请求传递给目标Action进行处理。处理完之后,响应沿着同样的链返回。
拦截器的生命周期包括以下几个步骤:
init
方法进行初始化。开发者可以在这个方法中进行资源的加载或初始化配置。 intercept
方法。这个方法决定了拦截器是否继续将请求传递给后续的拦截器或Action。 destroy
方法进行清理工作。 Struts 2.0框架提供了一系列的标准拦截器,它们被分为核心拦截器和用户拦截器。核心拦截器通常负责处理框架的基础设施任务,例如处理输入验证、文件上传、参数绑定等。用户拦截器则用于执行开发者自定义的逻辑,如安全检查、日志记录、性能监控等。
核心拦截器的一个常见例子是 ValidationInterceptor
,它在Action方法执行前调用验证器进行输入验证。 ParamsInterceptor
则负责将请求参数绑定到Action对象。
自定义拦截器允许开发者根据特定的业务需求来扩展或修改框架的行为。创建自定义拦截器的过程涉及实现拦截器接口并定义拦截器逻辑。下面将详细介绍自定义拦截器的创建步骤以及在实际项目中的应用实例。
实现拦截器接口:首先,需要实现 com.opensymphony.xwork2.interceptor.Interceptor
接口。通常,为了简便,可以继承 com.opensymphony.xwork2.interceptor.AbstractInterceptor
基类,这样只需实现 intercept
方法。 java public class MyCustomInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { // 自定义逻辑 return invocation.invoke(); } }
配置拦截器:在Struts 2.0的配置文件( struts.xml
)中注册并配置拦截器。这包括为拦截器指定一个名称,并定义其属性(如果需要的话)。 xml
将拦截器添加到拦截器栈:定义拦截器栈,并将自定义拦截器添加到栈中。如果需要,还可以添加框架提供的标准拦截器。 xml
在Action配置中应用拦截器栈:最后,将定义好的拦截器栈应用到具体的Action中。 xml
自定义拦截器可以在Action执行前或执行后执行特定的业务逻辑,例如:
以下是一个简单的安全检查拦截器实例:
public class SecurityInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 获取用户信息,例如从session中
UserInfo user = (UserInfo) ServletActionContext.getRequest().getSession().getAttribute("user");
// 检查用户是否登录以及权限是否足够
if (user == null || !user.hasAccess(invocation.getAction().getClass())) {
// 如果用户未登录或权限不足,抛出异常或重定向到登录页面
return "login";
}
// 如果用户认证通过,则继续请求处理流程
return invocation.invoke();
}
}
配置文件和Action配置保持不变,只需要在 struts.xml
中添加该拦截器的声明,并在栈中引用即可。
以上内容详细介绍了拦截器在Struts 2.0框架中的作用和应用,包括拦截器的工作原理、标准拦截器的分类与作用,以及创建自定义拦截器的步骤和实例。通过实际操作,可以更好地理解拦截器的工作流程和在项目中的具体应用。
OGNL(Object-Graph Navigation Language)是Struts 2.0中用于访问和操作对象图的表达式语言。它能够让我们以非常简洁的方式获取和设置对象的属性,甚至执行更复杂的操作。
OGNL的语法类似于EL表达式,但功能更为强大。OGNL支持直接访问对象属性、调用方法、访问静态方法和属性、以及支持集合操作等。
// 假设有一个User对象实例在值栈中
User user = new User();
user.setName("John");
user.setAge(30);
ActionContext.getContext().put("user", user);
在JSP页面,你可以使用OGNL访问这些值:
${user.name} // 输出 "John"
${user.age + 1} // 输出 "31"
${user.name.length()} // 输出 "4"
OGNL还可以用于类型转换、参数传递和执行简单的数据处理:
// 在Action中使用OGNL访问值栈中的值
String userName = (String) ActionContext.getContext().get("user.name");
// 在JSP页面执行更复杂的操作
${user.addresses[0].street}
${user.friends.?[age gt 25].size()}
Struts 2.0允许开发者根据实际需要选择和自定义Result类型,以控制Web应用的流程。
Struts 2.0提供了多种Result类型,如 dispatcher
、 redirect
、 redirectAction
、 chain
等。针对不同的需求,开发者可以选择合适的Result类型。
/success.jsp
***
流程控制可以通过Action类中的逻辑判断实现,也可以利用Struts 2.0的拦截器栈进行控制。例如,在Action中执行条件判断并返回不同的结果:
if (condition) {
return SUCCESS;
} else {
return ERROR;
}
Tiles是Apache的一个模板引擎,可以用来实现JSP页面的布局管理。
Tiles框架允许开发者将页面分割成多个部分,每个部分可以单独设计和修改,提高页面的可维护性。
在实际应用中,可以通过定义多个Tiles模板来整合Struts 2.0应用:
baseLayout
异常处理和国际化是构建Web应用时不可或缺的两个方面。
Struts 2.0中可以通过配置全局异常处理器来处理异常,并通过日志记录异常信息。
在Action中记录日志:
try {
// business logic
} catch (Exception e) {
LOG.error("Error in processing action", e);
throw new Exception(e);
}
Struts 2.0支持国际化/本地化,开发者可以通过配置资源文件来实现。
在JSP页面引用国际化资源:
${getText('greeting')}
Ajax技术与Struts 2.0结合,可以为Web应用提供更加动态和交互式的用户体验。
Ajax集成可以通过Struts 2.0的拦截器完成,例如使用 ajax/json
拦截器来处理Ajax请求:
true
json-plugin插件可以简化JSON数据的处理,开发者可以通过配置拦截器栈来使用它:
never
注解配置为Struts 2.0提供了更加轻量级和便捷的配置方式。
注解配置可以简化Action的配置,但过度使用可能会使代码难以阅读和维护。
@Action(value="example", results={
@Result(name="success", type="dispatcher", location="success.jsp")
})
public class ExampleAction {
// Action implementation
}
在实际项目中,注解配置可以用于快速原型开发,但随着项目复杂度的增加,可能需要转向XML配置以保持清晰。
public class UserAction extends ActionSupport {
private String username;
private String password;
@Action(value = "login", results = {
@Result(name = "success", type = "dispatcher", location = "/welcome.jsp")
})
public String execute() {
// login logic
return SUCCESS;
}
}
以上是对Struts 2.0核心包的实战应用技巧的详细介绍。开发者在使用时应该根据项目的具体需求选择合适的技术方案,并在实践中不断优化和调整。
本文还有配套的精品资源,点击获取
简介:Struts 2.0是一个广泛使用的Java Web框架,基于MVC设计模式,简化了Web应用开发流程。它包含多个关键组件,如Action类、配置文件、拦截器、OGNL表达式语言等,支持国际化、异常处理和Ajax集成。开发者可以通过继承ActionSupport类实现业务逻辑,并利用配置文件定义Action映射和拦截器链。Struts 2.0还支持注解配置,提高了开发效率和代码质量,适用于需要构建可扩展、易维护的Java应用程序的场景。本课程将深入讲解Struts 2.0核心包的使用,帮助学生掌握框架的核心概念和实战技巧。
本文还有配套的精品资源,点击获取