[原创] Spring3.0例子petclinic的搭建
与Spring2.0不同的是,Spring3.0使用了Maven工具,省去你手动下载petclinic相关jar包的麻烦。这听起来太方便了!可是,本人使用的是校园网(教育网),jar包的下载过程并不是很顺利。折腾了一会,才算搭建起来。
1. 下载petclinic源码
1)安装TortoiseSVN
2)用svn把petclinic从spring的repository下载(check out)下来
地址:https://src.springframework.org/svn/spring-samples/petclinic/
2.下载maven
1)我的是maven3.0.1
2)在系统变量的path中添加maven的bin文件夹
3. 下载和编译
1)按petclinic根目录下的readme.txt进行操作
关键步骤是:从命令行里进入petclinic文件夹,执行mvn clean package
2)这时,jar的下载开始了。如果一切顺利,下载和编译便可以完成,并在target文件夹里生成petclinic.war。
处在教育网里,这让事情变得复杂。需要给maven进行一些配置:
3)网络代理
maven的配置文件是conf/settings.xml。该文件里的proxy是配置网络代理的,我总共使用了两个代理。 <active>是代理的启用或关闭属性。我轮流着使用这两个代理,最后总算把所有需要的jar都下了(一个代理能下载一些jar,而不能下另一些,无语)。
(1)google engine的代理(具体怎么搭建google engine代理不赘述了,还挺麻烦的,有空再贴)
<proxy> <id>aproxy</id> <active>true</active> <protocol>http</protocol> <username></username> <password></password> <host>127.0.0.1</host> <port>8000</port> <nonProxyHosts>www.google.com</nonProxyHosts> </proxy>
(2)搜狗浏览器的代理(安装sougou浏览器)
<proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username></username> <password></password> <host>127.0.0.1</host> <port>8081</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy>
4)供下载的mirror(可选)
jar是默认从http://repo1.maven.org/maven2/下载的。另外也可在settings.xml里添加mirror。
<mirrors> <mirror> <id>mirror2</id> <mirrorOf>repository2</mirrorOf> <name>repo2</name> <url>http://repo2.maven.org/maven2/</url> </mirror> <mirror> <id>uk.maven.org</id> <mirrorOf>repositoryuk</mirrorOf> <name>repouk</name> <url>http://uk.maven.org/maven2</url> </mirror> </mirrors>
当一切下载工作完成后,便开始编译,最后生成petclinic.war。
4. 部署到Tomcat7.0
1)下载Tomcat 7
2)按Tomcat的readme.txt操作
3)把petclinic.war拷贝到Tomcat的webapps文件夹下
4)执行Tomcat的bin/startup.bat,以开启Tomcat。
5. 查看
打开浏览器,输入 http://localhost:8080/petclinic,便可以看到petclinic首页。
6. Bug
1) Bug描述
在petclinic首页点击 Find owner,进去后点击Add owner,会报错:
** Root cause is: /WEB-INF/jsp/owners/form.jsp(4,1) "${pet.new}" contains invalid expression(s):
javax.el.ELException: [new] is not a valid Java identifier...
2) 原因
网上有人回答说 Whether Tomcat 7 EL parser is more strict or not, the class has an isNew()
method, using ${owner.new}
is legal.
3)解决
于是,我把/jsp/owners/form.jsp和/jsp/pets/form.jsp中所有的 &{pet.new} 替换成 &{pet.isNew()},done!