MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx

上传人:b****1 文档编号:314001 上传时间:2023-04-28 格式:DOCX 页数:19 大小:25.89KB
下载 相关 举报
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第1页
第1页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第2页
第2页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第3页
第3页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第4页
第4页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第5页
第5页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第6页
第6页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第7页
第7页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第8页
第8页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第9页
第9页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第10页
第10页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第11页
第11页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第12页
第12页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第13页
第13页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第14页
第14页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第15页
第15页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第16页
第16页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第17页
第17页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第18页
第18页 / 共19页
MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx

《MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx》由会员分享,可在线阅读,更多相关《MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx(19页珍藏版)》请在冰点文库上搜索。

MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发.docx

MyEclipse三大框架SSHStruts2+Spring+Hibernate快速整合开发

MyEclipse7.5快速半手工开发SSH2(Struts2+Spring+Hibernate)应用

1.新建一个WebProject,命名为:

struts2_template

2.导入样例程序struts2-blank-2.1.8.war中lib下的包

(暂时只需要这几个,网上提醒不能随便加包!

):

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

freemarker-2.3.15.jar

ognl-2.7.3.jar

struts2-core-2.1.8.jar

xwork-core-2.1.6.jar

如果出现类似Unabletoloadconfiguration.-bean-jar:

file:

的错误,一般可能是导入的jar包有问题了。

但是,当你更正了问题之后

错误还出现!

这是因为你没有将发布到tomcat中的应用移除干净!

方法是:

退出MyEclipse,到workspace文件夹中,找到原来的工程文件夹,删除之;

然后再到workspace的

.metadata\.me_tcat\webapps

文件夹中,找到相应的发布文件夹也删除之,然后重新启动MyEclispse就可以了。

 

提醒:

如果你做了许多工程,后来删除了。

其实都还在

.metadata/.me-tcat/webapps下面!

如果他们有错,就会影响到你后来的工程!

3.在web.xml中加入支持struts2的filter,并将mapping设为/*

Filter的名字叫“struts准备与执行”,就是strutsPrepareAndExecute,敲入前面几个字母系统就会找到了。

--------------------到此为止,我们的工程已经可以支持struts2了。

下面是实验--------------

4.在src目录中拷贝一个struts.xml作为书写配置的起点

(注意!

和以前版本不同,是src目录!

一个最简单的配置文件包括下面内容:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

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

/index.jsp

--Addactionshere-->

--Addpackageshere-->

 

其中重要的其实就一个:

action的执行和导航。

上面的

表示,当从URL请求名为HelloWorld的action时候,实际执行的是example.HelloWorld类。

附注:

类的分包:

在src下面建包即可。

/index.jsp

表示当HelloWorld返回字符串“gotoIndex”时候,跳转到/index.jsp。

5.下面建一个实现上面action的类。

先在src下面建一个package,名为example;

下面建一个HelloWorld类,继承ActionSupport(在com.opensymphony.xwork2中)

里面就一个函数:

publicStringexecute()throwsException{

System.out.println("Hellofromwww.WarpSpeedE");

return"gotoIndex";

}

6.运行一下试试,访问URL为/HelloWorld.action

浏览器还是显示index.jsp,因为这个action自动跳到index.jsp了,

但console窗口却出现了提示,说明该action已经运行。

=========好了,我们的action已经配置成功了===========

7.下面我看看表单的提交;表单当然是放在jsp文件中。

我们将jsp文件放到WebRoot下面(!

这才是网站的根目录!

)。

作为实验,我们建一个子目录login来存放我们的样例表单login.jsp;

(遗憾的是现在还没有理想的可视化的编辑struts2表单的IDE)

一个最基本的jsp文件如下:

<%@pagecontentType="text/html;charset=UTF-8"%>

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

也就是说,最上面两行最关紧要!

拷下即可。

然后,使用DreamWeaver之类,编写相应的表单:

下面是使用Eclipse自动生成的带表单的一个简单页面:

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

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

www.WarpSpeedE

---->

Login:

Password:

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

我们做一下修改即可将它变成struts2的jsp表单页面:

(1)第一行替换成struts2要求的那两行<%@...

(2)替换所有表单字段。

例如:

替换成:

formaction="Login">

注意:

这里的action="Login"指明要提交给一个名为Login的action

换成:

textfieldname="login"/>

替换成

passwordname="password"/>

替换成:

submit/>

惊奇小发现:

我在MyEclipse7.5中发现一个WebPageEditor,用这个编辑器可以插入struts2的标签!

虽然还很是primitive,但总是好多了,。

好了,改名存盘为login.jsp。

8.我们的action还没有呢!

好办,将HelloWorld.java拷贝粘贴一个出来Login.java:

packageexample;

importcom.opensymphony.xwork2.ActionSupport;

publicclassLoginextendsActionSupport{

publicStringexecute()throwsException{

return"toIndex";

}

}

再做这样一些工作:

(1)把表单字段写出来:

privateStringlogin;

privateStringpassword;

(2)菜单Source->GenerateGetters&Setters生成所有的getter和setter方法。

注意了啊!

看似简单,实际上内涵极为深奥:

这里的setter可是struts2“注入”调用的

(当我们执行execute()的时候,表单字段已经设置好了!

(3)修改执行函数,把表单的输入打印到控制台(console,这样打印没什么用处,只是试验一下而已):

publicStringexecute()throwsException{

System.out.println(login+":

"+password);

return"gotoIndex";

}

9.好了,现在东西都有了,只要配置一下struts.xml,就可以让表单login.jsp提交给Login.action了:

拷贝一份原来的action,修改一下:

/index.jsp

10.部署并运行看看

---hmm,还可以,console打印出来输入的值,页面跳到index.jsp了。

但是!

好像输入表单本身的现实有些怪!

为什么呢?

看看页面源码:

怎么多出来许多table标签呢?

-----原来,默认模式下,struts2会将你的form标签自动加上table标签!

可是我们已经做好了table了,美工过了!

对策:

简单:

类似下面那样加上这样theme属性即可:

textfieldname="login"theme="simple"/>

要求struts使用simple主题,它就不多事了。

11.数据的显示:

Struts将action处理的数据(包括表单提交给action的数据)和应用(Application)范围内的数据

都存储在一个叫做“值栈”(valueStack)的地方;有很多种方法可以从这里取出值来:

我们将struts.xml中Login.action的配置改一下,让它转到logok.jsp页面:

/login/logok.jsp

然后做一个logok.jsp,放到WebRoot/login目录下,其内容主要是在body标签中间,加上:

textname="login"/>


propertyname="login"/>


${login}


这样3行代码;

运行一下试试。

可以看到,三种方法都可以将输入的用户名显示出来。

12.老革命的老问题:

汉字问题

试试输入一个汉字,显示出来的是乱码。

解决:

方法很多;不过既然我们要整合Spring,不如现在就使用Spring的解决模式:

13.加入Spring支持:

在工程名上点鼠标右键,在菜单中选择“MyEclipse”->“AddSpringCapabilities”;

选中所有Spring开头的包;

选择“拷贝支持包到lib目录”;另注意:

(1)注意将applicationContext.xml放到WEB-INF/目录下;

(2)增加一个listener:

ContextLoaderListener

(3)删除掉重复的包:

asm和cglib

14.解决汉字乱码问题:

在web.xml中,增加一个filter:

org.springframework.web.filter.CharacterEncodingFilter

并设置两个参数:

encoding=UTF-8

forceEncoding=true

设置其mapping为/*

再输入汉字试试,没问题了吧!

(没有告诉你的小秘密:

如果你还是出错误,那么在web.xml的filter配置中,

看看是否encodingfilter放到了strutsfilter的后面...提到(map到)前面来!

15.增加Hibernate支持

现在干脆将Hibernate的支持一并加入:

只需要注意几点:

选中前面三个包;拷贝到lib目录;使用Spring的配置文件。

16.启动数据库。

我们使用MyEclipse自带的“德贝(Derby)”数据库:

Window->Show->DBBrowser中,双击MyEclipseDerby即可启动数据库。

17.逆向工程生成ORM对象和DAO类

在Derby数据库中,找到CLASSICCARS,右击CUSTOMER表,选择Hibernate逆向工程

选择Javasrcfolder(我们以前已经创建了一个src/hib目录,就用它)

选中三个复选框,但不生成抽象类。

Finish!

18.看看我们完成了什么:

hib目录下面生成了许多类,其中最重要的是CustomerDAO,我们可以通过其中的

getFromApplicationContext(ApplicationContextctx)

静态方法得到它的一个实例,就可以开始数据操作了!

19.将HelloWorld.java复制一个到ListCustomers.java

然后修改其execute方法:

publicStringexecute()throwsException{

ApplicationContextct=WebApplicationContextUtils

.getWebApplicationContext(ServletActionContext

.getServletContext());

CustomerDAOdao=

CustomerDAO.getFromApplicationContext(ct);

Listlist=dao.findAll();

intn=list.size();

for(inti=0;i

Customerc=list.get(i);

Stringname=c.getCustomername();

Stringphone=c.getPhone();

System.out.println(name+":

"+phone);

}

return"gotoCustomerList";

}

直接从浏览器地址栏访问一下这个action:

http:

//localhost:

8080/ListCustomers

会发现客户的信息已经打印到console中了,只是由于没有配置导航,所以页面显示404错误。

没关系,下面fix这个问题。

遗留问题:

网上有说:

action当然不应该封装业务逻辑,但是action是controller,比如在

一个action里面可能会由几个BusinessService的方法组成一个流程,

如果仅对service的方法实现事务控制,那如果流程中某一个service

的方法出现了问题,流程中之前调用的其他service怎么回滚呢。

20.在页面view显示结果

先在struts.xml中配置导航:

/login/customerlist.jsp

上面导航要求控制跳转到customerlist.jsp,因此我们需要在login子目录中,新建一个customerlist.jsp,其内容可先从原来的页面中拷贝过来。

核心代码:

iteratorvalue="list">

name:

propertyvalue="customername"/>

city:

${city}

address:

textname="addressline1"/>

iterator>

这里面,我们尝试了几种不同的表现方法。

首先,是

iterator>标签。

它的作用是遍历由value指定的“集合型”对象(一般为Map或List类型);

然后是

property>标签,它的作用是将iterator中的对象的属性取出来。

propertyvalue="customername"/>的作用相当于调用list的getCustomername()方法。

从上面的代码中可以看出,除了使用

property>之外,我们还尝试了另外两种标签方法,一是

text>,它可以生成一个国际化的信息文本;一个是${city},好象是OGNL表达式语言。

细节问题以后研究。

网上说:

既然是struts2,就尽量用struts2的标签。

又说:

OGNL是主流,和

…>配合使用

注意:

上面的代码有一个重大问题!

实际上它的运行结果是空,不显示任何东西!

为什么呢?

因为:

看看上面execute()方法中的一个变量声明(带下划线的那句):

Listlist=dao.findAll();

这个变量(属性)就是我们在

iterator>标签中要迭代(循环)的那个对象。

但是,迭代的对象必须是action类的属性!

而且必须有getter方法!

所以,ListCustomers.java类中必须先声明一个属性:

privateListlist;

然后,再加入一个list的getter方法:

publicListgetList(){

returnlist;

}

(而在execute()内部的list前面的类型声明需要去掉。

 

一个实例:

简单新闻发布

1.创建一个表:

表名:

MSG

字段:

id,integer,primarykey

Au,varchar,40

Msg,varchar,255

2.hibernate逆向工程(注意第二页要选hibernatetype,即使用hibernate数据类型,assigned)

3.设计流程(struts.xml):

表单页面index.jsp包含输入表单和数据显示两个部分

action类aaa.java用来接受表单数据。

Action将数据写入数据库后再回去(跳转)向index.jsp

/index.jsp

/index.jsp

4.建struts2表单,其中msg是新闻对象

formaction="aaa"method="post"theme="simple">

ID:

textfieldname="msg.id"value="0">

textfield>

MSG:

textfieldname="msg.msg">

textfield>

AU:

textfieldname="msg.au">

textfield>

submit>

submit>

form>

5.在aaa.java中使用属性msg来接收表单数据。

写入数据的“三板斧”是:

1)获取应用程序上下文

2)获取DAO对象实例

3)获取Session对象并启动事务处理

//1

ApplicationContextct=WebApplicationContextUtils

.getWebApplicationContext(ServletActionContext

.getServletContext());

//2

MsgDAOdao=MsgDAO.getFromApplicationContext(ct);

//3

Sessions=dao.getSessionFactory().openSession();//HibernateSessionFactory.getSession();////

Transactiontx=s.beginTransaction();

//////////////////////下面是正是操作数据库

try{

dao.attachDirty(msg);

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

//////////////////////最后是收场:

完成事务过程

mit();

6.运行程序看看,数据是否已经写入表中

7.如果你希望在页面显

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2