Java Spring 4未找到HTTP请求的映射

Java Spring 4未找到HTTP请求的映射,java,spring,tomcat,spring-mvc,Java,Spring,Tomcat,Spring Mvc,我正在运行Spring4,并试图构建一个非常基本的RESTWeb服务作为概念验证。这是我的web.xml: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app id="poc" version="2.4" xmlns="http://java.sun

我正在运行Spring4,并试图构建一个非常基本的RESTWeb服务作为概念验证。这是我的web.xml:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app id="poc" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>ws</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ws</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/ws-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
</web-app>
<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>
其中springpoc是我在tomcat下部署的war文件的名称。RememberNameController直接扩展HttpServlet

<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>
有人能告诉我我的映射出了什么问题吗?

我认为:

<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>
<servlet-mapping>
    <servlet-name>ws</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
需要这样做:

<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>
<servlet-mapping>
    <servlet-name>ws</servlet-name>
    <url-pattern>/ws/*</url-pattern>
</servlet-mapping>

Spring控制器不应该扩展HttpServlet,它们应该使用Spring注释构建。e、 g

<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {

    @RequestMapping("/hello")
    public String hello() {
        return "helloworld";
    }
}

有关详细信息,请参见下面的教程

我认为问题在于,您将打算用作Spring控制器的内容与普通servlet混合在一起。
<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>
Spring控制器不是Servlet,而是Spring MVC用于处理Dispatcher Servlet调用的请求的常规POJO

<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>

如果您想了解使用Spring 4创建REST服务的现代方法,请查看

请共享applicationContext.xml,这样我们就可以看到您有哪些ViewResolver以及它们是如何配置的。按照您的要求添加了应用程序上下文。我想这是在抱怨您没有将其绑定到正确的url。您可以使用localhost:8080/springpoc/rememberName之类的东西来调用它,或者如果您做了我在下面建议的更改,localhost:8080/springpoc/ws/rememberName我知道它们显示了很多。如何用XML文件以这种方式构建控制器?我在Spring应用程序中做到了这一点。您不需要在XML文件中执行任何操作。DispatcherServlet会神奇地将请求映射到您的POJO auto freakin。Spring很棒。如果你真的想用XML配置请求映射,这里有一个基本的例子,这些人说的是,如果你使用DispatcherServlet,你就不会对它进行子类化。您可以像以前一样在xml文件中声明它,然后为类或特定方法创建一个带有控制器注释和RequestMapping的对象。正如我所说,它是神奇的。@THOM请看我在评论中发布的关于如何用XML连接控制器的链接。但是,控制器仍然不应该扩展HttpServlet。如果您直接编写servlet,则不需要Spring。
<bean name="/rememberName" class="com.corrisoft.air.ws.RememberNameController" init-method="init">
    <property name="personService" ref="personService"/>
</bean>