1、有UserController 代码如下Q?br />1 @Controller
2 @RequestMapping("/")
3 public class UserController {
4 @RequestMapping(value = "{userid}", method = RequestMethod.GET)
5 public ModelAndView userIndex(@PathVariable Long userid){
6 return new ModelAndView("userIndex").addObject(userid);
7 }
8 }
2、web.xml中的两处DispatcherServlet配置Q?/strong>
1 <servlet>
2 <servlet-name>user-servlet</servlet-name>
3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
4 <load-on-startup>1</load-on-startup>
5 </servlet>
6 <servlet-mapping>
7 <servlet-name>user-servlet</servlet-name>
8 <url-pattern>*.do</url-pattern>
9 </servlet-mapping>
10 <servlet>
11 <servlet-name>hessian-servlet</servlet-name>
12 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
13 <init-param>
14 <param-name>contextConfigLocation</param-name>
15 <param-value>
16 classpath:spring/hessian-remoting.xml
17 </param-value>
18 </init-param>
19 <load-on-startup>2</load-on-startup>
20 </servlet>
21 <servlet-mapping>
22 <servlet-name>hessian-servlet</servlet-name>
23 <url-pattern>/hessian/*</url-pattern>
24 </servlet-mapping>
3、hessian-remoting.xml中服务配|:
1 <bean name="/userHessianService" class="org.springframework.remoting.caucho.HessianServiceExporter">
2 <property name="service" ref="userService"/>
3 <property name="serviceInterface" value="com.cd.common.UserService"/>
4 </bean>
4、我预期的结果是Q?/span>
当我在浏览器中直接访问hessian服务“http://localhost/hessian/userHessianService”Ӟ应该报错QHTTP Status 405 - HessianServiceExporter only supports POST requests
虽然报错Q但可以表明q个h被hessian服务接收C?/span>
而实际情冉|Q报错ؓ HTTP Status 400 - The request sent by the client was syntactically incorrect ()
5、问题出在哪里?把web.xml中的user-servlet注释掉,重新启动q访问,能得到预期结果,加上后就不行?/span>
可以断定问题出来user-servlet相关的程序里Q于是还原注释重启ƈ观察spring mvc日志Q注意到有如下一D:
2012-04-11 18:25:36,446 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/{userid}] onto handler 'UserController'
2012-04-11 18:25:36,446 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/{userid}.*] onto handler 'UserController'
2012-04-11 18:25:36,446 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/{userid}/] onto handler 'UserController'
6、分析:user-servlet处理*.do的链接,hessian-servlet处理/hessian/*的请求,而从spring mvc映射的url来看Q?{userid}(Longcd参数)很可能去匚w了测试链?/span>
7、尝试解军_法:让spring mvc只映?dol尾的链接,修改@RequestMapping(value = "{userid}", method = RequestMethod.GET)
为@RequestMapping(value = "{userid}.do", method = RequestMethod.GET)
8、验证结?/span>Qspring mvc加蝲Q[org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/{userid}.do] onto handler 'UserController'
讉Khttp://localhost/hessian/userHessianService
l果HTTP Status 405 - HessianServiceExporter only supports POST requests
得到预期l果Q测试结束?/span>

]]>