剖析范例学习Spring-III(1)--进入PetStore
没有太多选择,实际还是选择了最简单的两个。剩下的几个范例好象都很复杂,没有办法,学习总得涉及复杂的内容啊----开始进入PetStore吧。
PetStore据说是J2EE的几乎是标准的范例,为网络客户提供宠物信息浏览、网上订单和管理等功能的网上宠物店。看配置文件组成很复杂啊。所以,打算先转起来,然后再细研究。
所有Spring范例都没有提供可直接转起来的得程序组成,所以,首先第一步把Src编译成jar。我把PetStore送入mytest项目中和前面2个范例的代码合在一起了。按我的习惯把长长的名字只保留PetStore后面的部分。所以改名字是主要工作。排除错误也是个工夫。最后我把axis.jar/common-logging.jar/jaxrpc.jar/saaj.jar/wsdl4j.jar加入后,编译总算通过。
下面就继续吧站点复制到我的test站点中了。
help.html/index.html/images都复制过来,和原来的文件基本不冲突。
WEB-inf下的jsp目录也不冲突,因为该demo用了2个子目录Spring和Struts.
除了web.xml外,其它配置文件也不重复,复制过来即可。
只剩下web.xml了:前面2个Demo直用到基本的Servlet定义和servlet-mapping. 这里增加了很多的context-param,大概是设置全局变量吧,称为system property。
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>petstore.root</param-value>
</context-param>
说是为WebAppRootListener和Log4jConfigListener设置根路径,可为什么需要个.root,是什么目的?还有什么其它意义吗,应该是petstore不就可以了吗?不明白。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
说是为Log4jConfigListener指定配置参数文件,进而获得需要的参数。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/dataAccessContext-local.xml /WEB-INF/applicationContext.xml
</param-value>
<!--
<param-value>
/WEB-INF/dataAccessContext-jta.xml /WEB-INF/applicationContext.xml
</param-value>
-->
</context-param>
说是定义Application上下文的根级上下文。特别强调不能再单数据库上下文包含local和不能再双数据库上下文包含jta. 不明白。
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
说用JBoss时要加入此段,我不是,免。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这段是为了让WEB启动时就能读入applicationContext.xml. 以方便再任何时候通过WebApplicationContextUtils.getWebApplicationContext (servletContext)获得此上下文。
<servlet>
<servlet-name>petstore</servlet-name>
<servlet-
class>org.springframework.web.servlet.DispatcherServle
t</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
这是加入petstore这个servlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
这个是加入一个用于Struts动作的servlet
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
说是提供远程访问,可通过Hessian, Burlap和Http来远程访问。对应的配置文件remoting-servlet.xml
<servlet>
<servlet-name>axis</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
说是提供Web-Service访问服务的,通过Apache Axis。对应的配置文件server-config.wsdd
<servlet-mapping>
<servlet-name>petstore</servlet-name>
<!--
<servlet-name>action</servlet-name>
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
说是对Spring,则用petstore,对Struts则用action.那么如何切换到Struts呢?不知道。
<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
远程映射
<servlet-mapping>
<servlet-name>axis</servlet-name>
<url-pattern>/axis/*</url-pattern>
</servlet-mapping>
Web-Service隐射喽
<resource-ref>
<res-ref-name>jdbc/jpetstore</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<res-ref-name>jdbc/jpetstore-order</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
说是为jta提供resouce的,但都注释了。到底什么是jta? Goo了一下,原来是Java Transaction API,是进行事务划分,是否可以理解成是否支持事务?
好了,看能工作吗?怎么没看见数据库?当然有错误了,我忘了修改这些xml了。
先改struts-config.xml,这个文件应该是在定义action时读入。其中的form-beans肯定是定义所有的Form了,这里的Form和Delphi的Form相当吗?type指定Form-bean的对象名称了。
global-forwards顾名思义定义全局的转向了。failer/unknown-error/global-signon分别对应一个jsp文件。
action-mappings当然是定义动作映射了。一些action还定义了input参数是表示动作的输入?包含几个forward是转向了?
修改了ApplicationContext.xml,具体意义以后再看,否则我怕转晕了。
修改DataAccessContext-local.xml等所有xml. 提示缺少ibatis, 这是什么东西?又是个O/R Mapping解决方案,看来是等效于Hibernate的东东。这是一个Blog的描述:
http://blogger.org.cn/blog/more.asp?name=sixsun&id=2395也放放吧。找到jar再说。ibatis-common-2.jar和ibatis-sqlmap-2.jar。
另外的错误竟然来自jar,其中的domain下的xml中竟然也指定Class. XML编辑器还不错。所有的ResultMap都需要修改。虽然还不理解其中的内容。
又提示找不到包,com.caucho.hessian.server.HessianSkeleton, 加入hessian-2.1.12.jar,实现了一种remote机制的包吧。少加了一个,还有一个机制burlap-2.1.12.jar。
终于没有编译错误了。但数据库呢?肯定会运行错。果然转起来了,果然数据库肯定错。
一篇介绍dbcp的文章:
http://www.javaworld.com.tw/jute/post/view?bid=21&id=44045&sty=1&tpg=1&age=0
我采用hsql库,把jdbc.properties中的jdbc.url,改为jdbc:hsqldb:file:c:/jpetstore把库也复制到c:/jpetstore下,又采用了Spring提供的hsql-db.jar文件。终于彻底转起来了,每个jsp都成功了。