Struts2安装与简单部署实例

摘要:
完整版本包括:;来源:Struts2源代码。如果您需要阅读Struts2源代码,则需要将其与XWork源代码结合在一起。提示因为Struts2必须依赖XWork,所以读者在阅读Struts2源代码时必须结合XWork的源代码,并且src文件夹中没有提供XWork的源码。当然,如果您的Web应用程序需要使用Struts2的更多功能,则需要将更多JAR文件复制到Web应用程序的Web-INF/lib路径。以下是添加Struts2核心过滤器配置的web.xml配置文件的代码:˂!

打开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引用。

extendspackage能继承其他的package,即通过该属性实现,值为另一个packagename

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

action

定义Actionname属性为访问时用到的名称,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>

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

Struts2安装与简单部署实例第1张

参考了:

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

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

免责声明:文章转载自《Struts2安装与简单部署实例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vue日历控件数据字典的应用实例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

struts2漏洞S2-046修复解决方案

项目验收通过半年之后, 甲方找了一些网络砖家用工具扫描我司做的社保卡申领系统, 找到了struts2漏洞S2-046, 真是服了, 只知道struts2有bug, 现在才知道它漏洞。 砖家们给出了修复建议: 方法一:升级Struts2至Struts2.3.20.2,2.3.24.2,2.3.28.1版本修复该漏洞。(注:更新地址:https://cwik...

SSH框架总结

首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。 集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。 Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模...

Struts2 中result type属性说明

Struts2 中result type属性说明 首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-type name="chain" /><result-type name="dispatcher" default="true"/>&l...

java之拦截器Interceptor

1,拦截器的概念java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。目前,我们需要掌握的主要...

Java—SSH(MVC)

Java—SSH(MVC) 1. 谈谈你mvc的理解 MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序 的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。 视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何...

Struts2配置异常错误处理(十六)

勿以恶小而为之,勿以善小而不为--------------------------刘备 劝诸君,多行善事积福报,莫作恶 上一章简单介绍了Struts2实现类型转换器(十五),如果没有看过,请观看上一章 在开发中,我们常常会遇到很多很多的错误,一般比较常见的是404,500等错误,当项目运行报错之后,浏览器会自做聪明地创建错误的界面,展示错误信息,响应到...