我有spring应用程序,其中我使用org.apache.cxf for soap和spring MVC来显示某些页面。
我的web.xml
包含两个servlet:CXFServlet and mvc-dispatcher
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/servlet-context.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
当我在我的控制器中使用@ResponseBody
时,一切都很好。
@Controller
@RequestMapping("/hello")
@ResponseBody
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printWelcome() {
return "hello" ;
}
}
然后我需要使用jsp我必须使用以下
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView printWelcome(ModelMap model) {
model.addAttribute("message", "hello");
return new ModelAndView("hello") ;
}
}
当我请求http://localhost:8080/hello
时,我收到“没有找到服务”而不是“你好”
我发现如果从web.xml中删除以下内容
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
我的控制器工作正常。
答案 0 :(得分:4)
您正在使用的Servlet容器匹配URI http://localhost:8080/hello
的CXFServlet而不是mvc-dispatcher,导致您的请求被发送到CXFServlet,并且CXFServlet返回错误消息“找不到服务”。引用Servlet 3.0规范,
2.5之前的此规范的版本使用了这些映射 技术作为建议而不是要求,允许servlet 每个容器都有不同的映射客户端的方案 对servlet的请求。
http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/
您可能需要将CXFServlet映射配置为其他内容,例如
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
您可能想提及您正在使用的容器(Tomcat,Glassfish等),因为还可能存在阻止其正常工作的错误。