第一个Struts2程序(附带详解) 图片看不了?点击切换HTTP 返回上层
通过前面两节的学习,读者已经了解了什么是 Struts2 框架,并掌握了在项目中添加 Struts2 框架的方法。为了帮助读者更快地掌握 Struts2 框架的使用,本节将使用 Struts2 框架实现一个 HelloWorld 程序。
图 1 Struts2的JAR文件
需要注意的是,在 Struts2.1 版本之前,所使用的核心过滤器类是 org.apache.struts2.dispatcher.FilterDispatcher,从 Struts2.1 版本之后,这个过滤器类已经不推荐使用了,而是使用 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 类。
如果你觉得上边配置 Struts2 核心控制器麻烦,下边讲解一个快捷配置 Struts2 的核心过滤器的方法。
从上述 Web.xml 文件中可以看出,Struts2 的核心过滤器名称很长,如果手写的话,则很容易出现错误。为此,这里教读者一个快速添加 Struts2 核心过滤器的方法。
在第《Struts2下载及目录结构和JAR包介绍》教程中快捷导入基础 JAR 包时解压的 struts2-blank 文件夹中,打开 WEB-INF/web.xml 文件,即可找到上述 Web.xml 中 Struts2 的核心过滤器配置的代码,将配置代码复制到自己 Web 应用程序的 web.xml 文件中,就省去了自己手动编写的麻烦。
在 Struts2 的配置文件需要编写的内容有很多。尤其是文件上面的 dtd 信息,如果手动编写的话十分容易出错。同样的,在解压的 struts2-blank 文件夹中,将 WEB-INF/classes 目录下的 struts.xml 文件复制到自己所建立的 Web 项目的 src 目录下,然后在此基础上进行修改和配置即可。
图 2 index.jsp
单击图 2 中的超链接后,浏览器会发送一个以 helloWorld.action 为结尾的请求,此时浏览器的显示结果如图 3 所示。
图 3 success.jsp
从图 3 的显示结果中可以看出,程序顺利返回到了 success.jsp 页面,这说明 Struts2 入门案例执行成功。
上面所讲解的 Struts2 入门程序,实际上就是一个请求发出到响应结束的过程,为了让读者更直观地了解该案例的执行全过程,下面通过简单的执行流程图进行说明,如图 4 所示。
从图 4 中可以看出,在客户端浏览器上单击 index.jsp 中的超链接时,会发送一个 helloWorld.action 请求,该请求被核心过滤器拦截后,会通过 struts.xml 文件中的配置找到请求对应的 HelloWorldAction,并默认调用 HelloWorldAction 中的 execute() 方法返回逻辑视图名,然后再通过配置文件找到并转发给对应的视图页面 success.jsp 中,最后生成响应内容并输出响应的返回结果。
图 4 Struts2入门案例执行流程
1)创建项目
在 MyEclipse 中新建一个名为 struts2Demo01 的 Web 项目,将 Struts2 框架依赖的基础 JAR 包复制到此项目的 WEB-INF/lib 路径中,然后选中所有 JAR 并右击,进行 Build Path→Add to Build Path 操作(此时所选 JAR 包会被添加到项目的 classpath 中),添加后的项目结构如图 1 所示。图 1 Struts2的JAR文件
2)配置 Struts2 的核心过滤器
打开项目的 web.xml 文件,在文件中添加 Struts2 的核心过滤器 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,具体如下所示。<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置Struts2核心过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>在 web.xml 文件中,<filter> 标签中配置的信息就是 Struts2 的核心过滤器,该过滤器的名称为 struts2,过滤器类为 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,而 <filter-mapping> 标签中配置的是该过滤器的映射。
需要注意的是,在 Struts2.1 版本之前,所使用的核心过滤器类是 org.apache.struts2.dispatcher.FilterDispatcher,从 Struts2.1 版本之后,这个过滤器类已经不推荐使用了,而是使用 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 类。
如果你觉得上边配置 Struts2 核心控制器麻烦,下边讲解一个快捷配置 Struts2 的核心过滤器的方法。
从上述 Web.xml 文件中可以看出,Struts2 的核心过滤器名称很长,如果手写的话,则很容易出现错误。为此,这里教读者一个快速添加 Struts2 核心过滤器的方法。
在第《Struts2下载及目录结构和JAR包介绍》教程中快捷导入基础 JAR 包时解压的 struts2-blank 文件夹中,打开 WEB-INF/web.xml 文件,即可找到上述 Web.xml 中 Struts2 的核心过滤器配置的代码,将配置代码复制到自己 Web 应用程序的 web.xml 文件中,就省去了自己手动编写的麻烦。
3)创建 Action 类
在项目的 src 目录下,新建一个名称为 com.mengma.action 的包,在包中创建一个名为 HelloWorldAction 的类,并使其继承 ActionSupport 类(Struts2 框架所提供的类)。在 HelloWorldAction 类中定义一个 execute() 方法,返回值为 SUCCESS,编辑后的代码如下所示。package com.mengma.action; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { public String execute() throws Exception { return SUCCESS; } }在上述 HelloWorldAction.java 中,execute() 方法的返回值 SUCCESS 是从父类中继承的常量字段,用于表示执行成功,并返回结果页面。execute() 方法的返回值对应 struts.xml 文件中 <result> 标签中 name 属性的值,Struts2 框架会根据 name 属性值执行对应处理结果下的视图资源。
4)编写 Struts2 的配置文件
在 src 目录下新建一个名称为 struts.xml 的文件,编辑代码后如下所示。<?xml version="1.0" encoding="UTF-8"?> <!-- 指定 Struts2 配置文件的 DTD 信息 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <!-- Struts2配置文件的根元素 --> <struts> <!-- Struts2的Action必须放在指定的包空间下定义 --> <package name="hello" namespace="/" extends="struts-default"> <!-- 定义 action,该 action 对应的类为 com.mengma.action.HelloWorldAction 类--> <action name="helloWorld" class="com.mengma.action.HelloWorldAction"> <!-- 定义处理结果和视图资源之间的映射关系 --> <result name="success">/success.jsp</result> </action> </package> </struts>在 struts.xml 文件中,<action> 标签中定义了请求路径,以及与其对应的 Action 类的映射关系,子标签 <result> 定义了处理结果和视图资源之间的映射关系。关于 struts.xml 文件的详细配置信息,后面的教程中会进行重点讲解,此处读者可不必关心其细节问题。
在 Struts2 的配置文件需要编写的内容有很多。尤其是文件上面的 dtd 信息,如果手动编写的话十分容易出错。同样的,在解压的 struts2-blank 文件夹中,将 WEB-INF/classes 目录下的 struts.xml 文件复制到自己所建立的 Web 项目的 src 目录下,然后在此基础上进行修改和配置即可。
5)创建视图首页文件
在 WebContent 目录下创建一个名称为 index.jsp 的页面文件,在其中编写一个超链接,用于访问 Action 对象,此链接指向的地址为 helloWorld.action,如下所示。<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>首页</title> </head> <body> <a href="${pageContext.request.contextPath }/helloWorld.action"> 第一个 Struts2 程序! </a> </body> </html>
6)创建返回页面
在 WebContent 下再创建一个名称为 success.jsp 的文件,作为 Action 对象处理成功后的返回页面,如下所示。<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>成功页面</title> </head> <body> 您的第一个小程序执行成功,欢迎来到Struts2的世界! </body> </html>
7)启动项目并查看结果
将项目 struts2Demo01 发布到 Tomcat 服务器后启动服务器,在浏览器的地址栏中输入地址 http://localhost:8080/struts2Demo01/index.jsp 后,浏览器的显示结果如图 2 所示。图 2 index.jsp
单击图 2 中的超链接后,浏览器会发送一个以 helloWorld.action 为结尾的请求,此时浏览器的显示结果如图 3 所示。
图 3 success.jsp
从图 3 的显示结果中可以看出,程序顺利返回到了 success.jsp 页面,这说明 Struts2 入门案例执行成功。
上面所讲解的 Struts2 入门程序,实际上就是一个请求发出到响应结束的过程,为了让读者更直观地了解该案例的执行全过程,下面通过简单的执行流程图进行说明,如图 4 所示。
从图 4 中可以看出,在客户端浏览器上单击 index.jsp 中的超链接时,会发送一个 helloWorld.action 请求,该请求被核心过滤器拦截后,会通过 struts.xml 文件中的配置找到请求对应的 HelloWorldAction,并默认调用 HelloWorldAction 中的 execute() 方法返回逻辑视图名,然后再通过配置文件找到并转发给对应的视图页面 success.jsp 中,最后生成响应内容并输出响应的返回结果。
图 4 Struts2入门案例执行流程