??xml version="1.0" encoding="utf-8" standalone="yes"?>综合伊人久久,国产在线精品一区二区三区,欧美日韩一区二区三区四区http://www.aygfsteel.com/linansengling/zh-cnFri, 04 Jul 2025 15:44:23 GMTFri, 04 Jul 2025 15:44:23 GMT60JAVA和LIUNXq行到底http://www.aygfsteel.com/linansengling/archive/2008/02/11/179593.htmlfdsfdsMon, 11 Feb 2008 03:17:00 GMThttp://www.aygfsteel.com/linansengling/archive/2008/02/11/179593.htmlhttp://www.aygfsteel.com/linansengling/comments/179593.htmlhttp://www.aygfsteel.com/linansengling/archive/2008/02/11/179593.html#Feedback1http://www.aygfsteel.com/linansengling/comments/commentRss/179593.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/179593.html

fds 2008-02-11 11:17 发表评论
]]>
VHDL实现VGA接口设计http://www.aygfsteel.com/linansengling/archive/2007/01/14/93816.htmlfdsfdsSun, 14 Jan 2007 14:55:00 GMThttp://www.aygfsteel.com/linansengling/archive/2007/01/14/93816.htmlhttp://www.aygfsteel.com/linansengling/comments/93816.htmlhttp://www.aygfsteel.com/linansengling/archive/2007/01/14/93816.html#Feedback0http://www.aygfsteel.com/linansengling/comments/commentRss/93816.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/93816.html阅读全文

fds 2007-01-14 22:55 发表评论
]]>
生活的忠?/title><link>http://www.aygfsteel.com/linansengling/archive/2006/12/21/89223.html</link><dc:creator>fds</dc:creator><author>fds</author><pubDate>Thu, 21 Dec 2006 02:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/linansengling/archive/2006/12/21/89223.html</guid><wfw:comment>http://www.aygfsteel.com/linansengling/comments/89223.html</wfw:comment><comments>http://www.aygfsteel.com/linansengling/archive/2006/12/21/89223.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/linansengling/comments/commentRss/89223.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/linansengling/services/trackbacks/89223.html</trackback:ping><description><![CDATA[<font color=#ffffff></font> <p align=left>我不?x)给你钱Q因为我没有?</p> <p align=left>l你生活的忠?<br>多吃些粗_?<br>l别人比他们自己期许的更多,q且用心(j)d<br>熟记你喜Ƣ的诗歌<br>不要M你听到的每g事,不要花光你的所有,不要想睡多久q多久?br>无论何时?#8220;我爱?#8221;Q请真心(j)实意?br>无论何时?#8220;对不?#8221;Q请看着Ҏ(gu)的眼睛?br>怿一见钟情?br>永远不要忽视别h的梦惟?br>深情热烈地爱Q也怽?x)受伤,但这是人生完整的唯一Ҏ(gu)?br>用一U明的Ҏ(gu)解决争议Q不要冒犯?br>永远不要以貌取h。慢慢地_(d)但要q速地惟?br>当别人问你不惛_{的问题ӞW着?#8220;你ؓ(f)什么想知道Q?#8221;<br>C那些敢于承担最大风险的人才能得到最q爱和最大的成就?br>l妈妈打?sh)话。如果不行,臛_在心(j)里想着奏V?br>当别人打喷嚏Ӟ说一?#8220;菩萨保佑”?br>如果你失败了(jin)Q千万不要忘记݅取教训?br>C三个“?#8221;Q尊重你自己Q尊重别人;保持严Q对自己的行责?br>不要让小的争端损毁?jin)一D伟大的友谊?br>无论何时你发现自己做错了(jin)Q竭所能去弥补。动作要快!<br>无论什么时候打?sh)话Q摘赯{的时候请微笑Q因为对方能感觉刎ͼ<br>找一个你p的hl婚 Q?因ؓ(f)当年龄大?jin)以后,你?x)发觉喜欢聊天是一个h最大的优点?br>扄旉Q单独呆?x)儿?br>ƣ然接收改变Q但是不要摒弃你的个人理c(din)?br>CQ沉默是金?br>多看点书Q少看点?sh)视?br>q一U高而诚实的生活。当你年老时回想赯去,你就能再一ơn受h生?br>怿上帝Q但是别忘(sh)(jin)锁门?br>家庭的融z氛围是难能可贵的?br>你的全力让家^和谐?br>当你和你亲近的h吵嘴的时候,试着׃ZQ不要扯出那些陈芝麻Q烂谷子的事?br>不要摆脱不了(jin)昨天?br>多注意言下之意?br>和别人分享你的知识,那才是永恒之道!<br>善待我们的地球?br>不要愚弄自然母亲?br>忙自p做的事?br>不要怿接吻时从不闭眼的伴G?br>每年臛_M个你从没去过的地斏V?br>如果你赚?jin)很多钱Q在zȝ的时候多行善事。这是你能得到的最好回报?br>C有时候,不是最好的收获也是一U好q?br>深刻理解所有的规则Q合理地更新他们?br>CQ最好的关系存在于对别h的爱胜于对别人的索求之上?br>回头看看你发誓取得的目标Q然后评判你到底有多成功?br>无论是烹调还是爱情,都用癑ֈ之百的负责态度对待Q但是不要期求太多的回报?/p> <img src ="http://www.aygfsteel.com/linansengling/aggbug/89223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/linansengling/" target="_blank">fds</a> 2006-12-21 10:52 <a href="http://www.aygfsteel.com/linansengling/archive/2006/12/21/89223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式系l入?/title><link>http://www.aygfsteel.com/linansengling/archive/2006/11/06/79394.html</link><dc:creator>fds</dc:creator><author>fds</author><pubDate>Mon, 06 Nov 2006 06:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/linansengling/archive/2006/11/06/79394.html</guid><wfw:comment>http://www.aygfsteel.com/linansengling/comments/79394.html</wfw:comment><comments>http://www.aygfsteel.com/linansengling/archive/2006/11/06/79394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/linansengling/comments/commentRss/79394.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/linansengling/services/trackbacks/79394.html</trackback:ping><description><![CDATA[q久以来听了(jin)我的一个老师关于后PC时代的到来,对嵌入式pȝ产生?jin)极大兴,投入了(jin)很大的_֊在学Q有很多的收获写出来与朋友分享?br /><br /> (tng) (tng) (tng) 对于刚进入嵌入式pȝ的学?fn)首先是象学J2EE那样看不懂且不知所云的名字Q所以先要搞定这些名词:(x)<br /><br /><strong>嵌入式Y件系l的几种模式</strong>Q?br /><br />􀁺 一 (tng) (tng) 单嵌入式pȝQ包含简单的g初始化以?qing)应用代码?br />􀁺 二?tng)?单嵌入式pȝQ包含bootloader以及(qing)应用代码Qbootloader与应用紧密集成在一P构成一个嵌<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng)  (tng) (tng) (tng) 入式pȝ?br />􀁺 三?tng)?复杂嵌入式系l,包含bootloader、操作系l、应用Y件?br /><br /><strong>开发编l环?/strong>Q?br /><br /> (tng) (tng) (tng) (tng) (tng) ads1.2 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) arm的编译器arm公司开发的<br /> (tng) (tng) (tng) (tng) arm-elf-gcc (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) Liunx环境下的arm~绎?br /> (tng) (tng) (tng) (tng) (tng) cygwin+armtools (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) windows下模拟linux的程序和q行在cygwin下的arm的编译器<br /> (tng) (tng) (tng) (tng) (tng) ARM_SDT_2.51 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) arm比较早版本的~译?br />q么多开发编l环境选择适合的就行如果你用操作系l是Linux~辑工具是vi之类一般是arm-elf-gcc (tng)如果操作pȝ是windows见意ads1.2 (tng)?br /><br /><strong>嵌入式操作系l:(x)</strong><br /><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) VxWorks (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 实时性最好,要付费,一般用在高端实旉域,好像国的飞船上q它?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) uc/os-II (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 单适合入门Q好多书都讲q个操作pȝQ其代码量也不大如果要看它的源码的话?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) winCE (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 微Y的东四,收费一般小应用׃用它的,高端手机比如多普达上用的是它?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) uclinux (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 是ؓ(f)适应没有MMCg的CPUQarm7TDMIQ开发的liunx的版本,开源、免费,怿 <br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 是今天后的趋势,学习(fn)有一定的隑ֺQ网上资料还是很多的?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) liunx (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 开源、免?ARM9上就可以?br /><br /><strong>其它名词Q?/strong><br /><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng)SkyEye (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 是开源Y件?tng)的一个项目,SkyEye的目标是在Linux和W(xu)indows操作pȝ里提供一个完全的<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 仿真环境。SkyEye仿真环境相当于一个嵌入式计算机系l,你可以在SkyEye里运行一?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)嵌入式Linux操作pȝQ如ARMLinuxQuClinuxQuc/OSII(ucos-ii){,q能分析和调试它?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 的源代码?br />Boot Loader (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 是在操作系l内核运行之前运行的一D小E序。通过q段程序,我们可以初始?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 件设备、徏立内存空间的映射图,从而将pȝ的Yg环境带到一个合适的状态,以便<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 为最l调用操作系l内核准备好正确的环境。相当于PCZ的BIOS?br /><br />Blob、Bootldr、Redboot、U-Boot、ABLE<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng) Boot Loader 是严重地依赖于硬件而实现的Q除?jin)依赖于CPU 的体pȝ构外QBoot Loader实际上也依赖于具体的嵌入式板U设备的配置。这也就是说Q对于两块不同的嵌入式板而言Q即使它们是Z同一UCPU 而构建的Q要惌q行在一块板子上的Boot Loader E序也能q行在另一块板子上Q通常也都需要修改BootLoader 的源E序。Blob、Bootldr、Redboot、U-Boot、ABLE都是Z对于CPU 的体pȝ构外开发的通用的BootLoaderE序Q你只需对这些程序进行移植就行了(jin)?br /><br /><strong>嵌入式处理器的启动过E:(x)<br /></strong> (tng) (tng) (tng) (tng) <br />􀁺 通常pȝ上电(sh)Q或者复位)(j)以后Q程序从地址I间?x0开始􀁺 即PCQ程序计数器Q指针,指向0x0。从q个地址开始读取指令ƈq行。通常q个地址对应的是Bank0。因为系l是从bank0上引导的Q所以,在Bank0上连接保存有启动代码的FlashROMQ这是我们常说的Boot ROM即BootloaderE序?br /> (tng) (tng) (tng) (tng) <br />Bootloader要实玎ͼ(x)<br /><br />􀁺 gpȝ自检?br /><br />􀁺 配置其他Bank或者端口、外讄工作模式?br /><br />􀁺 处理中系l的中断?在不支持remap的处理器中,中断必然要经qBoot ROM的空_(d)q时QBoot ROM<br /> (tng) (tng) (tng) (tng) (tng) (tng)需要处理的d是把固定的中断向量映射C个可~程的中断处理子E序的地址?br /><br /> (tng) (tng) (tng) (tng) 引导操作pȝ<br />?pȝ配置完成以后Q?Bootloader需要把操作pȝQ或者其他程序)(j)装蝲到SDRAMQ就是系l的RAM区)(j)Q然后,把PC指针指向E序的RAMI间Q操作pȝ启动Q这是引导?br /><br /> (tng) (tng) (tng) (tng) FlashQBoot ROMQ编E?br />?对引导FlashQ或者其他的非易失性存储器Q编E,通过串口或者以太网口下载编译成功的操作pȝ或者应用程序,甚至Boot ROM本n。?要想实现Boot ROM的自~程Q必让BootE序是在RAM中运?img src ="http://www.aygfsteel.com/linansengling/aggbug/79394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/linansengling/" target="_blank">fds</a> 2006-11-06 14:09 <a href="http://www.aygfsteel.com/linansengling/archive/2006/11/06/79394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 实现分页技?Structs+Hibernate+MySQL)http://www.aygfsteel.com/linansengling/archive/2006/09/21/70960.htmlfdsfdsWed, 20 Sep 2006 16:42:00 GMThttp://www.aygfsteel.com/linansengling/archive/2006/09/21/70960.htmlhttp://www.aygfsteel.com/linansengling/comments/70960.htmlhttp://www.aygfsteel.com/linansengling/archive/2006/09/21/70960.html#Feedback30http://www.aygfsteel.com/linansengling/comments/commentRss/70960.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/70960.html (tng) (tng) (tng) 通过Structs+Hibernate+MySQL数据数来实现分页技术的应用. (tng)
 (tng) (tng) (tng)
 (tng) (tng) 源程序下?/a>
 (tng) (tng) 至于Hibernate, Structs, MySQL的具体用法我׃说了(jin),你可以看源程序来查看详细内容.我们来看看分应用的相关内容.
 (tng)架构上和Spring JPetStore没多区? 只是没用Spring框架所以Structs中的UserdisplayAction中必new出各个对象ƈ完成它们之间的关? q就是Spring IOC可自动完成的功能. 它也是三?表现?Structs), (tng)业务?POJO), 数据?Hibernate讉KMySQL). (tng)同样业务层通过DAO接口(UserDAO)来访问数据库, 讉K数据库的通过Hibernate(在UserDAOImpl中实?. (tng)q一ơ分要在业务层中来实现, 业务层同样向表现层提供一个Facada(门面, (tng) UserManager接口), 来访问业? 在UserManagerImpl中通过调用UserDAO来访问数? 调用POJO来实现分功? 看以下关键代?

先看POJO的分布类?

Page.java

package org.flyware.util.page;

public class Page { (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) private boolean hasPrePage; (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) private boolean hasNextPage; (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) private int everyPage; (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) private int totalPage; (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) private int currentPage; (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) private int beginIndex; (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) public Page(){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) } (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) public Page(int everyPage){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.everyPage = everyPage;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
 (tng) (tng) (tng) /** The whole constructor */
 (tng) (tng) (tng) public Page(boolean hasPrePage, boolean hasNextPage, (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int everyPage, int totalPage,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int currentPage, int beginIndex) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.hasPrePage = hasPrePage;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.hasNextPage = hasNextPage;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.everyPage = everyPage;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.totalPage = totalPage;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.currentPage = currentPage;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.beginIndex = beginIndex;
 (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng)...... (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) public int getTotalPage() {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return totalPage;
 (tng) (tng) (tng) } (tng)
 (tng) (tng) (tng)
 (tng) (tng) (tng) public void setTotalPage(int totalPage) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.totalPage = totalPage;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
}

PageUtil.java(用来构造Page实例 相当于page工厂)

package org.flyware.util.page;

public class PageUtil {
 (tng) (tng) (tng)
 (tng) (tng) (tng) private static final Log logger = LogFactory.getLog(PageUtil.class); (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) public static Page createPage(Page page, int totalRecords){ (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
 (tng) (tng) (tng) } (tng)
 (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) public static Page createPage(int everyPage, int currentPage, int totalRecords){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) everyPage = getEveryPage(everyPage); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) currentPage = getCurrentPage(currentPage); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) int beginIndex = getBeginIndex(everyPage, currentPage); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) int totalPage = getTotalPage(everyPage, totalRecords); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) boolean hasNextPage = hasNextPage(currentPage, totalPage); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) boolean hasPrePage = hasPrePage(currentPage);
 (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return new Page(hasPrePage, hasNextPage, (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) everyPage, totalPage,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) currentPage, beginIndex);
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
 (tng) (tng) (tng) private static int getEveryPage(int everyPage){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return everyPage == 0 ? 10 : everyPage;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
 (tng) (tng) (tng) private static int getCurrentPage(int currentPage){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return currentPage == 0 ? 1 : currentPage;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
 (tng) (tng) (tng) private static int getBeginIndex(int everyPage, int currentPage){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return (currentPage - 1) * everyPage;
 (tng) (tng) (tng) }
 (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) private static int getTotalPage(int everyPage, int totalRecords){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) int totalPage = 0;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) if(totalRecords % everyPage == 0)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) totalPage = totalRecords / everyPage;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) else
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) totalPage = totalRecords / everyPage + 1 ;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return totalPage;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
 (tng) (tng) (tng) private static boolean hasPrePage(int currentPage){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return currentPage == 1 ? false : true;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)
 (tng) (tng) (tng) private static boolean hasNextPage(int currentPage, int totalPage){
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return currentPage == totalPage || totalPage == 0 ? false : true;
 (tng) (tng) (tng) }
 (tng) (tng) (tng)

}



业务实现c?UserManaerImpl.java

package com.linan.service.impl;

public class UserManagerImpl implements UserManager {
 (tng) (tng) (tng)
 (tng) (tng) (tng) private UserDAO userDAO;

 (tng) (tng) (tng) (tng) (tng) (tng) public void setUserDAO(UserDAO userDAO) { (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.userDAO = userDAO; (tng)

 (tng) (tng) (tng) } (tng)
 (tng) (tng)
//提供业务Ҏ(gu)

public Result listUser(Page page) throws HibernateException,

ObjectNotFoundException { (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) int totalRecords = userDAO.getUserCount(); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) if(totalRecords == 0) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) throw new ObjectNotFoundException("userNotExist", null);
 (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) page = PageUtil.createPage(page, totalRecords); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) List users = userDAO.getUserByPage(page); (tng) (tng) (tng)
 (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return new Result(page, users); (tng)

 (tng) (tng) (tng) }

}


DAO数据讉K实现c?UserDAOImpl.java

package com.linan.dao.impl;

public class UserDAOImpl (tng) implements UserDAO {

 (tng) (tng)...........

 (tng) (tng) (tng) (tng) (tng) public List getUserByPage(Page page) throws HibernateException { (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) String querySentence = "FROM user in class com.linan.bo.Userlist"; (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) Query query = getSession().createQuery(querySentence); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //实现分页功能

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) query.setFirstResult(page.getBeginIndex()) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) .setMaxResults(page.getEveryPage()); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) return query.list(); (tng)

 (tng) (tng) (tng) }

}

表现层Structs中的Action UserdisplayAction.java

package com.linan.struts.action;

public class UserdisplayAction extends Action {

 (tng)  (tng)public ActionForward execute(
 (tng) (tng)ActionMapping mapping,
 (tng) (tng)ActionForm form,
 (tng) (tng)HttpServletRequest request,
 (tng) (tng)HttpServletResponse response) {

 (tng) (tng) (tng)Page page=new Page(); (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) UserManagerImpl userManager=new UserManagerImpl();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) UserDAOImpl userDAO=new UserDAOImpl();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) userManager.setUserDAO(userDAO);

 (tng) (tng) (tng) (tng) (tng) (tng) //掉用业务代理完成分页

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) Result result=userManager.listUser(page);

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) List list=result.getContent();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpSession session=request.getSession();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) session.setAttribute("list",list);

 (tng) (tng)return mapping.findForward("displayGo");

 (tng)}

}


 (tng)



fds 2006-09-21 00:42 发表评论
]]>
Spring JPetStore(? 实现自已的Sunlight Netstorehttp://www.aygfsteel.com/linansengling/archive/2006/09/19/70625.htmlfdsfdsTue, 19 Sep 2006 13:56:00 GMThttp://www.aygfsteel.com/linansengling/archive/2006/09/19/70625.htmlhttp://www.aygfsteel.com/linansengling/comments/70625.htmlhttp://www.aygfsteel.com/linansengling/archive/2006/09/19/70625.html#Feedback20http://www.aygfsteel.com/linansengling/comments/commentRss/70625.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/70625.html (tng) (tng) (tng) (tng) 看过?jin)Spring JPetStore自已觉得界面有点不好? 我觉得界面在购物|站中还是重要的. 所以在Spring (tng) JPetStore基础上我用Structs的Title框架对原pȝ做了(jin)一定的改变形成?jin)自q"阛_|店"(Sunlight NetStore), 现在贴出来和大家分n, 大虾见了(jin)请别见笑, q请多多指教, 学生的作? 都没多少实用? 只是学了(jin)一些东西来l练?

Sunlight NetStore源码下蝲

下蝲的源E序是Eclipse下完成的工程源程?可以在Eclipse下只接导入进来打开完成发布.  (tng)也可以在tomcat安装目录\webapps目录下新Z文g夹jpetstore然后把下载下来的WebRoot目录下的所有内定w拯? (tng) 数据库的建立, 我开发时使用的是mysql4.0(如果你用的是mysql5.0则可能有时会(x)出错, 5.0是它的测试版我用?jin)感觉有时?x)出现莫明其妙的错?q(sh)为是E序错误, 费了(jin)我好多时? ?.0是它的发布版很稳定的). 使用mysql你可以配合用MySQL Control Center(mysql4.0, MySQL Control Center可以|上下蝲Google一下吧q里׃提供下蝲地址?很好用的和微软的SQL Server差不? 在MySQL Control Center中执行数据库脚本, 然后启动tomcat服务? 你将看到如下: (tng) (tng)(开发用的技术是Structs里面的东? ׃说了(jin). 架构, 业务层和数据层和原来的不? 想了(jin)解请看Spring JPetStore(? Spring JPetStore的分?/a>) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

index1.jpg



index3.jpg

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

dog.jpg

 (tng) (tng)

data.jpg



fds 2006-09-19 21:56 发表评论
]]>
灰子鸟的天空http://www.aygfsteel.com/linansengling/archive/2006/09/17/70157.htmlfdsfdsSun, 17 Sep 2006 12:20:00 GMThttp://www.aygfsteel.com/linansengling/archive/2006/09/17/70157.htmlhttp://www.aygfsteel.com/linansengling/comments/70157.htmlhttp://www.aygfsteel.com/linansengling/archive/2006/09/17/70157.html#Feedback1http://www.aygfsteel.com/linansengling/comments/commentRss/70157.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/70157.html (tng) (tng) (tng) (tng) 世界上有一U鸟叫灰子鸟, 一生下来就没有? 生命中注定要飞翔, 永远都不能停......
 (tng) (tng) (tng) (tng) 我像一只灰子鸟, 我想飞翔, 永远都不要停. 我一个h在天IZ漫无目的的飞? 不知飞了(jin)多远, 也不知还能飞多远. 只是记得自已q在飞着, 一直飞着...... 有一天我遇到?jin)一南ȝ大雁, 它们告诉? 跟我们一赯吧小灰子? 前面很冷你会(x)被冻ȝ, 跟我们一起到南方d, 那里有O漫的pq有充的食? 谢谢你们的好意大雁阿? 我是灰子? 在我的天I没有停留和目的, 我只有往前飞那是我的使命.灰子鸟告别了(jin)雁群l箋(hu)往前飞? 天空来暗, I气中充满着寒流, 灰子鸟感C(jin)大难卛_来(f).....
 (tng) (tng) (tng) (tng) (tng)灰子鸟很? 很冷. 它连睁开双眼都觉得那么用? 它好像睡一觉啊! 呼呼的风声告诉他, 他还在飞? 它还要飞? q是它会(x)L? 灰子鸟还是一直飞, 因ؓ(f)那是它的使命, 它没有选择, 因ؓ(f)它没有脚, 生命中注定了(jin)飞翔..
 (tng) (tng) (tng) (tng) 灰子鸟还要飞? 对他惛_q方, 他想d扑֮的天I? 在那里是它们的天? 那里有宽阔的草场, 健康的牛?.. 可是灰子鸟的膀太小? 属于他的天空太小, 即它用全力也飞不C(jin)...... 它流泪了(jin)!
 (tng) (tng) (tng) (tng) 或许我就是这只灰子鸟, 即用尽全力你还是离我那么远, 很抱歉我飞不C的n边了(jin), 或许没有我你的天IZ(x)更美...... 很抱歉我的翅膀太小, 你的天空应该属于别h......



fds 2006-09-17 20:20 发表评论
]]>
Spring JPetStore(? JPetStore的分?/title><link>http://www.aygfsteel.com/linansengling/archive/2006/09/17/70122.html</link><dc:creator>fds</dc:creator><author>fds</author><pubDate>Sun, 17 Sep 2006 04:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/linansengling/archive/2006/09/17/70122.html</guid><wfw:comment>http://www.aygfsteel.com/linansengling/comments/70122.html</wfw:comment><comments>http://www.aygfsteel.com/linansengling/archive/2006/09/17/70122.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.aygfsteel.com/linansengling/comments/commentRss/70122.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/linansengling/services/trackbacks/70122.html</trackback:ping><description><![CDATA[ <p> (tng) (tng)Spring JPetStoreM架构属于三层l构. 分ؓ(f)业务服务层?表现层?数据讉K?br /> (tng) (tng)<br /> (tng) (tng) (tng) (tng) (tng) (tng) 业务服务层用由P(pn)OJO(javac?实现, 它们q行在轻量的容器Spring? 轻量U容器的功能在于, (tng)一 理业务对象的生命周? ?借助于Spring (tng)的IOC(Inversion of Control, 控制反{)功能来完成对象之间的依赖关系, 而不用编E一昄完成. ?借助于Spring的AOP(Aspect-Oriented Programming, 面向斚w的程序设? (tng)行在容器中的对象提供一些企业服? 比如声明式的事务理. 业务层放弃了(jin)EJB而用运行在轻量U容器的服务? ?x)有以下好?<br />1. (tng) 能够在Servlet引擎中运? 不用EJB容器的服务器, tomcatp搞定, 软g的费用低, Ҏ(gu)理, 负蝲?<br />2 (tng). Ҏ(gu)在不同的应用服务器或serverlet引擎之间UL. 要想辑ֈ高可UL? 对于EJB容器来说要比web容器困难, 比如, 需要确保不同的EJB容器在启动时都会(x)q行某一些代?<br />3. (tng) (tng)实现更ؓ(f)?<br />4. 不需要那么篏赘的部v文g.<br />不好的地?<br />1. (tng) ~Z对远E调用的内置支持.<br />2. (tng) ~Z一个标准的环境, 用于容纳, 理业务对象.<br />3. (tng) 没有清晰的业务层.<br />4. (tng) 在不同的应用pȝ之间~Z一致? W个pȝ都可能会(x)有自q一套做? 怎么讉K业务对象 (tng)怎么解决事务理 怎么讉K数据{?<br />虽然如此但现在我们有?jin)spring一切就有了(jin)解决之道?<br /><br /> (tng) (tng) (tng) (tng) (tng) 表现层中, Spring JPetStore提供?jin)两U不同的web层实? 二者都要依靠同一个中间层, 一个是ZStructs?另一个则是Spring的MVC框架. 二者都是基于JSTL的JSP视图.<br /><br /> (tng) (tng) (tng) (tng) (tng) 数据讉K?使用?jin)J2EE模式中的"数据讉K对象"(Data Access Object, DAO), (tng)他用一个DAO接口隐藏?jin)持久化操作的细? q样使用q个模式的业务对象无需知道底层的持久化技术的l节. Spring JPetStore中用了(jin)iBATIS框架.<br /><br />下面让我们来看一下应用中的细节内容吧, 先在Eclipse下把应用加进来方便调? q行.<br /><br />Eclipse可到(<a >http://www.eclipse.org/downloads/</a>上下?他是压羃包解压后可?可以再去下MyEclipe <a >http://www.myeclipse.com</a>是Eclipese的开发插件方便开? 不过要付费可以下载它的破解文?a >http://jinxinxin.bokee.com/inc/myeclipse_keygens.rar</a> (tng)MyEclipse的安装如果不?x)去Google一下吧). 好了(jin)开发工具安装后新徏一工程jpetstore, 然后?.\spring-jpetstore\samples\jpetstore下的src目录复盖你的eclipse工作I间下的\jpetstore下的src目录,然后再把..\spring-jpetstore\samples\jpetstore下的war目录下的全部内容拷到你的eclipse工作I间下的\jpetstore下的WebRoot目录下复盖WEB-INF.回到eclipse下刷新工E你可看到如?<br /><br /></p> <p align="center"> <img style="WIDTH: 694px; HEIGHT: 691px" height="768" alt="e.jpg" src="http://www.aygfsteel.com/images/blogjava_net/linansengling/e.jpg" width="1024" border="0" /> </p> <p> <br /> <br />先从数据讉K层说起吧, 他用iBATIS框架来访问数据库,?.\spring-jpetstore\samples\jpetstore\db目录下有它的各种数据库的schema有hsql, mysql, oracle, postges你用拿一U数据库是通过..\spring-jpetstore\samples\jpetstore\war\WEB-INF下的jdbc.properties来配|的.默认的是hsql数据?<br /># Properties file with JDBC-related settings.<br /># Applied by PropertyPlaceholderConfigurer from "dataAccessContext-local.xml".<br /># Targeted at system administrators, to avoid touching the context XML files.</p> <p>jdbc.driverClassName=org.hsqldb.jdbcDriver<br />jdbc.url=jdbc:hsqldb:hsql://localhost:9002<br />jdbc.username=sa<br />jdbc.password=<br />要改为用mysql只要改ؓ(f):<br />#jdbc.driverClassName=org.hsqldb.jdbcDriver<br />#jdbc.url=jdbc:hsqldb:hsql://localhost:9002<br />#jdbc.username=sa<br />#jdbc.password=</p> <p>jdbc.driverClassName=com.mysql.jdbc.Driver<br />jdbc.url=jdbc:mysql://localhost:3306/jpetstore<br />jdbc.username=root<br />jdbc.password=<br /><br />卛_.业务层能q?..jpetstore.dao包下的接口来讉K....jpetstore.dao.ibatis包从而通过iBATIS框架讉K数据库中的数据的部䆾代码如下:<br /><br /><font color="#cc66ff">package org.springframework.samples.jpetstore.dao;<br />public<font color="#006600"> interface</font> AccountDao {</font></p> <p> <font color="#cc66ff"> (tng) Account getAccount(String username, String password) throws DataAccessException;</font> </p> <p> <font color="#cc66ff"> (tng) ...........</font> </p> <p> <font color="#cc66ff">}<br /></font> <br /> <font color="#006600">package org.springframework.samples.jpetstore.dao.ibatis;<br />public class SqlMapAccountDao extends SqlMapDaoSupport <font color="#cc66ff">implements AccountDao</font> {</font> </p> <p> <font color="#006600"> (tng) (tng) (tng) public Account getAccount(String username, String password) throws DataAccessException {<br /> (tng) (tng) (tng) Account account = new Account();<br /> (tng) (tng) (tng) account.setUsername(username);<br /> (tng) (tng) (tng) account.setPassword(password);<br /> (tng) (tng) (tng) return (Account) getSqlMapTemplate().executeQueryForObject("getAccountByUsernameAndPassword", account);<br /> (tng) }<br />..............<br />}<br /></font> <br />Account.xml<br /><br /><font color="#ff00ff"><mapped-statement name="getAccountByUsernameAndPassword" result-map="result"><br /> (tng) (tng) (tng) select<br /></font> (tng) (tng) (tng) (tng) (tng) SIGNON.USERNAME as USERID,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.EMAIL,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.FIRSTNAME,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.LASTNAME,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.STATUS,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.ADDR1,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.ADDR2,<br /> (tng) (tng) (tng) (tng) (tng) ACCOUNT.CITY,<br /> (tng) (tng) (tng) (tng) (tng) (tng).. (tng) (tng) (tng) <br /><font color="#ff33ff"> (tng) (tng) (tng) from ACCOUNT, PROFILE, SIGNON, BANNERDATA<br /> (tng) (tng) (tng) where ACCOUNT.USERID = #username#</font><br /> (tng) (tng) (tng) (tng) (tng) and SIGNON.PASSWORD = #password#<br /> (tng) (tng) (tng) (tng) (tng) and SIGNON.USERNAME = ACCOUNT.USERID<br /> (tng) (tng) (tng) (tng) (tng) and PROFILE.USERID = ACCOUNT.USERID<br /> (tng) (tng) (tng) (tng) (tng) and PROFILE.FAVCATEGORY = BANNERDATA.FAVCATEGORY<br /> (tng) </mapped-statement><br /><br />然后C(jin)业务? 业务层ؓ(f)表达层提供服?操纵数据层来完成业务逻辑比如从数据库中读出客启信息传l表辑ֱ 向数据库中插入订单等.业务层还要完成对数据库操作的完整?正确性即事务理. 此应用是通过Spring的AOP来完成无需~程实现如下:<br /><br /><font color="#009900">dataAccessContex-local.xml</font><br /><br /><font color="#9933ff"><bean id="<font color="#ff0066">dataSource</font>" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><br /> (tng) (tng)<property name="driverClassName"><value><font color="#ff3366">${jdbc.driverClassName}</font></value></property><br /> (tng) (tng)<property name="url"><value>${jdbc.url}</value></property><br /> (tng) (tng)<property name="username"><value>${jdbc.username}</value></property><br /> (tng) (tng)<property name="password"><value>${jdbc.password}</value></property><br /> (tng)</bean></font></p> <p> <font color="#9933ff"> (tng)<!-- Transaction manager for a single JDBC DataSource --><br /><bean id="<font color="#ff3366">sessionFactory</font>" class="org.springframework.orm.<font color="#ff3333">hibernate3</font>.LocalSessionFactoryBean"><br /> (tng) <property name="dataSource"><br /> (tng) (tng) <ref local="dataSource" /><br /> (tng) </property><br /> (tng) <property name="mappingResources"><br /> (tng) (tng) <list><br /> (tng) (tng) (tng) <value>org/springframework/samples/jpetstore/Hibernate/Account.hbm.xml</value><br /> (tng) (tng) </list><br /> (tng) </property><br /> (tng) <property name="hibernateProperties"><br /> (tng) (tng) <props><br /> (tng) (tng) (tng) <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><br /> (tng) (tng) (tng) <prop key="hibernate.show_sql">true</prop><br /> (tng) (tng) </props><br /> (tng) </property><br /> (tng)</bean><br /> (tng)<br /> (tng)<!-- (see dataAccessContext-jta.xml for an alternative) --><br /><bean id="<font color="#ff3366">transactionManager</font>" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><br /> (tng) <property name="sessionFactory"><br /> (tng) (tng) <ref local="sessionFactory" /><br /> (tng) </property><br /> (tng)</bean></font> </p> <p> <font color="#9933ff"> (tng)<!-- SqlMap setup for iBATIS Database Layer --><br /> (tng)<bean id="sqlMap" class="org.springframework.orm.ibatis.SqlMapFactoryBean"><br /> (tng) (tng)<property name="configLocation"><value>WEB-INF/sql-map-config.xml</value></property><br /> (tng)</bean></font> </p> <p> <br /> <font color="#9933ff"> (tng)<!-- ========================= DAO DEFINITIONS: IBATIS IMPLEMENTATIONS ========================= --></font> </p> <p> <font color="#9933ff"> (tng)<bean id="<font color="#ff3366">accountDao</font>" class="org.springframework.samples.jpetstore.dao.hibdaoimp.AccountDaoImp"><br /> (tng) <property name="sessionFactory"><br /> (tng) (tng) <ref local="sessionFactory" /><br /> (tng) </property><br /> (tng)  (tng)<br /> (tng)</bean><br />................</font> </p> <p> <font color="#9933ff"></beans><br /></font> </p> <p> <font color="#009966">applicationContex.xml<br /></font> <br /> <font color="#cc33ff"><bean id="<font color="#ff0033">petStoreTarget</font>" class="org.springframework.samples.jpetstore.domain.logic.<font color="#ff3300">PetStoreImpl</font>"><br /> (tng) (tng)<property name="<font color="#ff0033">accountDao</font>"><ref bean="<font color="#ff0066">accountDao</font>"/></property><br /> (tng) (tng)<property name="categoryDao"><ref bean="categoryDao"/></property><br /> (tng) (tng)<property name="productDao"><ref bean="productDao"/></property><br /> (tng) (tng)<property name="itemDao"><ref bean="itemDao"/></property><br /> (tng) (tng)<property name="orderDao"><ref bean="orderDao"/></property><br /> (tng)</bean></font> </p> <p> <font color="#cc33ff"> (tng)<!-- Transactional proxy for the JPetStore primary business object --><br /> (tng)<bean id="<font color="#ff0033">petStore</font>" class="<font color="#ff0066">org.springframework.transaction.interceptor.</font><font color="#ffcc66">TransactionProxyFactoryBean</font>"><br /> (tng) (tng)<property name="t<font color="#ff0066">ransactionManager</font>"><ref bean="transactionManager"/></property><br /> (tng) (tng)<property name="target"><ref local="<font color="#ff0033">petStoreTarget</font>"/></property><br /> (tng) (tng)<property name="transactionAttributes"><br /> (tng) (tng) (tng)<props><br /> (tng) (tng) (tng) (tng)<prop key="<font color="#ff0066">insert</font>*">PROPAGATION_REQUIRED</prop><br /> (tng) (tng) (tng) (tng)<prop key="update*">PROPAGATION_REQUIRED</prop><br /> (tng) (tng) (tng) (tng)<prop key="*">PROPAGATION_REQUIRED,readOnly</prop><br /> (tng) (tng) (tng)</props><br /> (tng) (tng)</property><br /></font> (tng)<br />从上面的配置代码我们可看到通过Spring的IOC完成?font color="#ff0033"><font color="#cc33ff">org.springframework.samples.jpetstore.domain.logic.</font><font color="#ff3300">PetStoreImpl<font color="#000000">{类的注? 通过AOP?/font><font color="#ff0066">org.springframework.transaction.interceptor.</font><font color="#ffcc66">TransactionProxyFactoryBean</font></font></font><font color="#000000">来完成事务代?br />业务层通过一个门?facada)PetStoreFacade.java接口来ؓ(f)表达层提供服?<br /><br /></font><font color="#cc00cc">package org.springframework.samples.jpetstore.domain.logic;<br /></font><font color="#9900cc">public <font color="#ff0066">interface PetStoreFacade</font> {</font></p> <p> <font color="#9900cc"> (tng)Account getAccount(String username);</font> </p> <p> <font color="#9900cc"> (tng)Account getAccount(String username, String password);</font> </p> <p> <font color="#9900cc"> (tng)void insertAccount(Account account);</font> </p> <p> <font color="#9900cc"> (tng)void updateAccount(Account account);</font> </p> <p> <font color="#000000"> <font color="#9900cc">..........<br />}<br />用PetStoreImp.java来实?<br /><br />package org.springframework.samples.jpetstore.domain.logic;<br /><br />public class PetStoreImpl implements PetStoreFacade, OrderService {</font> </font> </p> <p> <font color="#000000"> <font color="#9900cc"> (tng) private AccountDao accountDao;</font> </font> </p> <p> <font color="#000000"> <font color="#9900cc"> (tng).........<br /></font> </font> <font color="#000000"> <font color="#9900cc"> <br /> (tng)public void setAccountDao(AccountDao accountDao) {<br /> (tng) (tng)this.accountDao = accountDao;<br /> (tng)}</font> </font> </p> <p> <br /> (tng)public Account getAccount(String username) {<br /> (tng) (tng) (tng) return this.accountDao.getAccount(username);<br /> (tng) }</p> <p> (tng) public Account getAccount(String username, String password) {<br /> (tng) (tng)return this.accountDao.getAccount(username, password);<br /> (tng) }</p> <p> (tng) public void insertAccount(Account account) {<br /> (tng) (tng)this.accountDao.insertAccount(account);<br /> (tng) }</p> <p> (tng) .......<br />}<br /><br /><font color="#000000">表达层这里介lStructs,Structs中通过PetStoreFacade接口来访问业务层:<br /><br /></font><font color="#cc00ff">package org.springframework.samples.jpetstore.web.struts;</font></p> <p> <font color="#cc00ff">public abstract class BaseAction extends Action {</font> </p> <p> <font color="#cc00ff"> (tng) private</font> <font color="#ff0066">PetStoreFacade petStore;</font> </p> <p> <font color="#cc00ff"> (tng)public void setServlet(ActionServlet actionServlet) {<br /> (tng) (tng)super.setServlet(actionServlet);<br /> (tng) (tng)ServletContext servletContext = actionServlet.getServletContext();<br /> (tng) (tng)WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);<br /> (tng) (tng)<font color="#ff0033">this.petStore = (PetStoreFacade) wac.getBean("petStore");<br /></font> (tng)}</font> </p> <p> <font color="#cc00ff"> (tng)protected PetStoreFacade getPetStore() {<br /> (tng) (tng)return petStore;<br /> (tng)}</font> </p> <p> <font color="#cc00ff">}<br /><br /><br /></font> <font color="#009900">public class SignonAction extends<font color="#cc00ff"> BaseAction</font> {</font> </p> <p> <font color="#009900"> (tng) public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng)AccountActionForm acctForm = (AccountActionForm) form;<br /> (tng) (tng) (tng) (tng) (tng) String username = acctForm.getUsername();<br /> (tng) (tng) (tng) (tng) (tng) String password = acctForm.getPassword();<br /> (tng) (tng) (tng) (tng) (tng)<font color="#cc00ff"> Account account = getPetStore().getAccount(username, password);</font><br />.....<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return mapping.findForward("success");<br /> (tng) (tng) (tng) (tng)}<br /><font color="#000000">Structs框架通过struct-config.xml文来控制相关映射转发?</font> (tng) (tng) (tng) (tng)<br /><br />struct-config.xml (tng) (tng) (tng) (tng) (tng) (tng) (tng)</font> <font color="#cc00ff"> <font color="#009900"> <br /><action path="/<font color="#ff0066">signon</font>" type="org.springframework.samples.jpetstore.web.struts.<font color="#cc00ff">SignonAction</font>"<br /> (tng) (tng) (tng)name="accountForm" scope="request"<br /> (tng) (tng) (tng)validate="false"><br /> (tng) (tng) (tng)<forward name="success" path="/<font color="#cc00ff">index.jsp</font>"/><br /> (tng) (tng)</action><br /><br /></font> </font> <font color="#000000">关于jsp׃在多说了(jin)下面再来看一下它的web.xml文g:</font> </p> <p> <font color="#cc00ff"> (tng) (tng)<context-param><br /> (tng) (tng)<param-name>contextConfigLocation</param-name><br /> (tng) (tng)<param-value><br /> (tng) (tng) (tng)<font color="#ff0066">/WEB-INF/dataAccessContext-local.xml (tng) /WEB-INF/applicationContext.xml</font><br /> (tng) (tng)</param-value><br /> (tng) (tng) (tng)</context-param><br /><br /><servlet><br /> (tng) (tng)<servlet-name>context</servlet-name><br /> (tng) (tng)<servlet-class><font color="#ff0066">org.springframework.web.context.ContextLoaderServlet</font></servlet-class><br /> (tng) (tng)<load-on-startup>1</load-on-startup><br /> (tng)</servlet></font> </p> <p> <font color="#cc00ff"> (tng)<servlet><br /> (tng) (tng)<servlet-name>action</servlet-name><br /> (tng) (tng)<servlet-class><font color="#ff0033">org.apache.struts.action.ActionServlet</font></servlet-class><br /> (tng) (tng)<load-on-startup>3</load-on-startup><br /> (tng)</servlet></font> </p> <p> <font color="#cc00ff"> (tng) (tng)</font> <font color="#009966"> (tng) (tng)<servlet-mapping><br /> (tng) (tng) (tng)<servlet-name><font color="#ff0066">action</font></servlet-name><br /> (tng) (tng)<br /> (tng) (tng)<url-pattern<font color="#ff0066">>*.do</font></url-pattern><br /> (tng)</servlet-mapping></font> </p> <p> <font color="#009966"> (tng)</font> <font color="#000000">q有关于q程机制有Caucho的Hessian(一个借助HTTP的二q制协议) Burlap(一个基于XML的借助HTTP的传输协?, Apache Axis提供的JAX-RPC(ZSOAP的借助HTTP传输的web serverice), q有ZRMI的远E调?<br />想了(jin)解更多还是自已细看里面的代码?<br /><a href="/linansengling/archive/2006/09/19/70625.html">L(fng)l关注Spring JPetStore(? 在其上实现自已的Sunlight Netstore</a></font> </p> <img src ="http://www.aygfsteel.com/linansengling/aggbug/70122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/linansengling/" target="_blank">fds</a> 2006-09-17 12:16 <a href="http://www.aygfsteel.com/linansengling/archive/2006/09/17/70122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring JPetStore(一) 发布JPetStore应用http://www.aygfsteel.com/linansengling/archive/2006/09/16/70041.htmlfdsfdsSat, 16 Sep 2006 07:13:00 GMThttp://www.aygfsteel.com/linansengling/archive/2006/09/16/70041.htmlhttp://www.aygfsteel.com/linansengling/comments/70041.htmlhttp://www.aygfsteel.com/linansengling/archive/2006/09/16/70041.html#Feedback0http://www.aygfsteel.com/linansengling/comments/commentRss/70041.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/70041.html (tng) (tng) (tng) PetStore(宠物?怿大家都不默生 , 它的功能包括一个品目?, 一个购物R , 客户账户理 , 订单历史 , q有一些基本的个性选项功能 . q是一个相当标准的数据驱动的J2EEWeb应用pȝ(没有EIS集成,也没有消息处理需? . The Middleware Company(TMC, 著名JAVAC֌TSS的母公司)?002q正式规范化?jin)本pȝ的业务需?q且?003q出?jin)进一步修?, (tng)加入?jin)两U特D的需? 要支持用唯一的数据库保存所有的持久化数? (tng) 也要支持双数据库的场? 一个数据库保存客户订单,另一个保存(sh)品和账务数据. 前一U场境当然性能更好,对于相对单的应用pȝ也更为实? 后一U用了(jin)L据库实现目录跟踪功能(也就是说, 存放产品目录和客戯̎h?, 而客戯单则分开存放在另一个订单数据库? q样, ׃pȝ在两个数据库上运? 所以在下订单的时候就要求实现分布化事?对PetStore有网上有各种不同的实现这里要讨论的是ZSructs+Spring+iBATIS的轻量框架实现?来自?lt;<J2EE Development without EJB>> Rod Johnson (tng) ?sh)子工业出版C?
源码下蝲(http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764558315,descCd-download_code.html) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) 好了(jin)有了(jin)源码让我们先来一睹ؓ(f)快然后再来分?
 (tng) (tng) (tng) (tng) (tng) (tng) 要构建Spring Jpetstore 应用你还需要安装JDK (tng)和Tomcat详情L(fng)我的JSP开发入门用L(fng)陆认?/a> (tng)此外Z(jin)用ANT构徏应用q要安装讄ANT工具(下蝲地址:http://www.jakarta.apache.org) (tng)ANT的安装Y件是解压软g?只需把压~文件解压到本地盘. q设|一下环境变?ANT_HOME=ANT的安装目?PATH=%PATH%;%ANT_HOME%\bin; CLASSPATH=%CLASSPATH%;%ANT_HOME%\lib;
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) 好了(jin)环境搭徏完闭, (tng)现在q入 ..\spring-jpetstore\samples\jpetstore>
执行ANT命o(h) ..\spring-jpetstore\samples\jpetstore>ant
则将?..\spring-jpetstore\samples\jpetstore\dist目录下生成jpetstore.war的发布文? 现在大功告成把jpetstore.war文g拷到tomcat安装目录\webapps\? 启动tomcat服务?tomcat安装目录\bin\star_up.bat). 启动hsql数据?..\spring-jpetstore\samples\jpetstore\db\hsqldb\server.bat). 好了(jin)一切搞定现在打开览器输?
http://localhost:8080/jpetstore)你将可看到如?

index.jpg (tng)

借助?..\spring-jpetstore\samples\jpetstore\db\hsqldb\manager.bat)看到的hsql数据库中的数?br />

db.jpg

发布搞定下面对它做一些简要的分析!
L(fng)Spring JPetStore(? (tng) (tng) JPetStore的分?/a>



fds 2006-09-16 15:13 发表评论
]]>
天南地北双飞?老翅几回寒暑http://www.aygfsteel.com/linansengling/archive/2006/09/16/70015.htmlfdsfdsSat, 16 Sep 2006 03:42:00 GMThttp://www.aygfsteel.com/linansengling/archive/2006/09/16/70015.htmlhttp://www.aygfsteel.com/linansengling/comments/70015.htmlhttp://www.aygfsteel.com/linansengling/archive/2006/09/16/70015.html#Feedback0http://www.aygfsteel.com/linansengling/comments/commentRss/70015.htmlhttp://www.aygfsteel.com/linansengling/services/trackbacks/70015.html

fds 2006-09-16 11:42 发表评论
]]>
վ֩ģ壺 | | Ƹ| | | | ҽ| | | | | | | | | ֱ| | ɽ| | Ϫ| | | | | | | | ɽ| ұ| ̨| | | ƽ| | | ɽ| Ӧ| | α| | |