分类: Java
2013-04-13 16:48:35
准备就绪,咱们现在就开始问候struts2吧!
Step1:新建Web项目
用Eclipse创建一个名为strut2Demo的动态Web工程。
Step2:导入Struts 2类库
在Struts 2安装目录下的lib子目录中,有很多JAR包,不同的应用需要的JAR包是不同的。表1给出了开发Struts 2程序最少需要的JAR包。
表1 基于Struts 2的Web应用程序所需要的最少类库
文 件 名 |
说 明 |
struts2-core-2.0.11.jar |
Struts 2框架的核心类库 |
xwork-2.0.4.jar |
XWork类库,Struts 2在其上构建 |
ognl-2.6.11.jar |
对象图导航语言(Object Graph Navigation Language),Struts 2框架使用的一种表达式语言 |
freemarker-2.3.8.jar |
Struts 2的UI标签的模板使用FreeMarker编写 |
commons-logging-1.0.4.jar |
ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。 |
还需要:commons-fileupload-1.2.2.jar,commons-io-2.0.1.jar,commons-lang3-3.1.jar和javassist-3.11.0.GA.jar
Step3:在web.xml文件中配置FilterDispatcher
Struts 2框架是基于MVC模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的。
你需要在web.xml文件中配置FilterDispatcher过滤器,指定要映射到FilterDispatcher的URL样式,匹配这个URL样式的所有请求,都将被Web容器交由FilterDispatcher进行处理。以下为web.xml:
xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" /web-app_2_4.xsd">
<display-name>strut2(1)display-name>
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
welcome-file-list>
<filter>
<filter-name>struts2filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
filter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
Step4:编写Action类
一个action就是一段只有特定的URL被请求时才会执行的代码。FilterDispatcher根据请求URL的不同,来执行对应的action。在Struts 2中,action执行的结果(成功或者失败)通常都对应着一个要呈现给用户的result,这个result可以是HTML页面,也可以是一个PDF文件,或者Excel电子表格。所有的result都是通过字符串名字来标识的,FilterDispatcher根据action返回的结果字符串来选择对应的result显示给用户。action与其对应的result是在一个名为struts.xml的配置文件中进行配置的,参见Step6。
在Struts 2中,可以用一个普通的Java类作为Action类,只要这个类提供如下的方法实现即可:
public String execute();
不过,通常情况下,我们所写的action类会选择实现com.opensymphony.xwork2.Action接口,在这个接口中除了定义了上述的execute()方法外,还定义了5个字符串类型的静态常量,如下:
/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2;
public interface Action {
//action执行成功,要向用户显示成功页面,返回SUCCESS常量
public static final String SUCCESS = "success";
//action执行成功,但不需要向用户显示结果页面,使用NONE常量
public static final String NONE = "none";
//action执行失败,要向用户显示失败页面,返回ERROR常量
public static final String ERROR = "error";
//action的执行需要用户输入更多信息,要向用户显示输入页面,返回INPUT常量
public static final String INPUT = "input";
//由于用户没有登录,action不能执行,要向用户显示登录页面,返回LOGIN常量
public static final String LOGIN = "login";
public String execute() throws Exception;
}
Strtus 2中,所有的action必须返回一个字符串类型的结果代码,以标识要呈现给用户的result。
Action接口中定义的常量字符串,从语义上为你定义好了在action执行的不同情况下应该向用户呈现的result的名字,当然你可以为result取其他的名字,不过这种行为是不建议的,除非上述定义的字符串常量不能满足你的应用需求。
下面我们编写一个Action类HelloAction,实现com.opensymphony.xwork2.Action接口。
package org.leno.struts2.action;
import com.opensymphony.xwork2.Action;
public class HelloAction implements Action {
private String message;
public String getMessage() {
return message;
}
public String execute() throws Exception {
message = "Hello,Struts2!";
return SUCCESS;
}
}
在HelloWorldAction类中,我们定义了一个字符串类型的message实例变量,并给出了一个JavaBean风格的getter方法——getMessage(),用于获取message字段的内容。在execute()方法中,我们构造了一个问候语“Hello,Struts2!”,保存到message字段中,最后返回SUCCESS静态常量(在Action接口中定义),说明action已经成功执行。
Action返回的结果代码不一定非要对应一个要执行的result,例如,Action.NONE结果代码就没有对应任何的result。
Action已经创建完毕,接下来我们编写一个JSP页面,放在工程根目录。向用户显示问候信息。
Step5:编写结果页面
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<h1><s:property value="message" />h1>