【问题标题】:cxf and spring MVC : No service was foundcxf 和 spring MVC:没有找到服务
【发布时间】:2013-09-18 15:28:09
【问题描述】:

我有 spring 应用程序,在其中我使用 org.apache.cxf 进行肥皂和 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>

我的控制器工作正常。

【问题讨论】:

    标签: spring servlets spring-mvc cxf


    【解决方案1】:

    您使用的 Servlet 容器匹配 CXFServlet 而不是 mvc-dispatcher 的 URI http://localhost:8080/hello,导致您的请求被发送到 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 等),因为也可能存在阻止其正常工作的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 2017-10-11
      相关资源
      最近更新 更多