GWT版——图书管理程序开发完工

用GWT(Google-Web-Toolkit)开发的图书管理系统终于完工了。总体评价:

1.界面不美观,简直是很丑陋。因为个人比较懒,而且对艺术一窍不通,再加上是从头开始学习这个东西,所以就比较专注于功能的实现,而不是界面了。

2.功能少。只有公告,用户信息显示,添加和删除,借还书功能。而且没有实现分页功能,这个最失败,今天检查作业的时候老师居然让我一直添加信息,所以一下就把我的这个漏洞给暴露了,哎。关键是添加分页功能有点麻烦,需要自己编写几个控件,又要把函数编写得天衣无缝,现在时间又紧,所以只好作罢。

3.模块化还不错。这次自认为在数据隐藏和模块化部分做的还行。相关的类都放在了一起,而且有相同功能的类都让我提取出来建立了父类,重构真是无处不在阿。正如《重构》中说的那样:“花一点时间重构是值得的”,现在代码优雅多了。

GWT最大的好处就是用JAVA编码,不过个人认为其中的控件布局还挺简单,只要你熟悉JAVA,做几个练习就能掌握了,个人建议把那个GWT自带的展示 Widget 的例子敲一遍。个人认为最不好懂的就是GWT中的异步传输,就是和server端交互的那一段,虽然GWT的文档中有说明,不过理解起来还是有点困难,大家最好看一下GWT自带的DynaTable例子,里面虽然没有连接数据库,但是给出了如何与服务器端交互。我在这里以DynaTable(在Gwt中的sample文件夹里)再说明一下步骤:

1.在client包里建立一个接口:SchoolCalendarService,它必须继承com.google.gwt.user.client.rpc.RemoteService;,其中声明一个方法:

Person[] getPeople(int startIndex, int maxCount);

这里的Person是一个类名,保存关于Person的信息,因为这个方法返回一个对象数组,所以要这样声明。

2.再在client中建立一个接口:SchoolCalendarServiceAsync,不用从任何类继承,里面也有一个方法:

void getPeople(int startIndex, int maxCount, AsyncCallback callback);

它和上面建立的SchoolCalendarService只有两个地方不同:

1.返回类型是void,这点要记住。

2.多了一个参数:AsyncCallback 。这个是用来异步传输的,这也是返回类型是void的原因。

3.在Server端建立一个类:

public class SchoolCalendarServiceImpl extends RemoteServiceServlet implements
SchoolCalendarService

它必须执行第一步声明的SchoolCalendarService,并实现它的方法。这里有一个问题:当我从数据库中读取数据并传给对象数组的时候,如果直接对这个对象数组操作,会出现错误。我不知道怎么回事。不过可以先声明一个ArrayList,然后没读取一条记录,就声明一个对象,赋值之后再添加到ArrayList中,最后再声明一个对象数组,操作后再传回去,象这样:

public ArrayList content = new ArrayList();
…………
while(rs.next()){
BookInfo temp = new BookInfo();
temp.setTitle(rs.getString("title"));
temp.setAuthor(rs.getString("author"));
temp.setIndex(rs.getString("index"));
temp.setPlace(rs.getString("place"));
temp.setPrint(rs.getString("print"));
temp.setPublish(rs.getString("publish"));
content.add(temp);
}
…………
BookInfo[] results = new BookInfo[content.size()];
for(int i=0;i<content.size();i++)
results[i] = (BookInfo)content.get(i);

return results;

4.最后在客户端获取数据的时候,这样做(这个也可以从文档中看到):

BulletinServiceAsync bulService = (BulletinServiceAsync)GWT.cr&#101;ate(BulletinService.class);
ServiceDefTarget target = (ServiceDefTarget)bulService;
target.setServiceEntryPoint(&#34;/bulletin&#34;);

AsyncCallback callback = new AsyncCallback(){
public void onSuccess(Object result){

results = (PublicInfo[])result;
……

}

public void onFailure(Throwable caught){
…………
}
};
bulService.getBulletin(callback);

这里我只想着重说明红色部分,其它的说明文档中有详细说明。
target.setServiceEntryPoint(&#34;/bulletin&#34;);
这一点很重要,你设置这个的时候,必须在程序的xml文件中同时设置servlet,这样写:

<servlet path=&#39;/bulletin&#39; class=&#39;com.dreamer.server.BulletinServiceImpl&#39;/>


必须要这样做,不然就会出错!!

results = (PublicInfo[])result;

由于传回来的只是一个对象,所以你必须使用强制类型转换才能操作。

以上就是与服务器端交互的说明。

再来说一下我自己的程序。我的程序最外层是一个DeckPanel,它有一个z坐标,所以它每次都显示其中的一个子页面,我就是用这个来做页面切换。后台用了ACCESS数据库,用Eclipse编码,使用JDBC-ODBC连接数据库,不过如果要连接数据库比须要先配置ODBC。其它的东西我就不多说了。如果有谁需要源代码的话,可以给我留言,留下E-Mail,我可以给你传过去。

更新:这个东西是我好久前做的,当时GWT还是beta,而且版本很低,现在估计已经有了很大改进,所以我这个东西早就是老古董了,代码我好像也丢了,就不发送了,抱歉



本文链接: http://www.zhuoqun.net/html/y2006/150.html 转载请注明出处,谢谢。

TrackBack引用地址:http://www.zhuoqun.net/html/y2006/150.html/trackback

相关日志


Posted in 刻录时光.

41条评论

  • At 2006.07.30 09:05, julycool CHINA said:

    谢谢,能否给我份源码?
    julycoolboy@gmail.com

    • At 2006.08.04 10:39, 猪小弟 CHINA said:

      谢谢,能否给我份源码?
      gaolei_1024@163.com

      • At 2006.08.10 15:22, tiankong CHINA said:

        能否发份源码,学习下!
        邮箱:yangbaobao8827@163.com

        • At 2006.09.25 13:21, 一顿麻辣 CHINA said:

          谢谢 拜读一下 能否给我份源码? jiujiu_77@163.com

          • At 2006.09.25 23:04, jacky CHINA said:

            谢谢!能否给份源码学习一下!polkmn0987@163.com

            • At 2006.09.26 08:41, tim CHINA said:

              刚学习GWT,能否发一份源码学习,谢谢!!!

              • At 2006.09.26 08:42, tim CHINA said:

                刚忘了写邮箱了,zyang-093@163.com 谢谢

                • At 2006.10.19 19:43, Pine CHINA said:

                  麻烦你给我发一份,谢谢。Pine_850827@hotmail.com

                  • At 2006.10.20 16:25, bingsnow CHINA said:

                    谢谢,学习GWT中,一直没找到数据库的好方法,麻烦给一份代码吧。
                    huangh0621@gmail.com

                    • At 2006.11.04 02:49, Allen CHINA said:

                      请给我发一份源码,谢谢!
                      allenchue#gmail.com

                      • At 2006.11.07 09:03, nan UNITED KINGDOM said:

                        请发份源代码给我好吗, 我也在学习中, 先谢了. znfsouth@gmail.com

                        • At 2006.11.08 12:22, muou CHINA said:

                          急需连数据库的源码,如能提供,非常感谢!!!
                          muou55555@163.com
                          真的很谢谢…….

                          • At 2006.11.14 11:12, ericlei CHINA said:

                            我们也正在用GWT开发,发份源码一起讨论下哈,谢谢
                            zhanglilei326@gmail.com

                            • At 2006.11.14 22:29, ZhuZhe CHINA said:

                              汗~~怎么这么多要源码的?[eek]

                              • At 2006.11.16 16:08, saint CHINA said:

                                麻烦这位大哥给小弟传一份源码! email: saint112403@sina.com 不胜感激!!![tea]

                                • At 2006.11.17 10:31, achry CHINA said:

                                  给我发份代码哈~!
                                  33790310@qq.com

                                  • At 2006.11.17 19:49, Yao JAPAN said:

                                    请发一份源码给我学习学习。
                                    chunlinyao {at] gmail.com

                                    • At 2006.11.19 14:42, saint CHINA said:

                                      这位大哥,能否发给小弟一分可以直接导入eclipse并运行的工程!小弟现在还是个菜鸟,恳求您的帮助,非常感谢!
                                      email: saint112403@sina.com

                                      • At 2006.11.20 15:35, jvencent CHINA said:

                                        谢谢,我也需要一份。顺便问一下,操作数据库的类必须放到client包下吗?是否可以放到server包下?
                                        xzgf2004@gmail.com

                                        • At 2006.11.23 01:26, tim HONG KONG said:

                                          请给我发一份源码,谢谢!
                                          tim5305@gmail.com

                                          • At 2006.11.25 18:03, tim HONG KONG said:

                                            不好意思, 在我运行这个程序的时候, 当我登入图书馆。。。它说
                                            [ERROR] Uncaught exception escaped
                                            java.lang.ClassCastException: com.google.gwt.user.client.ui.DockPanel
                                            问题应该在这一句
                                            “((DeckPanel)panel.getParent().getParent().getParent().getParent()).add(user)“
                                            我想请教一下这是什么问题,
                                            我怎样才能做到切换业面

                                            • At 2006.11.25 19:45, Dreamer CHINA said:

                                              to tim:不好意思,GWT我只是用来做了一次大作业,现在已经差不多全部忘记完了,而且当时我使用的是某个版本的beta版。所以我也不知道它为什么不能运行了,抱歉了

                                              • At 2006.12.03 19:30, guest CHINA said:

                                                要源码?直接去http://code.google.com/webtoolkit/

                                                • At 2006.12.10 21:53, monster CHINA said:

                                                  请教这位好心大哥一个问题,帮我看看这是个什么错误?
                                                  [ERROR] Unable to instantiate &#39;com.dreamer.server.BulletinServiceImpl&#39;
                                                  java.lang.ClassNotFoundException: com.dreamer.server.BulletinServiceImpl
                                                  在访问服务器端类的时候总有错误,是什么原因?

                                                  • At 2006.12.11 16:54, Dreamer CHINA said:

                                                    to monster:抱歉。GWT我只是用来做了一次大作业,现在已经差不多全部忘记完了,所以也不清楚错误状况了,可能是GWT版本更新了

                                                    • At 2007.01.01 17:55, 非常想要的我 CHINA said:

                                                      我非常需要 发个给我 谢谢大虾““““““““““邮箱:ericjohns1984@sina.com

                                                      • At 2007.02.25 10:05, bobo CHINA said:

                                                        我也想要 麻烦也发一份给我吧 谢谢啦:)
                                                        renyun2551@sohu.com

                                                        • At 2007.03.07 14:51, Skyeli CANADA said:

                                                          我在用GWT做一个后台工具, 在入门的阶段, 能发我一份源码参考吗?谢谢

                                                          • At 2007.03.07 14:52, Skylei CANADA said:

                                                            我的email是:leizhenheng@yahoo.com.cn

                                                            • At 2007.03.08 22:54, tsmood CHINA said:

                                                              tsmood@gmail.com
                                                              非常感谢!

                                                              • At 2007.03.12 17:11, sun CHINA said:

                                                                给我一份,谢谢~
                                                                li_hy2004@163.com

                                                                • At 2007.04.12 21:37, cplus2 CHINA said:

                                                                  我也刚接触gwt,找了个例子稍改了点弄到eclipse里面,报错] Deferred binding failed for &#39;whut.cs.ll.Test.client.MyInterface&#39;; expect subsequent failures,查了好久实是不知道原因,望指点啊!
                                                                  gwt.xml:
                                                                  <module>

                                                                  <!– Inherit the core Web Toolkit stuff. –>
                                                                  <inherits name=&#39;com.google.gwt.user.User&#39;/>

                                                                  <!– Specify the app entry point class. –>
                                                                  <entry-point class=&#39;whut.cs.ll.Test.client.myAjax&#39;/>
                                                                  <servlet path=&#39;/myAjax&#39; class=&#39;whut.cs.ll.Test.server.MyInterfaceImpl&#39;/>

                                                                  </module>

                                                                  • At 2007.04.12 21:41, cplus2 CHINA said:

                                                                    代码发不上来啊,郁闷死了

                                                                    • At 2007.04.25 13:55, luna CHINA said:

                                                                      求求你给我发个代码吧,
                                                                      leoglee@gmail.com

                                                                      • At 2007.04.25 21:24, ABC CHINA said:

                                                                        我也想拥有一个自己的代码, 请批我一个把[smile]

                                                                        • At 2007.05.21 02:27, 麻烦给我发一份 CHINA said:

                                                                          麻烦给我发一份代码,正在做一个连接数据库的 非常需要 谢谢!!!
                                                                          chaoxxin@gmail.com

                                                                          • At 2007.05.28 18:57, coderchang CHINA said:

                                                                            你好给我也传一份行不?谢谢啦:)
                                                                            coderchang@yahoo.com.cn

                                                                            • At 2007.05.29 19:07, kobewon CHINA said:

                                                                              可以给我发吗 我的邮箱是wangkobe214@163.com
                                                                              谢谢 我也在学习使用gwt

                                                                              • At 2007.08.21 07:21, wgtll CHINA said:

                                                                                刚学习GWT,能否发一份源码学习,邮箱fuzhousea@163.com。谢谢!!!

                                                                                • At 2008.07.17 20:54, zh CHINA said:

                                                                                  刚学习GWT,能否发一份源码学习,邮箱zenghui198423@gmail.com谢谢!!!

                                                                                  • At 2008.07.18 08:33, Dreamer AUSTRALIA said:

                                                                                    我写这个的时候GWT好像才是beta,很老的东西了,估计不会适用的,源码我也找不到了,抱歉了

                                                                                  (Required)
                                                                                  (Required, will not be published)