spring2.0 sample 之 imagedb

阅读spring 的代码首先从配置文件看起,首先看看 web.xml.

xml 代码

 

  1. <context-param>  
  2.     <param-name>contextConfigLocationparam-name>  
  3.     <param-value>  
  4.         /WEB-INF/applicationContext.xml  /WEB-INF/schedulingContext-quartz.xml   
  5.     param-value>  
  6.     <!---->
  7.     <param-value>  
  8.         /WEB-INF/applicationContext.xml  /WEB-INF/schedulingContext-timer.xml   
  9.     param-value>  
  10.     -->  
  11. context-param>  

 

 

这个地方和countires 例子有些不同。这里定义了2个spring需要的配置文件。
其实引申起来,同样可以定义3个,4个多个配置文件。
其中注释掉的 schedulingContext-timer.xml 部分,我们稍后再看看是做什么用的。

xml 代码

 

  1. <servlet>  
  2.     <servlet-name>imageservlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>  
  4.     <load-on-startup>2load-on-startup>  
  5. servlet>  
  6. <servlet-mapping>  
  7.     <servlet-name>imageservlet-name>  
  8.     <url-pattern>/image/*url-pattern>  
  9. servlet-mapping>  

 

 

这部分代码已经不陌生了,之前的例子我们看过,就是定义servlet的处理。

好,接下来去看看 applicationContext.xml 里面都有什么。

xml 代码

 

  1. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  2.     <property name="locations">  
  3.         <list>  
  4.             <value>WEB-INF/jdbc.propertiesvalue>  
  5.             <value>WEB-INF/mail.propertiesvalue>  
  6.         list>  
  7.     property>  
  8. bean>  

 

 

这个 propertyConfigurer , 从名字就可以看出是读取配置文件的。只不过读取的配置文件不是在代码里用,而是在
当前这个配置文件(applicationContext.xml )里用。再往下看我们就会看到作用。

xml 代码

 

  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  2.     <property name="driverClass" value="${jdbc.driverClassName}"/>  
  3.     <property name="jdbcUrl" value="${jdbc.url}"/>  
  4.     <property name="user" value="${jdbc.username}"/>  
  5.     <property name="password" value="${jdbc.password}"/>  
  6. bean>  

 

 

这里定义了一个 datasource, 这里我们就能看到propertyConfigurer的作用了。这个 “${jdbc.driverClassName}”
就是配置文件里定义的。我们可以去看看 jdbc.properties, 就会看到相应的配置。

xml 代码

 

  1. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  2.     <property name="dataSource" ref="dataSource"/>  
  3. bean>  

 

 

这是定义了一个事务管理的bean, 管理的数据源就是上面定义的 datasource.

xml 代码

 

  1. <bean id="imageDatabaseTarget" class="org.springframework.samples.imagedb.DefaultImageDatabase">  
  2.     <property name="dataSource" ref="dataSource"/>  
  3.     <property name="lobHandler" ref="${imageDatabase.lobHandler}"/>  
  4. bean>  
  5.   
  6. <!---->  
  7. <bean id="imageDatabase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  8.     <property name="transactionManager" ref="transactionManager"/>  
  9.     <property name="target" ref="imageDatabaseTarget"/>  
  10.     <property name="transactionAttributes">  
  11.         <props>  
  12.             <prop key="getImages">PROPAGATION_REQUIRED,readOnlyprop>  
  13.             <prop key="streamImage">PROPAGATION_REQUIRED,readOnlyprop>  
  14.             <prop key="storeImage">PROPAGATION_REQUIREDprop>  
  15.             <prop key="clearDatabase">PROPAGATION_REQUIREDprop>  
  16.         props>  
  17.     property>  
  18. bean>  

 

 

 这里先定义了一个 imageDatabaseTarget bean, 这个 bean 是具体的业务逻辑处理的类。
下面又定义了一个 imageDatabase 代理的bean, 这个 bean 实现了 imageDatabaseTarget 的事务管理功能。

注意,实际中,我们要使用 imageDatabase 这个 bean, 这样才具有事务管理的功能。

那么,接下来我们来看看  image-servlet.xml .(忘了这个文件怎么来的?去看看 countries 例子。)

xml 代码

 

  1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>  

 

 

首先定义了一个 CommonsMultipartResolver, 要上传文件,必须使用 multipartResolver, 当然,你也可以使用
CosMultipartResolver , 只是在 spring 的例子了,把它注释掉了。

xml 代码

 

  1. <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
  2.         <property name="resourceLoaderPath" value="WEB-INF/views/"/>  
  3.     bean>  
  4. <bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  5.         <property name="templateLoaderPath" value="WEB-INF/views/"/>  
  6.     bean>  
  7. <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">  
  8.         <property name="suffix" value=".vm"/>  
  9.     bean>  

 

 

这些配置都是 spring 集成 Velocity, Freemarker 的定义。具体信息可以参考
http://www.redsaga.com/spring_ref/2.0/html/view.html#view-velocity

xml 代码

 

  1. <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  2.         <property name="defaultHandler" ref="imageController"/>  
  3.     bean>  
  4.   
  5.     <!---->  
  6.     <bean id="imageController" class="org.springframework.samples.imagedb.web.ImageController">  
  7.         <property name="methodNameResolver">  
  8.             <bean class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">  
  9.                 <property name="mappings">  
  10.                     <props>  
  11.                         <prop key="/imageList">showImageListprop>  
  12.                         <prop key="/imageContent">streamImageContentprop>  
  13.                         <prop key="/imageUpload">processImageUploadprop>  
  14.                         <prop key="/clearDatabase">clearDatabaseprop>  
  15.                     props>  
  16.                 property>  
  17.             bean>  
  18.         property>  
  19.         <property name="imageDatabase" ref="imageDatabase"/>  
  20.     bean>  

 

 

这部分就是配置 url 处理的定义了。
看到这个定义,我打赌 ImageController 一定是继承自 MultiActionController。
这和 countries 例子是一样的用法。

从配置上可以看出,ImageController  会处理四种请求:
图象的列表、显示图片、上传图片、清空数据库(看名字好像是这样?)

好,目前为止,配置文件基本清晰了,下面就该去看代码了!

代码部分不是特别复杂,其中 显示图片,上传图片,我想我们以后会用得到 :)
到时来参考一下也好。

不过,我们好像漏了什么,对,就是 schedulingContext-quartz.xml !
还记得 web.xml 里定义的吧!

从名字我们就能看出,这个是计划任务的一个配置。看来spring 真是包容一切,
连计划任务的功能也提供。

这部分的资料可以参考 http://www.redsaga.com/spring_ref/2.0/html/scheduling.html

不过例子也很经典,以后如果有计划任务功能的需求,看看spring的这个例子也好。

你可能感兴趣的:(spring,Web,bean,xml,servlet)