Hessian整合Spring的问题

在Spring框架中使用Hessian,一般来说都是定义好Spring的转发器以后,把请求和配置好的bean名字(带斜杠)做对应然后依靠HessianServiceExporter 来得到对应的bean实体进行数据交互。

web.xml中的配置:

<servlet>
        <servlet-name>remote</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        
        <init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/classes/conf/hessian-spring.xml</param-value>
		</init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet>
    <servlet-mapping>
        <servlet-name>remote</servlet-name>
        <url-pattern>/remote/*</url-pattern>
    </servlet-mapping>
 

hessian的bean配置文件:

<!-- 一个bean实体,在这里被hessian调用来工作。 -->
	<bean id="testHessianService" class="com.test.webservice.hessian.service.impl.TestHessianServiceImpl">  
    </bean>
    <!-- hessian的bean映射设置。通过访问 xxx/remote/hessianService这个url,可以在这里得到
   		 映射相应的工作bean  --> 
    <bean name="/myHessianService"
        class="org.springframework.remoting.caucho.HessianServiceExporter">  
        <property name="service" ref="testHessianService" />  <!-- 调用相应的bean -->
        <property name="serviceInterface" value="com.test.webservice.hessian.service.TestHessianService" />  <!-- 对外提供的接口 -->
    </bean>
 

这里我们的bean名字使用了带‘/’符号的形式,那么在默认情况下会被作为url来匹配。

但是如果Spring中有配置了"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"的实例,那么我们的bean名字里面要是有“/”号,就必须把它配置到SimpleUrlHandlerMapping里面,否则系统将不能根据外部传进来的url来找到这个bean,而报错。

以下配置remote后的url为"/myHessianService"的对应一个bean name=hessianService的HessianServiceExporter:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
	    <property name="mappings">  
	        <props>  
	            <prop key="/myHessianService">hessianService</prop>  
	        </props>  
	    </property>  
    	
</bean>

如果不希望像上面一样为每个url都手工配置Mapping,则需要在Spring配置中加入:

<bean id="defaultBeanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

 这样我们之前配置的带有斜杠的bean-name就不受SimpleUrlHandlerMapping的影响了。

相关推荐