Struts2是一个开源的MVC框架,是一种轻量级的Web应用开发框架。它使用Java编写,能够帮助开发者快速开发Web应用程序。Struts2框架使用MVC设计模式,将业务逻辑、数据访问和UI分离。Struts2也提供了非常好的标签库和Interceptors,使得开发Web应用程序变得更加容易和快速。
本教程将教你如何使用Struts2开发Web应用程序。在本教程中,我们将从基础入门开始,一步步地涵盖所有Struts2的主要特性和功能。我们将探讨如何使用Struts2框架进行Web应用程序开发,并涉及到Struts2的配置和重要组件。在学完本教程后,你将能够使用Struts2框架来构建自己的Web应用程序。
下面我们开始探讨Struts2的最基础部分-如何使用Struts2框架创建Web应用程序。
第一步:配置Struts2框架
在使用Struts2框架之前,我们需要进行一些配置。Struts2使用一个名为“struts.xml”的配置文件,负责配置应用的实际行为。在这个文件中,我们定义了一个或多个逻辑控制器,每个控制器处理一部分请求。逻辑控制器与Struts2框架中的Action相关联,Action负责处理HTTP请求并返回HTTP响应。
下面是一个基本的struts.xml配置:
```xml
?xml version="1.0" encoding="UTF-8"?>
```
在这个配置文件中,我们使用包(package)元素定义了一个名为“default”的新包,并扩展了Struts自己的默认包。在包里,我们定义了一个名为“helloWorld”的新操作,并将其映射到HelloWorldAction类上。我们指定了“method”属性,告诉Struts2框架,在执行这个操作时要调用哪个方法。在这个例子中,我们调用默认的“execute”方法。最后,我们指定result元素,告诉Struts2框架在成功时要返回的视图(views)。
第二步:创建Action类
接下来,我们需要创建Action类。Action类负责处理HTTP请求并返回HTTP响应。在我们的示例中,我们要创建一个名为HelloWorldAction的Action类,用于响应我们前面定义的“helloWorld”操作。
```java
package com.tutorialspoint.struts2;
public class HelloWorldAction {
private String message;
public String execute() throws Exception {
setMessage("Hello World!");
return "success";
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
```
在这个Action类中,我们定义了一个名为“message”的属性,并为它提供了getter和setter方法。在我们的例子中,我们定义了一个名为“execute”的方法,该方法负责处理请求并返回我们的消息字符串。在这里,我们将消息字符串设置为“Hello World!”,然后返回“success”视图(views)。
第三步:定义View
最后,我们需要定义View。View负责将内容呈现给用户。在我们前面的示例中,我们已经定义了一个“success”视图,并告诉Struts2框架要将其与“helloWorld”操作相关联。
我们需要创建一个名为“success.jsp”的JSP页面,并将其放置在与我们前面定义的视图相同的位置。在这个JSP页面中,我们将使用JSP表达式(EL)来显示从Action类中传递的消息。以下是一个成功的JSP视图:
```html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
```
在我们的JSP页面中,我们为Struts2标签库定义了一个前缀(s)。我们使用Struts2标签库中的属性(property)标记来引用Action类的“message”属性。在JSP页面中,我们将使用带有[h2]标签的“message”属性来显示消息字符串。
好了,现在我们已经配置好Struts2框架,创建了HelloWorld Action类,定义了一个View,并将它们合在一起。我们不确定它是否能正常工作。所以我们要将它部署到应用程序服务器(如Tomcat,Jboss等)上,并启动应用程序服务器,可以对应用程序进行测试。
你现在可以访问部署在应用程序服务器中的应用程序,并在URL中添加以下内容:[http://localhost:8080/HelloWorld/helloWorld.action]。如果Struts2应用程序已经成功部署,你将看到“Hello World!”这个消息。
至此,我们已经完成了本教程的第一部分。现在,我们深入探讨如何使用Struts2框架进行更高级的Web应用程序开发。我们将涵盖Struts2中重要的组件,如Validators和Interceptors,以及如何使用它们来构建更高级的Web应用程序。
第四步:使用Validators
当我们开发Web应用程序时,数据验证是至关重要的。Validators是用户输入合法性验证的一种重要机制。Validators用于验证用户输入的数据是否满足特定条件,例如数据是否大于或小于某个值,是否是正确的电子邮件格式等。
Struts2框架提供了一组内置Validators,我们可以使用它们来验证用户输入。下面,我们来看一个使用Struts2 Validators的示例。
```xml
"http://struts.apache.org/dtds/struts-2.0.dtd">
name.length() <= 10
.*@tutorialspoint\.com
```
在这个示例中,我们定义了两个Validators-FieldExpression Validator和Regex Validator。FieldExpression Validator是一种基于表达式的验证方法。在这个示例中,我们检查用户的姓名是否小于或等于10个字符。Regex Validator是一种基于正则表达式的验证方法。在这个示例中,我们检查用户输入的电子邮件是否属于tutorialspoint.com域。
我们还定义了一个名为“login”的Action,此Action与LoginAction类相关联。在这个示例中,我们将定义两个结果,“success”和“error”。
现在,我们来看一下LoginAction类,该类完成实际的验证并返回响应结果。以下是一个简单的LoginAction类:
```java
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 2L;
private String name;
private String email;
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
```
在我们的LoginAction类中,我们通过继承Struts2的ActionSupport类来获得Struts2提供的基本功能。我们还定义了两个属性“name”和“email”来保存用户输入的值。注:这里name和email必须与struts.xml中Param的name属性值相同,否则会报如下错误信息:
```bash
org.apache.struts2.dispatcher.Dispatcher error SEVERE: Dispatcher initialization failed: Unable to find a validator for …
```
为了使Struts2能够使用Validators,我们必须使用Struts2提供的标签库来定义表单。Struts2标记库中的
```html
<%@ taglib prefix="s" uri="/struts-tags"%>
```
在这个JSP页面中,我们使用了Struts2的
现在我们已经学习了如何使用Validators进行数据验证。我们可以扩展这个示例以适应自己的业务需求,并使用Struts2标记库中提供的其他Validators。
第五步:使用Interceptors
Interceptors是Struts2框架中的又一个重要概念。Interceptors可以用于执行一些任务,例如记录日志、处理异常、实现事务处理等。Interceptors可以在Action被执行之前和之后运行,此外还可以将其应用于整个应用程序。
Struts2中有许多内置的Interceptors,如ExceptionInterceptor、I18nInterceptor、ValidationInterceptor等。让我们来看看一些这些内置的Interceptors。
- ExceptionInterceptor: 用于捕获并处理Action中所抛出的异常。例如,在执行业务逻辑时可能会触发异常。异常拦截器可以用来记录异常、发送警报、更新错误页面等。
- I18nInterceptor: 用于在Struts2应用程序中使用国际化(i18n)的功能。I18n Interceptor可以实现在不同语言之间方便的切换,并优雅地处理参数化消息。
- ValidationInterceptor: 用于在Action被执行之前执行Validation操作。Validation Interceptor使用Validators来验证Action中的表单数据。如果Validation失败,则将重定向回前一个页面,并显示错误消息。
下面,我们来看一个使用Interceptors的示例:
```xml
"http://struts.apache.org/dtds/struts-2.0.dtd">
```
在这个示例中,我们定义了一个名为“loggingInterceptor”的新Interceptors,并扩展了Interceptors栈(Interceptor Stack)。若要使用新的Interceptors,我们必须将此拦截器堆栈与适当的操作相关联。在我们的示例中,我们将默认Interceptors设置为“interceptorStack”及相关联的Interceptors。
对于Logging Interceptor,我们需要创建一个名为LoggingInterceptor的Java类,以实现它所需的方法。以下是LoggingInterceptor类的代码:
```java
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class LoggingInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 3L;
public String intercept(ActionInvocation invocation) throws Exception {
String className = invocation.getAction().getClass().getSimpleName();
System.out.println("Before calling method: " + className);
String result = invocation.invoke();
System.out.println("After calling method: " + className);
return result;
}
}
```
在这个LoggingInterceptor类中,我们实现了AbstractInterceptor类中的intercept方法。intercept方法负责在Action被调用之前和之后执行的任务。在我们的示例中,我们在调用Action之前和之后记录了日志。
现在,我们已经学习了如何使用Interceptors来记录Action的日志。我们可以轻松地扩展这个示例,以适应我们自己的需求,例如在Action执行期间记录跟踪信息或检查用户是否已经经过身份验证。
总结
在本教程中,我们涵盖了Struts2框架的许多重要概念。我们讨论了如何配置Struts2框架、创建Action类、定义View,以及如何使用Validators和Interceptors。通过学习这些概念,开发者现在能够轻松地构建自己的Struts2 Web应用程序,并自信地将其部署到生产环境中。
在以后的文章中,我们将探讨更高级的Struts2主题,如使用Ajax进行异步Web应用程序开发、使用Spring与Struts2集成、在Struts2中使用Freemarker模板等。请关注更多精彩内容。