JavaWeb从入门到精通(视频实战版)
上QQ阅读APP看书,第一时间看更新

4.2 第一个Struts2程序

本节将介绍如何使用Struts2来开发Web应用,还是用一个Hello Reader的例子来说明Struts2的基础配置和结构。

4.2.1 配置web.xml

Struts2的配置非常简单,在web.xml中配置Struts2提供的过滤器,并设置为所有的请求(/*)都要经过这个过滤器,如实例4-1所示。

【实例4-1】关于Struts2的配置文件:web.xml

01     <?xml version="1.0" encoding="UTF-8"?>
02     <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
03          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
05          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
06          <welcome-file-list>
07                <welcome-file>index.jsp</welcome-file>
08          </welcome-file-list>
09          <display-name>Struts Blank</display-name>
10          <filter>
11                <!--添加filter-->
12                <filter-name>struts2</filter-name>
13                <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
14          </filter>
15          <filter-mapping>
16                <filter-name>struts2</filter-name>
17                <url-pattern>/*</url-pattern>
18          </filter-mapping>
19     </web-app>

【代码剖析】在上述代码中,首先通过标签<filter>设置了Struts2框架的过滤器,然后通过标签<filter-mapping>设置过滤器映射。

注意

在Struts1.x中,web.xml配置了一个全局的Servlet来执行分发,而在Struts2中是一个过滤器(Filter)。

4.2.2 编写JSP界面

在使用Struts2提供的标签库之前,需要在JSP中引入这个标签库,前缀定义为“s”,如实例4-2所示。例子中用到了一个“property”标签来显示message这个属性值。

【实例4-2】关于页面文件:helloreader.jsp

01     <%@ taglib prefix="s" uri="/struts-tags"%>
02     <html>
03          <head>
04                <title>Hello Reader!</title>
05          </head>
06          <body>
07               <!--使用property标签来获取Action中的属性, 直接显示在页面中-->
08                <h2>
09                     <s:property value="message" />
10                </h2>
11          </body>
12     </html>

【代码剖析】从上述代码可以发现,Struts2标签库的引用方法简单,只需一句,而在Struts1.x版本中标签库是分散在几个tld文件中,要分别导入。

4.2.3 编写Action类

Action类是最基本的逻辑处理单元,在MVC模式中分发器分发给不同的Action类,来处理请求。在Struts2中Action类不必再实现Action接口,可以是任何类。但一般的还是需要继承ActionSupport类,后文中会讲到。因为ActionSupport提供了很多很好的基本功能,如错误信息处理等,如实例4-3所示。

【实例4-3】关于实现业务逻辑的Action:HelloReader.java

01     package tutorial;
02     import com.opensymphony.xwork2.ActionSupport;
03     //第一个Struts Action类直接继承ActionSupport
04     public class HelloReader extends ActionSupport {
05          public static final String MESSAGE = "Hello Reader ! I'm from Struts2";
06          // Struts框架将调用此方法, 如果在配置文件中未直接指定execute()为默认方法
07          public String execute() throws Exception {
08                setMessage(MESSAGE);
09                return SUCCESS;
10          }
11          // 唯一的属性, 将被自动赋值并打印
12          private String message;
13          public void setMessage(String message) {       //设置属性的getter和setter方法
14                this.message = message;
15          }
16          public String getMessage() {
17                return message;
18          }
19     }

【代码剖析】在上述代码中首先定义了message属性,然后为该属性设置了getter和setter方法,最后又在execute()方法中通过调用setMessage()方法设置了属性值。

说明

ActionSupport类的包名中出现了“xwork2”,xwork是WebWork的前身,因为Struts2是由WebWork发展而来,所以还留有WebWork的痕迹。可能在以后的版本中会逐渐把包名都统一为“Struts2”。

4.2.4 在配置文件中添加映射

Struts2的配置文件是struts.xml,所有请求和分发以及其他配置都在这个文件中定义,struts.xml文件应该放在WEB-INF目录下。在Struts1.x中这个文件的文件名为struts-config.xml,而在WebWork中这个文件名为xwork.xml。

如实例4-4所示,配置了一个名称为HelloReader的action,处理类是tutorial.HelloReader,处理后的结果转到HelloReader.jsp。

【实例4-4】关于Struts2框架的配置文件:struts.xml

01     <!DOCTYPE struts PUBLIC
02          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
03          "http://struts.apache.org/dtds/struts-2.0.dtd">
04     <struts>
05          <package name="tutorial" extends="struts-default">
06                <action name="HelloReader" class="tutorial.HelloReader">
07                     <result>/helloreader.jsp</result>
08                </action>
09               <!--添加actions到这里-->
10          </package>
11     </struts>

【代码剖析】在上述代码中通过标签<action>配置了类HelloReader,然后通过<result>标签设置运行成功后的转向页面。