ssh2框架 的一个用例实现.docx
《ssh2框架 的一个用例实现.docx》由会员分享,可在线阅读,更多相关《ssh2框架 的一个用例实现.docx(17页珍藏版)》请在冰豆网上搜索。
ssh2框架的一个用例实现
用例11.2乘务员执行发动机异常时调度员的安排
功能描述1
实现步骤2
1.连接数据库2
注意事项:
4
程序设计6
1.准备工作6
2.编写Dao层代码7
3.编写Service层代码8
4.编写Action层代码9
5.编写xml配置文件10
6.编写jsp代码11
附件:
12
1.main.jsp文件12
1.2实现效果13
为了帮助大家更好的完成用例的程序设计,我写了如下文档,该文档描述了一个简单的用例是如何用jsp实现的。
本用例采用struts2spring和hibernate框架实现,即ssh2框架。
大家如果有什么问题,欢迎和我讨论。
功能描述
主要的页面跳转如下图所示:
发动机异常调度安排图
特殊说明:
由于自己对于css的理解不是很深,可能在页面显示的效果会出现文字错位的情况,还请见谅。
实现步骤
1.连接数据库
点击Connection,选择mysql数据库。
会出现如下的对话框,需要填写ConnectionName该名字随意填写。
然后输入你的用户名密码,密码就是你的mysql数据库的密码。
点击TestConnection,如何该连接成功的连接到了数据库当中,就说明连接正常。
然后右键该连接,选择NewDatabase
右键bus_test选择ExcuteSQLFile就可以将数据库导入到navicat中了。
然后右键该连接,选择Refresh,再点击bus_test就可以看到里面的Tables了和各个用例所需要的数据库了。
注意事项:
老师给的数据库的默认用户名root密码为123456。
如果密码并不是123456,你需要在myeclipse中编辑hibernate.cfg.xml文件并设置自己的数据库密码(我的是111111):
打开MYSQL,你可以看到,ServercharactersetDbcharacterset,Clientcharacterset
Conn.Characterset都是utf8,只有保证你的机器的编码都是utf8,才可以保证在Dao层进行select查询时,得到正确的结果。
如果你的系统并不是utf8,你需要在你电脑中重新配置mysql
从开始菜单中,选择MySQLServerInstanceConfigWizard重新配置mysql
在选择字符集的那一步选择,然后下一步,逐步的就可以了。
当然重新配置完数据库,如果还是不行,你就需要将navicat中的那个connection删掉,重新新建一个。
程序设计
1.准备工作
第一步,将素材加入到项目中,也就是说需要将素材中的静态页面全部复制到Webcontent目录中(选择全部替换)。
并在素材中找到html文件,并将html文件的后缀名改成.jsp复制到Webcontent/common目录中。
也就是common目录中存放的都是前台需要显示的页面。
(见附件1.1)。
2.编写Dao层代码
下面是真正的要编写程序了,这也是整个的重点。
Entity层已经通过hibernate自动生成,而Dao层,Action层,Service层需要我们编写代码。
而Dao层是由两个部分构成的,也就是接口和实现,所有的实现写在Dao.impl这个包中。
Dao层的所有的接口写在Dao包中,它的结构如下图所示:
impl中存放实现。
右键Dao包,新建interface名字叫IUnusualBusDao,点击Finish
Dao层是ssh2框架中较为底层的内容,所有的有关数据库查询语句都是在Dao层来实现的,而entity层可以认为是将从Mysql中的查询结果返回的实体层,这里面的每一项都是和数据库中的一个数据表对应。
也就是将Dao层的结果返回给entity层。
在u.bus.Dao.IUnusualBusDao.java中填写具体的数据查询方法。
比如我只要实现一个方法,那就是queryBus()函数。
publicinterfaceIUnusualBusDao{
//保存人员
//获得所有人员
publicListqueryBus();
}
然后在Impl子包中添加类用来实现接口,相关代码如下:
publicclassUnusualBusImplextendsBaseDaoimplementsIUnusualBusDao{
publicListqueryBus(){
//TODOAuto-generatedmethodstub
Stringhql="fromUnusualBusascrewwherecrew.isDeleted='0'andcrew.reason='发动机异常'";
Listlist=super.executeQuery(hql);
returnlist;
}
}
3.编写Service层代码
Service层和Dao层的代码时大同小异的。
也是需要写接口和实现。
Service层主要是处理业务,相当于是一个代理,负责连接Action层和Dao层。
如果直接给Action层提供Dao层的内容,这么做不安全,而且ssh2框架也不允许你这样做。
我们使用GetEBus得到Dao层传递过来的数据。
新建接口,接口名:
IBusRoundExceptionManageService
publicinterfaceIBusRoundExceptionManageService{
publicListGetEBus();
}
在impl子包中,写相应的实现,这个比较简单,直接返回dao层的结果。
publicclassBusRoundExceptionManageServiceimplements
IBusRoundExceptionManageService{
privateIUnusualBusDaounusualbusdao;
@Override
publicListGetEBus(){
//TODOAuto-generatedmethodstub
returnunusualbusdao.queryBus();
}
}
4.编写Action层代码
注意事项:
无论是在Action层Service层,还是Dao层,都需要右键source,填写get和set方法。
Action的作用就是:
当用户点击某个连接或按钮时,需要调用你所设置的Action的相应方法,而这些方法中调用Action层中的service对象处理事务逻辑。
大部分的代码,可以参考LoginAction的代码。
大家可以从下面的代码看出,
packageu.action;
importu.service.IBusRoundExceptionManageService;
importu.vo.BusRoundExceptionManage;
importcom.opensymphony.xwork2.ActionContext;
importjava.util.List;
importu.entity.UnusualBus;
importmon.base.BaseException;
publicclassBusEngineErrorManageActionextendsBaseAction{
privatestaticfinallongserialVersionUID=1L;
publicListlist;
privateBusRoundExceptionManagemanage;
privateIBusRoundExceptionManageServiceerrorservice;
publicUnusualBusmybus;
publicUnusualBusbusinfo;
Listgoodlist;
publicStringshow()
{
if(errorservice.GetAll().isEmpty())
return"failed";
Listbuslist=errorservice.GetEBus();
ActionContext.getContext().getSession().put("buslist",buslist);
return"success";
}
publicStringshow1()
{
return"success";
}
publicStringshow2()
{
return"success";
}
publicStringshow3()
{
return"success";
}
}
5.编写xml配置文件
这里的注意事项:
所有的类名和变量名必须和实际的完全一致,否则系统会抛出各种异常。
以上我们已经写完了大部分的代码,大家还需要进行service,dao,action三层的依赖注入。
1.在src目录底下的applicationContext-action.xml中添加如下代码,这个service是action层的变量名。
在applicationContext-dao.xml中添加如下代码,beanid中的unusualbusdao就是在service层我所用到的代码。
这里需要指明其具体的实现的位置。
在applicationContext-service.xml中添加id为errorservice的部分,并且unusualbusdao是service层用到的变量名,需要在这里指明。
在struts.xml中,需要指明某个操作在Action层的实现方法。
这里面的action并不是真正意义上的action,你可以理解为一个代号。
一个标记,留着在jsp中调用,可以看到resultname实际上是你调用的相应的方法所对应的返回值,然后struts看到返回值之后就跳转到相应的页面中。
6.编写jsp代码
见附件1.1中所示,在main.jsp中
注意事项:
在main.jsp及其他的页面中如果你发现跳转之后没有任何的样式,说明你的css路径设置的有问题。
将里面的../css/main.css改成./css/main.css。
其中图片的设置也是如此。
在main函数中加入了一个超链接。
该超链接的作用是当点击该超链接时,去使用action的相应方法。
而BusEngineListManageAction在struts.xml中定义。
也就是说,当点击这个超链接时,会使用BusEngineErrorManageAction中的show方法,show方法返回"success",根据"success",跳转到engine_abnormal.jsp页面。
代码如下图所示:
urlaction="BusEngineListManageAction"/>">发动机异常
这里使用了struts标签,所以在jsp文件的开头需要添加相应的配置,代码如下,表示以s为前缀的标签为struts标签。
<%@tagliburi="/struts-tags"prefix="s"%>
页面跳转到engine_abnormal.jsp中
在相应的部分填写代码:
<%!
Listlist1;
%>
<%
Mapmymap=ActionContext.getContext().getSession();
list1=(List)mymap.get("buslist");
Iteratoriter=list1.iterator();
while(iter.hasNext())
{
UnusualBusmybus=iter.next();
%>
车号为<%=mybus.getBusId()%>于<%=mybus.getUnusualTime().toLocaleString()%>发生<%=mybus.getReason()%>
urlaction="orgAction"/>">按原计划运营
urlaction="orgLocalAction"/>">原地等待检修
urlaction="orgGoAction"/>">开往维修厂
<%
}
%>
附件:
1.main.jsp文件
注意编码格式,每个jsp都要加上前三行。
1.2实现效果
自动跳转到该页面,然后用户可以选择三种方案:
1按原计划运营,2.原地等待检修,3.开往维修厂。
当点击按原计划运营时,显示
当点击原地等待维修时,显示
当点击开往维修厂时,显示
我上面列了最简单的一个实例,实现了一个简单的用例,希望能够给大家提供一些启发。