LeeEmmmm 2012-04-27
在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的影响了。