获取此 org.springframework.web.servlet.DispatcherServlet noHandlerFound 错误和警告:在 Spring MVC 中未找到 HTTP 请求

Posted

技术标签:

【中文标题】获取此 org.springframework.web.servlet.DispatcherServlet noHandlerFound 错误和警告:在 Spring MVC 中未找到 HTTP 请求 URI 的映射【英文标题】:Getting this org.springframework.web.servlet.DispatcherServlet noHandlerFound error and WARNING: No mapping found for HTTP request URI in Spring MVC 【发布时间】:2019-02-26 15:37:45 【问题描述】:

Index.jsp

<html>
    <body>
        <form action="add">
            <input type="text" name="t1"><br>
            <input type="text" name="t2"><br>
            <input type="submit" />
        </form>
    </body>
</html>

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>
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>telusko</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>telusko</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

telusko-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:ctx="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
    <!-- <mvc:default-servlet-handler/>  -->
    <mvc:annotation-driven/>
    <ctx:annotation-config></ctx:annotation-config>
    <ctx:component-scan base-package="resources.com.telusko"></ctx:component-scan>
</beans>

AddController.java

package com.telusko;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class AddController 
    @RequestMapping("/add")
    public void add() 
        System.out.println("i am here");
    

我有一个 index.jsp 文件,我在其中声明 action=/add。现在在 web.xml 中声明一个调度程序,在其中给定 servlet 名称登录。之后制作一个 telusko-servlet.xml,其中定义基本包:

<ctx:component-scan base-package="com.telusko"></ctx:component-scan>

之后创建一个logincontroller类,并使用logincontroller类上面的注解@Controller@RequestMapping("/add)上面的方法。之后运行 index.jsp 文件仍然给我错误,为什么noHandlerFound 错误发生在 login-servlet.xml 中。我在 AddController.java 文件所在的位置给出了基本包名称 com.telusko。

我应该在控制台上收到 “我在这里” 消息,但没有收到它,而不是收到 WARNING: No mapping found for HTTP request

Sep 26, 2018 10:47:36 PM org.springframework.web.servlet.DispatcherServlet 
initServletBean
INFO: FrameworkServlet 'telusko': initialization started
Sep 26, 2018 10:47:36 PM 
org.springframework.web.context.support.XmlWebApplicationContext 
prepareRefresh
INFO: Refreshing WebApplicationContext for namespace 'telusko-servlet': 
startup date [Wed Sep 26 22:47:36 IST 2018]; root of context hierarchy
Sep 26, 2018 10:47:36 PM 
org.springframework.beans.factory.xml.XmlBeanDefinitionReader 
loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB- 
INF/telusko-servlet.xml]
Sep 26, 2018 10:47:38 PM org.springframework.web.servlet.DispatcherServlet 
initServletBean
INFO: FrameworkServlet 'telusko': initialization completed in 2096 ms
Sep 26, 2018 10:47:38 PM org.apache.catalina.core.StandardWrapperValve 
invoke
SEVERE: Servlet.service() for servlet [telusko] in context with path 
[/DemoMVC] threw exception [Servlet execution threw an exception] with root 
cause
java.lang.NoSuchMethodError:   
org.springframework.http.HttpMethod.resolve(Ljava/lang/String;)
Lorg/springframe 
ork/http/HttpMethod;
at 

org.springframework.web.servlet.FrameworkServlet.service
(FrameworkServlet.java:8 
41)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at 

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
 (ApplicationFilterChain.java:231)
 at 


 org.apache.catalina.core.ApplicationFilterChain.doFilter
 (ApplicationFilterChain.java:166)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
 at 

 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:193)
at 

org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:166 at 
org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:199)at 

org.apache.catalina.core.StandardContextValve.invoke
 (StandardContextValve.java:96)at 

org.apache.catalina.authenticator.AuthenticatorBase.invoke
(AuthenticatorBase.jav 
a:490)
at 
org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:139)
    at 
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:92)
at 

org.apache.catalina.valves.AbstractAccessLogValve.invoke
(AbstractAccessLogValve. 
java:668)
at 

org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:74)
at 
org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:343)
at 
org.apache.coyote.http11.Http11Processor.service
(Http11Processor.java:408)at 

org.apache.coyote.AbstractProcessorLight.process
 (AbstractProcessorLight.java:66)at 

org.apache.coyote.AbstractProtocol$ConnectionHandler.process
(AbstractProtocol.ja 
va:770)at 

org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
(NioEndpoint.java:1415)at 

org.apache.tomcat.util.net.SocketProcessorBase.run
(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at 



org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run
(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

【问题讨论】:

base-package="resources.com.telusko" 看起来不对。当你的基本包只是com.telusko时,为什么resources在里面? 我首先尝试使用 com.telusko,但它不起作用,然后我将其更改为 resource.com.telusko。 在控制台上出现此错误 信息:FrameworkServlet 'telusko':初始化在 2501 毫秒内完成 2018 年 9 月 26 日上午 1:06:55 org.springframework.web.servlet。 PageNotFound noHandlerFound WARNING: No mapping found for HTTP request with URI [/DemoMVC/add] in DispatcherServlet with name 'telusko' 我应该在 INFO 之后收到 “我在这里” 消息:FrameworkServlet 'telusko':初始化在 2501 毫秒内完成 @Prashant Singh 我在我的项目中遇到了这个错误。你找到解决这个问题的方法了吗? 【参考方案1】:

我也遇到过同样的问题,下面更改项目文件夹结构解决了我的问题。

更改文件夹结构如下,如果没有可用的java文件夹,则创建它。您的 AddController.java 应该出现在 /src/main/java 下。进行此更改后,您可以在日志中看到 SOP。

/src/main/resources 到 /src/main/java

【讨论】:

【参考方案2】:

在项目结构中,创建控制器的 com.telusko 包应位于 Java Resources/src/main/java 文件夹下,该文件夹缺失,可以通过查看项目属性并单击 Java 构建路径来创建.在那里,请选择源选项卡并删除丢失的文件夹。并再次创建或添加具有相同文件夹路径和名称的文件夹。这将在项目结构中创建一个文件夹作为 src/main/java。在此路径内,应移动或创建带有控制器的 com.telusko 包。再次清理并运行服务器。它现在可以工作了。

【讨论】:

【参考方案3】:
@Component
@RequestMapping(path="/add")
public class AddController 

    @RequestMapping(method=RequestMethod.GET)
    public void add() 
        System.out.println("I'm here");
    

【讨论】:

你能在你的答案周围添加一些上下文吗?【参考方案4】:

在您的配置中添加 viewResolver bean,我想您在“WEB-INF/jsp”中的视图

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

编辑:

<ctx:component-scan base-package="resources.com.telusko"></ctx:component- 
scan>

<ctx:component-scan base-package="com.telusko"></ctx:component- 
scan>

更改您的请求方法

@RequestMapping("/add")
public String add()

    System.out.println("i am here");
    return "index"; //return your view to render

希望它有效。

【讨论】:

(警告:GET /Hesab_kar/login 没有映射)抛出此警告 你能添加更多关于你的配置和登录控制器的信息吗? 现在你可以看到我的文件我已经更新了。请帮助我浪费了 2 天时间来解决但找不到任何解决方案。 当我运行我的程序时,我没有任何视图,只有一个 jsp 文件(index.jsp),这不会在浏览器上显示任何东西,没关系。但它应该在控制台上显示消息。对吧?? 尝试创建文件夹“/WEB-INF/jsp/”并将jsp文件放入demo。【参考方案5】:

花了一整天后,我知道了解决方案。创建 maven 项目时,默认不会在 'javaResource/src/main' 下创建 'java' 文件夹,这是获取控制器路径所必需的。

确保首先在 'javaResource/src/main' 中创建 java 文件夹,然后创建包和控制器。

附上截图供参考。

【讨论】:

【参考方案6】:

我遇到了同样的问题,*** 的答案都没有奏效。在 web.xml 中进行一些更改后,它解决了我的问题。我只是在 web.xml 中添加了我的 dispatcher-servlet.xml 的路径。附上图片。

【讨论】:

【参考方案7】:

在项目中创建一个新文件夹/src/main/java,并在其中添加addcontroller.java文件。这对我有用。

【讨论】:

【参考方案8】:

当我错过处理程序方法上的正斜杠(/)时,我在代码中遇到了同样的问题:

@RequestMapping(path="processform", method=RequestMethod.POST)
public String handleForm(@RequestParam("userName") String userName,
        @RequestParam("email") String userEmail,
        @RequestParam("password") String userPassword, Model model)

   
    System.out.println("user Name: "+ userName);
    System.out.println("user email: "+ userEmail);
    System.out.println("user Password: "+ userPassword);    
    model.addAttribute("name", userName);
    model.addAttribute("email", userEmail );
    model.addAttribute("password", userPassword);
    
    return"success";

解决方案:在handler方法上正确添加正斜杠(/),并在servlet配置文件中正确添加视图解析器。

@RequestMapping(path="/processform", method=RequestMethod.POST)

查看解析器

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

【讨论】:

以上是关于获取此 org.springframework.web.servlet.DispatcherServlet noHandlerFound 错误和警告:在 Spring MVC 中未找到 HTTP 请求的主要内容,如果未能解决你的问题,请参考以下文章

RestTemplate 微信接口 text/plain HttpMessageConverter

08-SpringMVC02

Spring MVC中,applicationContext.xml [ServletName]-servlet.xml配置文件在web.xml中的配置详解...

为啥此代码无法通过 GPS 获取位置?

如何在此映射上获取驱动程序名称

如何使用扩展分组功能获取此查询