admin 管理员组

文章数量: 887021


2023年12月17日发(作者:正则表达式生成神器)

研发部文档中心

文档编号 产品版本

2.0

密级

一般

共 页 名称:使用Eclipse开发struts2教程

使用Eclipse开发struts2教程

(仅供内部使用)

(注:文档命名规则:文档名+版本号-作者-时间)

例如:新浪宁波网短信业务概要设计2.0-黑山-

拟制:

审核:

审核:

批准:

版权所有 不得复制

黑山 日期:

日期:

日期:

日期:

2009/01/20

SourceWare Info Tech Ltd. Page:

1

使用Eclipse开发struts2教程

关键词:J2EE,iBatis,ORM

摘 要: 本文档是eclispe开发struts2的一个教程学习文档。

缩略语清单:

ORM:Object Relation Map

注意在引用这些缩略语是注意区别大小写,没有在此出现的不能被直接引用。例如:EJB统一为大写。

注:缩略语需要根据情况增减

修改历史:

修改历史清单

作者

黑山

名称

初稿

时间

2009-01-20

SourceWare Info Tech Ltd. Page:

2

一、 安装

1. 安装Eclipse:

去/downloads/网站上下载Eclipse IDE for Java EE

Developers(开发JAVA EE的IDE)。然后解压缩即可使用!

假设解压缩到D:eclipse目录。

2. 安装struts for eclipse的插件:(如果不想安装这个插件也可以,只是action映射文件要自己配置了)

去/ 网站上下载Alveole 这个插件也可以直接在线安装(比较慢)。先说直接下载插件再安装,下载下来以后解压缩,得到features和plugins两个目录,直接把这两个目录拷贝到d:/eclipse目录下即完成插件的安装。

在线安装方法:

运行,然后找到:

然后点Add site:

SourceWare Info Tech Ltd. Page:

3

在在线更新的地址拦里输/update/:

入地址:

确定以后形如:

然后选中需要安装的项目,点击install安装即可完成安装,其他可在线安装的插件安装方法也一样!

比如ibatis插件的安装,可以去/下载插件,然后

除了输入一个远程在线安装地址以外,还可以选择一个本地的文件夹(该文件夹包含features和plugins目录以及文件);也可以选择一个本地安装压缩包,这个zip包里包含了features和plugins目录以及文件。

Eclipse的插件非常丰富,此外还有hibernate插件,c++开发插件等等,但插件安装的越多,eclipse运行速度也会变得越慢,因此在不影响运行效率的前提下安装插件!

SourceWare Info Tech Ltd. Page:

4

二、 创建一个web项目

首先创建一个动态web项目,

SourceWare Info Tech Ltd. Page:

5

默认即可,然后点finish.

接下来给这个动态web项目增加struts2功能,设想如果没有struts2功能,我们必须手工编辑文件,在里面增加struts的listener等配置,以及的action配置文件等信息。现在有了这个struts2插件,这些事情就有插件帮您完成了,点file->new->others

找到:

SourceWare Info Tech Ltd. Page:

6

然后点下一步,

SourceWare Info Tech Ltd. Page:

7

输入文件名,这个文件主要是让eclipse记住一些可视化的配置信息,然后点finish。

这个时候插件就自动给我们生成好了开发struts的开发框架代码:

就类似于webwork里的文件。打开查看文件,发现也自动给我们添加好了

Filter等信息。

SourceWare Info Tech Ltd. Page:

8

三、 Struts2 Hello World

接下来创建一个action,双击文件,出来一个可视化编辑器,单击按牛,

输入以下信息,Node label只是这个action的别名,容易理解即可,action name是ie上访问的action名字,package是指加到里的哪个package下面,可以自己添加新的package,这里加到默认的alveole下面,action class选择ction

Action method不填写,默认即execute方法。点ok按牛,界面上出来一个图标:

,表示已经建好了一个struts2的action节点。

接下去新建一个action类,名字为ction,就不多说了。

以上已经建好了struts2的action节点,但是还没有配置result,继续双击文件打开可视化编辑器,单击按牛,创建一个jsp result,

SourceWare Info Tech Ltd. Page:

9

点ok,

然后我们在WebContent目录下创建一个文件,里面写hello world!。

以上图的界面上出来2个图标,一个是struts2的action节点,一个jsp result节点,然后我们点这个按牛,创建一个link,把鼠标移到hello world上,按下鼠标左键不动,然后拖到hello jsp上释放左建,在下方的编辑区会出来如图所示:

Link name也就是result的名字,fwd type也就是类型,可以选择多种结果类型,这里选择distpacher,参数可以根据你的需求选择是否加入。最后点ok。

Link就别创建成功了:

以上已经创建好了一个action名字叫hello,也有一个执行结果success了

接下去要运行这个web项目,但还要添加tomcat5.5

SourceWare Info Tech Ltd. Page:

10

选择server,然后点下一步,

SourceWare Info Tech Ltd. Page:

11

选tomcat5.5,

把项目加进去

这个时候去项目的server视图可以看到tomcat5。5了:

SourceWare Info Tech Ltd. Page:

12

先运行按牛运行一下。

可以看到ie上输出的预期的结果!

小结:发现和webwork相比,action类可以是一个pojo类,不继承任何父类,默认只要有一个public String execute 方法即可,也可以指定另外其他的方法。

四、 Velocity开发

现在我们要加入velocity模板技术,也就是让action配置的输出结果是一个velocity模板文件。

首先我们在web-inflib目录下拷贝以下jar包文件:

1.

2.

3.

4.

,刷新整个项目,查看是否在web-inflib目录下已经包含这些jar包。

如前所示,我们加入一个struts2 的结果,label写error,path写/,然后创建一个action到这个result的link :

SourceWare Info Tech Ltd. Page:

13

点ok,

创建一个文件,里面写$hello

修改类:

运行tomcat,则:

SourceWare Info Tech Ltd. Page:

14

注意:如果jar包没有加全,有可能会报:

No mapping found for dependency [type=ty 类似的错误!

采用velocity开发,会丧失jsp标签库的强大威力,因此建议采用freemarker模板技术,以便更好的和ajax技术相结合。

五、 Jsp struts2标签库开发

在先前建立的当中加入如下代码:

<%@ taglib uri="/struts-tags" prefix="s"%>

第一行代码是定义标签库,即使用哪个标签库,以及前缀是什么。

第二行是一个输出hello这个属性内容的标签。

注意中文乱码问题:

编辑ties文件,把ng=UTF-8修改成

ng=GBK,或者ng=GB2312

GBK的字符集要比GB2312大,因此如果使用GB2312会导致一些生僻的汉字无法正常显示,建议采用GBK.

另外jsp的contentType要定义字符集GBK,代码如下:

<%@ page contentType="text/html; charset=GBK" language="java"%>

SourceWare Info Tech Ltd. Page:

15

六、 Freemarker模板技术开发

按先前的方法,增加一个result,名字是input,然后对应的结果页面是,

如图:

这样就建立了一个result类型为freemarker的结果页面。

编辑文件,输入以下内容:

<#if hello=="2">input content is ${hello}

Test hello: ${user!"user is null"}

${user!}

并修改HelloAction类:

public String execute(){

n("hello world!");

if(("1")){

return "success";

}else if(("2")){

return "input";

}else{

return "error";

}

}

测试一下:

SourceWare Info Tech Ltd. Page:

16

七、 Xslt模板技术开发

采用xslt模板技术一般需要输出一个xml文件,如先前所述,增加一个xslt 类型的result,页面名字为:,

如图:

XSLT是用来对XML文档进行转化的一种语言。它是XSL(可扩展样式表语言)的一部分。XPath是用作对XML文档各部分进行定位的语言。在XSL样式中,我们可以利用XPath表达式以一种紧凑而高效的形式选取XML文档的一部分进行处理。

通俗地讲,就是增加了一个result类型为xslt的结果:

/

如果 /不些,则输出一个xml文件,这个文件是一个xml的数据模型文件,那么现在我们要利用xslt去把这个xml里的数据解析出来,从而形成一个我们想要的html页面,因此我们配上这个转换模板文件,

文件内容可以为:

xmlns:xsl="/1999/XSL/Transform">

则输出了hello这个变量;xslt文件的查找xml数据语法是通过xpath来查找的,具体语法可以参考相关文档。

SourceWare Info Tech Ltd. Page:

17

八、 Spring整合struts2开发

首先给我们的web项目加上spring功能,编辑文件

加上一个spring的listener:

tLoaderListener

当启动tomcat的时候,会自动查找WEB-INF目录下的文件,并加载实例化里面所配置的所有bean,所以要在WEB-INF目录下创建一个文件,并把需要初始化的所有bean都配置在里面,比如,如果使用了ibatis 连接池等,都在里面实例化。

注意:如果想更换缺省目录或文件名,则需要在里加入以下参数:

contextConfigLocation

/WEB-INF/classes/

把spring拷贝lib目录下。

新建一个 这个类,里面写一个方法:

public String getUsername(){

return "hello kobe!";

}

编辑文件,增加刚才编写的类,让spring去实例化它!:

这样我们就知道当tomcat启动的时候,就会自动实例化一个MyDao对象了;

接下去我们要在HelloAction这个类里增加一个myDao这个属性,别忘记添加set get方法。

把ties文件里

Factory = spring注释去掉,且保证有:

re = name

SourceWare Info Tech Ltd. Page:

18

注意:struts的版本要匹配,spring版本要2.0以上

我们这里使用的 struts版本是2.0.11,所以还要加入这个jar包。

不加这个 jar包会报:

Cannot locate the chosen ObjectFactory implementation: spring - [unknown

location]

加的版本不对会报:

严重: Exception starting filter

Dispatcher

eException: eException:

eException:

encyException:

nerImpl$MissingDependencyException: No mapping found for dependency [type=,

name='Respect'] in public

SpringObjectFactory(,,,tContext).

at

nerImpl$(:290)

at

nerImpl$(:117)

严格按以上要求操作,应该可以看到结果了

1.第一种集成spring方式:

在action里只要有跟spring定义的bean id相同的名字,就会被自动注入进去,

2.第二种集成spring方式:

在里加入:

class="ction">

然后修改action配置,把

name="hello">

修改成:

执行一下发现,工作正常!不用再去自己在action里编写得到dao的方法了!

SourceWare Info Tech Ltd. Page:

19

九、 iBatis开发

首先配一个数据库的连接池,这里采用已经非常熟悉的proxool连接池,因为它有网络中断以后自动重连的机制:

在里增加以下代码:

class="lDataSource"

destroy-method="close">

jdbc:jtds:sqlserver://192.168.25.5:1433;DatabaseName=test;user=sa;password=smsserver2004;

sa

smsserver2004

spring

告诉spring 实例化一个dataSource对象(即连接池对象,因为lDataSource这个类继承了urce)

注意:这2个标签对之间不要有空格回车,否则会报类找不到,或者driverurl不适合等错误信息。

在lib目录下增加和这2个jar包,一个是连接池第3方jar包,一个连接池使用的sqlserver的连接驱动包;

在里再增加一个bean:

class="urceTransactionManager">

SourceWare Info Tech Ltd. Page:

20

实例化一个spring提供的事务处理对象。

然后把和拷贝到lib目录下,增加ibatis的jar包。

然后再在里增加一个bean:

class="ClientFactoryBean">

classpath:

即实例化一个sqlMapClient,这样就知道去哪儿找sqlmap文件了;

在src目录下创建一个文件:文件

里面写:

PUBLIC "-////DTD SQL Map Config 2.0//EN"

"/dtd/">

maxSessions="128" maxTransactions="8" maxRequests="128"

useStatementNamespaces="false"/>

即告诉ibatis在哪儿找具体的map配置。

让先前写的MyDao 继承 extends SqlMapClientDaoSupport

修改代码:

public String getUsername() {

}

在下创建文件:

"/dtd/">

return (String) MapClientTemplate().queryForObject(

"getUsername", null);

SourceWare Info Tech Ltd. Page:

21

在页面输出dao的getUsername方法看看,是否能得到数据库值。

为了避免在HelloAction当中直接使用实现类,实际使用当中应该创建一个IMyDao接口类,把暴露给action的方法放在ImyDao接口当中,而MyDao具体实现这个类即可。

因此我们再创建一个接口类:IMyDao,里面定义一个方法String getUsername();

接下去增加事务处理功能,事务处理的用途即保证多个数据库操作要么全部成功,要么全部失败。

在里增加一个bean

class="ctionProxyFactoryBean">

PROPAGATION_REQUIRED,-Exception

PROPAGATION_REQUIRED,-Exception

PROPAGATION_REQUIRED,-Exception

PROPAGATION_REQUIRED

更改HelloAction里的属性myDao为myDaoProxy:

private IMyDao myDaoProxy;

如果采用第2种方式注入dao还要把:

class="ction">

修改成:

class="ction">

SourceWare Info Tech Ltd. Page:

22

修改内容:

error page

$rname()

Ie里测试结果为:

十、 struts2增加ajax效果

struts2和dwr整合配置:

在里增加一个servelt:

dwr

vlet

debug

true

dwr

/dwr/*

然后在WEB-INF目录下创建一个的配置文件,里面输入:

SourceWare Info Tech Ltd. Page:

23

"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"

"/dwr/">

match="tionAwareSupport"/>

import ;

import idator;

(String, String, Map);

]]>

具体含义可以去网上查找相关的文档,这里只介绍如何配置。

另外要注意的是里原先的struts配置要修改一下:

Dispatcher

/*

要改成/*,拦截所有请求,否则会出现struts/dojo/找不到等错误!

把 包加到lib目录下,注意不要使用2.0的。

编辑先前的页面:

SourceWare Info Tech Ltd. Page:

24

删除原先的所有内容,然后加上如下代码:

<%@ page contentType="text/html; charset=GBK" language="java"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

Ajax Examples

Div 1



A submit button, with an indicator

src="${tPath}/images/"

alt="" style="display:none"/>

href="%{ajaxTest}" align="left" indicator="indicator"/>



--------------------------------------------------------------

这个struts标签是导入ajax所要用到的所有js文件。

是设置一个url变量.

Ie测试一下:

SourceWare Info Tech Ltd. Page:

25

点submit按牛:

点了submit,只刷新局部div里的内容。

十一、 struts2里加入ZK

这里只介绍如何在struts2里加入zk,采用jsp tag方式来实现。

下载zk jsp tags实现包,把加入到lib目录下。

编辑文件,往里面加入支持zk的 servlet:

ZK loader for ZUML pages

zkLoader

ayoutServlet

update-uri

/zkau

注意load-on-startup一定要加。

然后再加一个servlet:

拷贝其他jar包:

1.

2.

3.

4.

5.

6.

7.

8.

9.

把以上jar包都加到lib目录下。

把先前写的清空,然后输入:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="/jsp/zul" prefix="z" %>

auEngine

/zkau/*

pdateServlet

lass>

The asynchronous update engine for ZK

auEngine

zkLoader

*.zul

1

SourceWare Info Tech Ltd. Page:

27

"/TR/html4/">

A simple Capcha Demo

valid Comment, do not use

<%-- this is Jsp

XML comment. --%>

ZK Jsp Capcha Demo

A simple Capcha component demo.


Same as the demo in zkdemo

:

site.

width="280px">

height="50px"/>

onClick="Value(); =;"/>

Assign one: =;

; =;"/>

页面上访问一下测试:

SourceWare Info Tech Ltd. Page:

28

接下去谈一下如何在zk标签里使用动态数据。

十二、 Hibernate开发

>>待续…

SourceWare Info Tech Ltd. Page:

29


本文标签: 文件 文档 安装 插件 使用