打开http://struts.apache.org/网站,下载strut2

版本选择:

Full Distribution: Struts2完整版 建议下载该项(此版包括以下4项);

Example Applications: Struts2的示例应用,完整版已包括;

Essential Dependencies Only: Struts2的核心库,完整版已包括;

Docmentation: Struts2相关文档,包含Struts2的使用文档、参考手册和API文档等。完整版已包括;

Source:Struts2源代码,如需阅读Struts2源码,需要结合XWork源码点这里 获得。完整版已包括;

Full Distribution该目录结构下包括

apps:示例应用;

docs:相关文档,包括Struts 2的快速入门、Struts 2的文档、以及API文档等内容;

lib:核心类库,以及Struts 2 的第三方插件类库;

src:Struts 2框架的全部源代码。

提示  由于Struts 2必须需要依赖于是XWork,因此读者阅读Struts 2源代码时必须结合XWork的源码,而该src文件夹下并没有提供XWork的源代码。读者必须自行下载XWork源码,下载XWork源码请登录http://www.opensymphony.com/xwork/站点下载。

将lib文件夹下的struts2-core-2.1.6.jar、xwork-2.1.2.jar和ognl-2.6.11.jar等必需类库复制到Web应用的WEB-INF/lib路径下。当然,如果你的Web应用需要使用Struts 2的更多特性,则需要将更多的JAR文件复制到Web应用的WEB-INF/lib路径下。如果需要在DOS或者Shell窗口下手动编译Struts 2相关的程序,则还应该将struts2-core-2.1.6.jar和xwork-2.1.2.jar添加到系统的CLASSPATH环境变量里。(一般5个:

struts2-core-2.0.11.1.jar

xwork-2.0.4.jar

commons-logging-1.0.4.jar

freemarker-2.3.8.jar

ognl-2.6.11.jar)

提示  大部分时候,使用Struts 2的Web应用并不需要利用到Struts 2的全部特性,因此没有必要一次将该lib路径下JAR文件全部复制到Web应用的WEB-INF/lib路径下。

注意:我下的是strut2 2.3的版本,更上面的不同:

struts2.2.3最小jar包:
struts2-core-2.2.3.jar :Struts 2框架的核心类库
xwork-core-2.2.3.jar :XWork类库,Struts 2在其上构建
commons-fileupload-1.2.2.jar :文件上传组件,2.1.6版本后必须加入此文件
commons-io-2.0.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar :日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
freemarker-2.3.16.jar :Struts 2的UI标签的模板
javassist-3.11.0.GA.jar :唯一一个特殊的jar包,此包不在struts2的lib文件夹中。
ognl-3.0.1.jar  :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性

编辑Web应用的web.xml配置文件,配置Struts 2的核心Filter。下面是增加了Struts 2的核心Filter配置的web.xml配置文件的代码:

<?xml version="1.0" encoding="GBK"?>
<!-- 配置Web应用配置文件的根元素,并指定配置文件的Schema信息 -->
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<!-- 定义Struts 2的核心控制器:FilterDispatcher -->
<filter>
<!-- 定义核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 定义核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
</filter>
<!-- FilterDispatcher用来初始化Struts 2并且处理所有的HTTP请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

注意:

如果struts2版本是2.1及以前

web.xml配置过滤器的时候应该是这样:
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

如果struts2 版本是2.1以上,web.xml配置:
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 

错误分析

java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
解决:缺少commons io包

java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
解决:缺少commons lang包

java.lang.ClassNotFoundException: javassist.ClassPool
解决:缺少javassist包

我用的是eclipse ee,apache版本是1.7,新建一个dynamic web project没有看到web.xml,为什么呢?是因为新建工程时最后一个选项会让你选择是否产生web.xml,勾选就可以了。参考;http://www.iteye.com/problems/62504

创建hello.jsp

<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>strut2 应用</title>
</head>
<body>
<form action="struts.action" method="post">
请输入姓名:<input type="text" name="name" /><br/>
<input type="submit" value="提交">
</form> </body>
</html>

当点击提交按钮时,就会交给struts.actiion,strut2的filter拦截器就会起作用,将用户请求转发给相应的action类。

下面编写action类的实现。

理论上,Action可以不继承任何类或实现任何接口,以增强程序的可测试性,这也是和Struts1.X不同的地方。但是,继承自ActionSupport可以减少更多的编码工作。

在ActionSupport中,定义了方法execute(),当用户向该Action发送请求时,会自动调用。程

在src目录下的org.action包中:

package org.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class StrutsAction extends ActionSupport
{
private String name;
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name=name;
}
public String execute() throws Exception
{
if(!name.equals("HelloWorld"))
{
Map request=(Map)ActionContext.getContext().get("request");
request.put("name", getName());
return "success";
}
else
{
return "error"; }
} }

配置struts.xml

struts.xml文件应该在哪里,放在WEB-INF/classes路径下,也就是web应用程序类路径。WEB应用程序的类路径是指WEB-INF/classes目录,Eclipse中,创建在src目录下的文件最终发布后会自动复制到WEB-INF/classes目录下。也就是说放在src目录也没用问题(经过测试,确实如此.

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="struts" class="org.action.StrutsAction">
<result name="success">/welcome.jsp</result>
<result name="error">/hello.jsp</result>
</action>
</package>
</struts>

strut.xml可以中涉及到很多标签,以下是简单的解释:

标签名称

说明

include

包含其他xml文件,在示例中,这意味着struts.xml可以访问定义在struts-default.xml文件中的组件。

该元素可以使得Struts2定义多个配置文件,“分而治之”。

要注意的是,任何一个struts2配置文件都应该和struts.xml有相同的格式,包括doctype,并且可以放在类路径下的任何地方。

package

为Action或截拦器分组。

name:名称,必填项,名称自定义,没特别要求。方便别的package引用。

extends:package能继承其他的package,即通过该属性实现,值为另一个package的name。

在示例中,extends =”struts-default”是从struts-default.xml中继承的。

action

定义Action,name属性为访问时用到的名称,class属性是Action的类名。

result

根据Action的返回值定义页面导航。

Action的预定义的返回值有:

String SUCCESS = "success";

String NONE    = "none";

String ERROR   = "error";

String INPUT   = "input";

String LOGIN   = "login";

比如,当Action返回SUCCESS时希望转到ok.jsp页面,则可以这样写:

<result name=”success”>/ok.jsp</result>

其中,name的缺省为success。

welcome.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
hello<s:property value="#request.name"/> </body>
</html>

项目的文件组织结构如下:

参考了:

http://my.oschina.net/tomzhao/blog/23782

http://www.blogjava.net/lzhidj/archive/2008/07/08/213445.html

Struts2安装与简单部署实例的更多相关文章

  1. jenkins安装和简单部署

    jenkins安装和简单部署 jenkins历史 jenkins是一款非常好用的团队CI(Continuous Integration)工具.它可以使你的构建,集成,发布,开发流程自动化.减轻各个环节 ...

  2. nginx之旅:安装及简单部署

    安装之前最好了解一下nginx,参考nginx百度百科吧,下面这一句话基本概括了nginx的基本功能 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理  ...

  3. mongodb 简单部署方案及实例

    mongodb 简单部署方案及实例 转载:http://my.oschina.net/zhuzhu0129/blog/53290 第一节 准备工作 一 安装mongodb  我这里选用rehl 5.6 ...

  4. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  5. 《转》Robot Framework 的安装配置和简单的实例介绍

    Robot Framework 介绍 Robot Framework 是一款基于 Python 的功能自动化测试框架.它具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进 ...

  6. Django学习笔记(一):环境安装与简单实例

    Django学习笔记(一):环境安装与简单实例 通过本文章实现: Django在Windows中的环境安装 Django项目的建立并编写简单的网页,显示欢迎语与当前时间 一.环境安装 结合版本兼容性等 ...

  7. Solr 4.0 部署实例教程

    Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...

  8. Redis 安装与简单使用

    安装 Redis 一般系统都会有软件管理工具,但是通常版本都不会太新,况且 Redis 的安装很简单,因此下面使用源码的安装方式. 下载源码 wget http://download.redis.io ...

  9. windows下安装Redis并部署成服务

    windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...

随机推荐

  1. Linux备份与恢复

    确定要备份的内容 在备份和还原系统时,Linux 基于文件的性质成了一个极大的优点.在 Windows 系统中,注册表与系统是非常相关的.配置和软件安装不仅仅是将文件放到系统上.因此,还原系统就需要有 ...

  2. VS2010中使用QtOpenGL出现 unresolved external symbol __imp__glClear@4 referenced in function之类的错误

    描述: 链接了QtOpenGL4.lib QtOpend4.lib的库啊,居然还是发生此错误. 原因是没有链接OpenGL32.lib这个库.所以,要添加这个lib 重新rebuild的一下,此类的错 ...

  3. Spring Boot 启动加载数据 CommandLineRunner

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来 ...

  4. Array vs Linked List

    Access: Random / Sequential 1. Array element can be randomly accessed using index 2. Random access f ...

  5. 《Java程序员面试笔试宝典》之Java变量命名有哪些规则

    在Java语言中,变量名.函数名.数组名统称为标识符,Java语言规定标识符只能由字母(a~z,A~Z).数字(0~9).下划线(_)和$组成,并且标识符的第一个字符必须是字母.下划线或$.此外,标识 ...

  6. java与.net比较学习系列(5) 流程控制语句

    java中流程控制语句主要分为以下几类,第一,条件语句,主要包括if语句和switch语句.第二,循环语句,主要包括while循环语句,for循环语句.第三,跳转语句,主要包括三种,break跳出语句 ...

  7. java遍历泛型的方法

    一.List遍历 Java中List遍历有三种方法来遍历泛型,主要为: 1.for循环遍历 2.iterator遍历 3.foreach遍历 package com.gmail.lsgjzhuwei; ...

  8. EffectiveC#8--确保0对于值类型数据是有效的(初始化问题)

    1.决不要创建一个不包括0在内的枚举类型 2.举例如下: public enum Planet { Mercury = 1, Venus = 2, Earth = 3, Mars = 4, Jupit ...

  9. 引用System.Runtime.Serialization.Json

    vs2012下,重新添加一次System.Runtime.Serialization的引用

  10. css-文本及其他

    <!DOCTYPE html>css7-文本和其他 text-align行内元素对齐方式,值为 左/中/右 对齐:left/right/center.test{text-align:cen ...