`

struts2-入门

 
阅读更多

学习一门新技术,最好是先看到实际的效果,所以接下来的几篇文章里,我们就来个先睹为快,看看Struts2的边边角角到底是怎么使用的,等我们有了一定的作战经验,再来透彻地分析它的运行原理。

准备就绪,咱们现在就开始问候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 2UI标签的模板使用FreeMarker编写

commons-logging-1.0.4.jar

ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4JJDK 1.4+的日志记录。

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="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>strut2(1)</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

</welcome-file-list>

<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

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;

publicinterface Action {

//action执行成功,要向用户显示成功页面,返回SUCCESS常量

publicstaticfinal String SUCCESS = "success";

//action执行成功,但不需要向用户显示结果页面,使用NONE常量

publicstaticfinal String NONE = "none";

//action执行失败,要向用户显示失败页面,返回ERROR常量

publicstaticfinal String ERROR = "error";

//action的执行需要用户输入更多信息,要向用户显示输入页面,返回INPUT常量

publicstaticfinal String INPUT = "input";

//由于用户没有登录,action不能执行,要向用户显示登录页面,返回LOGIN常量

publicstaticfinal String LOGIN = "login";

public String execute() throws Exception;

}

Strtus 2中,所有的action必须返回一个字符串类型的结果代码,以标识要呈现给用户的result。

Action接口中定义的常量字符串,从语义上为你定义好了在action执行的不同情况下应该向用户呈现的result的名字,当然你可以为result取其他的名字,不过这种行为是不建议的,除非上述定义的字符串常量不能满足你的应用需求。

下面我们编写一个ActionHelloAction,实现com.opensymphony.xwork2.Action接口。

package org.leno.struts2.action;

import com.opensymphony.xwork2.Action;

publicclass HelloAction implements Action {

private String message;

public String getMessage() {

returnmessage;

}

public String execute() throws Exception {

message = "Hello,Struts2!";

returnSUCCESS;

}

}

在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" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1><s:property value="message" /></h1>

</body>

</html>

注意代码中以粗体显示的部分。与Struts 1相同,Struts 2框架也提供了一套标签库。在使用Struts 2标签时,通常为标签库指定前缀“s”。属性uri的值“/struts-tags”是固定的,书写时不要忘了前导的斜杠“/”。

Struts 2的property标签带有一个value属性,在这里,我们给它的值是“message”。还记得HelloAction中的getMessage()方法吗,此处的property标签将获取到getMessage()方法调用后的返回值,即“Hello,Struts2!,这个问候语将作为2级标题向用户显示。

Step6:在struts.xml文件中配置action

一个action创建完成后,还需要为其配置一个URL,只有这样,FilterDispatcher才知道哪一个URL对应着哪一个action,当截获到访问该URL的请求时,FilterDispatcher就调用对应的action对请求进行处理。

除了为action配置一个URL外,还需要为action关联一个或多个结果页面,当action执行完毕后返回一个结果代码(一个字符串值,例如“success”),这个结果代码对应的页面就会被呈现给用户。

要对action进行配置,需要创建struts.xml文件。struts.xml是Struts 2框架的核心配置文件,默认的路径是WEB-INF/classes/struts.xml。我们只需在项目的src目录(源文件目录)下创建struts.xml文件即可。

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="default" extends="struts-default">

<action name="hello"

class="org.leno.struts2.action.HelloAction">

<result name="success">/hello.jsp</result> </action>

</package>

</struts>

这是struts.xml配置文件的文档类型声明,注意不要写错了。

② package元素将多个action元素组织为一个逻辑单元,从而简化了维护工作,提高了可重用性。name属性指定包的名字,可选的extends属性指定要扩展的包。Struts 2中的package可以扩展另外的package,从而“继承”原有包的定义。struts-default包的定义在struts-default.xml文件中,该文件已经包含在Struts 2的核心JAR包(即struts2-core-2.0.11.jar)中了。

③ action元素用于对action进行配置。name属性为action指定一个名字,这个名字即用户访问的URL,class属性指定action的完整类名。任何对“/hello.action”的请求都会调用HelloAction类。读者要注意的是:在为action取名时,一是不要在名字前面添加斜杠(/);二是不要在名字后面添加“.action”后缀名。

④ result子元素用于建立action和result之间的关联,name属性指定result映射的名字,值“success”和HelloAction的execute()方法返回的静态常量SUCCESS(值为“success”)是一致的。要注意的是,如果result的名字是“success”,那么可以省略name属性,即④处的代码等价于

<result>/hello.jsp</result>

Step7:发布并测试

现在是万事俱备,只欠东风了,我们只需将Hello World程序发布到Tomcat服务器中,然后启动服务器,打开浏览器,输入访问action的URL

http://localhost:8080/strut2Demo/hello.action,就可以看到举世闻名的“Hello World!”了。

Struts 2项目开发总结

Struts 2的开发步骤主要分为:

1.准备类库。不同的开发需求所用的类库是不一样的,但至少需要如下的5个类库。

struts2-core-2.0.11.jar

xwork-2.0.4.jar

ognl-2.6.11.jar

freemarker-2.3.8.jar

commons-logging-1.0.4.jar

2.在web.xml文件中配置FilterDispatcher。

3.开发action。针对每一个功能点,编写一个action类。

4.编写相关的结果页面。针对action返回的结果代码,编写相应的结果页面。

5.在src目录下创建struts.xml,对action进行配置,将action与结果页面关联在一起。


分享到:
评论

相关推荐

    Struts2-入门学习

    这个"Struts2-入门学习"的主题将引导你了解Struts2的基础知识,包括其架构、核心组件、配置以及如何在实际项目中应用。 Struts2的核心组件包括: 1. **Filter Dispatcher**:这是Struts2框架的入口点,它是一个...

    [原]Struts2-入门与配置

    Struts2是一个强大的MVC(Model-View-Controller)框架,用于构建企业级Java Web应用程序。它是Apache软件基金会的一个项目,旨在提供一个可扩展且灵活的框架,帮助开发者组织和控制应用逻辑,同时保持良好的用户...

    struts2-tags-文档.rar

    对于初学者,"struts2.chm"提供了入门指导;对于有一定经验的开发者,"struts2-tags-API.chm"和"struts2 2.chm"将帮助他们更好地利用Struts2的高级特性,提升开发效率。总的来说,这个压缩包是学习和开发Struts2应用...

    struts2-blank

    "struts2-blank"项目是一个基础的Struts2示例代码,可以帮助初学者快速理解和入门Struts2框架。 在Struts2框架中,核心组件包括Action、Interceptor、Result、ValueStack等。Action是业务逻辑的执行者,Interceptor...

    struts2-struts入门

    在入门Struts2时,首先需要了解其基本概念和目录结构。Struts2的框架设计理念是提供一个半成品,即已经包含了大部分通用功能,开发者只需要关注与业务相关的部分。在提供的版本struts-2.3.15.3中,有两个示例应用:...

    struts2-例子

    在这个"struts2-例子"压缩包中,我们主要关注的是一个名为"struts2-blank"的项目,这是一个基础的、空白的Struts2应用模板,用于新手快速入门和理解框架的基本工作原理。 首先,Struts2的核心在于Action类,它是...

    struts2--1.入门程序

    入门程序"应该是针对初学者设计的一系列教程,旨在帮助开发者快速理解并掌握Struts2的基础用法。 在Java Web开发中,Struts2框架提供了良好的架构模式,可以有效地组织代码,提高开发效率,并且它支持多种视图技术...

    struts2-docs

    11. ** strut2-docs 中的详细内容**:压缩包中的文档可能包括框架概述、快速入门指南、配置参考、API文档、插件介绍、示例代码和最佳实践等多个部分,为开发者提供全方位的学习材料。 通过阅读这些文档,开发者能够...

    struts2--国际化入门

    本教程将引导你入门Struts2的国际化功能,这是一项允许应用程序支持多种语言的重要特性。 在Struts2中实现国际化,首先你需要创建资源文件,这些文件通常以`.properties`为扩展名,例如`messages.properties`和`...

    struts2-----之一

    在本学习资料中,初学者将能深入理解Struts2的核心概念和工作原理,从而轻松入门。 Struts2框架的核心功能包括: 1. **请求分发**:Struts2通过Action类来处理HTTP请求。每个Action类对应一个业务逻辑,接收请求后...

    starting-struts2-chinese.rar

    这个"starting-struts2-chinese.rar"压缩包文件包含了一份中文版的"starting-struts2-chinese.pdf"文档,很显然是为帮助初学者理解和入门Struts2框架而准备的。 Struts2的核心是模型-视图-控制器(MVC)设计模式,...

    jcaptcha4struts2-demo-2.0.1.zip_DEMO_JCaptcha4Struts2.jar_jcaptc

    这个DEMO旨在帮助开发者快速理解和应用Jcaptcha4Struts2,为初学者提供了一个基础入门级的学习资源。 Jcaptcha4Struts2是基于Jcaptcha(Just Another CAPTCHA)的Struts2插件,它将Jcaptcha的功能无缝集成到Struts2...

    struts2简单入门教程

    在入门Struts2之前,需要准备以下开发环境和工具: - 开发工具:MyEclipse6(尽管它不直接支持Struts2,但可以使用其进行基础开发) - Web服务器:Tomcat6(用于部署和测试Web应用程序) - Struts版本:Struts*.*.**...

    struts2-easyui.

    在"struts2-easyui"的例子中,我们看到的是一个基础的快速入门教程,它演示了如何将这两个技术整合在一起,实现数据的增删改查功能。下面将详细解释这个组合的应用场景、工作原理以及相关的知识点。 1. **Struts2...

    Struts2 的入门简单的hello

    这个“Struts2 的入门简单的hello”项目是一个非常适合初学者了解和学习Struts2的基础知识的实例。 首先,让我们从创建一个基本的Struts2应用开始。在Java世界里,MVC模式是web开发的核心,它将业务逻辑、数据和...

    struts2-docs部分

    12. ** strut2-docs 中的具体文档**:可能包括框架概述、快速入门指南、配置手册、API参考、示例应用和最佳实践等内容,为开发者提供了详尽的使用指导。 学习和掌握Struts2框架,需要深入理解这些概念,并通过实际...

    struts2.5.16-jar包

    在"Struts2 入门\struts2基本jar包"目录下,你可以找到一组基础的jar包,这些是学习和搭建Struts2入门级应用所需的基本组件。它们包括了处理HTTP请求、映射请求到Action、视图渲染等功能的关键类。通过这些基本jar包...

    struts-2.5.16升级jar包.zip

    此外,描述中提到的"Struts2 入门\struts2基本jar包"目录,通常会包含一些基础的入门示例和教程所需的jar包,这些可能包括了用于演示基本功能和配置的简化版本,如简单的Action类、配置文件、以及其他必要的依赖。...

    struts-2.3.16.1-docs.zip

    1. **快速入门**:这通常是一份简明教程,帮助开发者快速了解Struts2的基本概念和配置,如Action、Result、Interceptor等,并指导如何搭建第一个运行的Struts2应用。 2. **使用文档**:这部分详细介绍了如何在实际...

    Struts2学习案例--------入门篇

    输出Hello World 使用到struts2标签和jstl表达式 2、 URL:http://localhost:8080/struts100515 输入用户名XXX ------&gt; 提交 ,显示 你好 XXX 使用ONGL表达式 3、 URL:...

Global site tag (gtag.js) - Google Analytics