java - 没有为带有 URI Spring MVC 的 HTTP 请求找到映射

标签 java spring model-view-controller spring-mvc

这是我的 Web.xml

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/servlet-context.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

我的 servlet-context.xml

<context:component-scan base-package="com.springexample.controller.impl" />
    <mvc:annotation-driven />

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

最后是 Handler 类。这是在 com.springexample.controller.impl

@Controller
public class IndexControllerImpl implements IndexController {

    @RequestMapping("/")
    public String index() {

        return "index";
    }
}

但是要转到 localhost:8080/projectname/

它返回一个 404 错误。

Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet'
Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name '

这是我的项目结构

Project Structure

最佳答案

按照您在问题中的方式配置 web.xml,特别是:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

对您的 Web 应用程序发出的所有请求都将被定向到 DispatcherServlet。这包括 /tasklist//tasklist/some-thing.html/tasklist/WEB-INF/views/index.jsp 等请求.

因此,当你的 Controller 返回一个指向 .jsp 的 View 时,DispatcherServlet 会跳入并开始寻找可以服务此请求的 Controller ,它没有找到任何 Controller ,因此 404

最简单的解决方法是让你的 servlet url 映射如下:

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

请注意缺少的 *。这告诉容器任何没有 path info 的请求(最后没有 .xxx 的 url)都应该发送到 DispatcherServlet。使用此配置,当接收到 xxx.jsp 请求时,不会咨询 DispatcherServlet,并且您的 servlet 容器的默认 servlet 将为请求提供服务并按预期呈现 jsp。

希望这会有所帮助,我意识到您之前的评论指出问题已解决,但解决方案不能只是将 method=RequestMethod.GET 添加到 RequestMethod .

关于java - 没有为带有 URI Spring MVC 的 HTTP 请求找到映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897790/

相关文章:

java - Axis2 客户端抛出 AxisFault : Must Understand check failed for header Security

java - 解决 Spring MVC 3.2.8 中的占位符

java - Spring Boot 将文本/javascript 序列化为 JSON

php - CodeIgniter - 在网页上创建 "block"元素的正确方法

ios - ViewController 是否也应该处理 View subview 的操作?

javascript - 创建动态类名时如何在 javascript 字符串中放置空格?

java - RequestMappings 根本不起作用

java - NetBeans 12.0 LTS-Hibernate插件需要Freemarker集成实现版本238

java - 为什么 Autowiring Spring 存储库不起作用?

Java泛型?扩展克拉兹