web-dev-qa-db-ja.com

URI Spring MVCを使用したHTTP要求のマッピングが見つかりません

これが私のWeb.xmlです

dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/servlet-context.xml 1

<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

    <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

13
user962206

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などのリクエストが含まれます。

このため、コントローラーが.jspを指すビューを返すと、サーバーコンテナーがリクエストを処理できるようにする代わりに、DispatcherServletが飛び込んで、これを処理できるコントローラーを探し始めます。リクエストが見つからないため、404が見つかりません。

解決する最も簡単な方法は、サーブレットのURLマッピングを次のようにすることです。

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

*がないことに注意してください。これは、path infoを含まないリクエスト(末尾に.xxxのないURL)をDispatcherServletに送信する必要があることをコンテナに伝えます。この構成では、xxx.jspリクエストが受信されると、DispatcherServletは参照されず、サーブレットコンテナのデフォルトサーブレットがリクエストを処理し、予想どおりにjspを提示します。

これがお役に立てば幸いです。以前のコメントでは問題が解決したと述べていますが、解決策はmethod=RequestMethod.GETRequestMethodに追加するだけではいけません。

40
Akshay

私は同じ問題を抱えています...私はプロジェクト名を変更し、この問題を抱えています...私の解決策はプロジェクトの参照をチェックし、web.xmlで/の代わりに/*を使用することでした

2
Charles Lennon

最初にJavaクラスが[PROJECT_NAME]\target\classesディレクトリにコンパイルされているかどうかを確認します。

そうでない場合は、Javaクラスでコンパイルエラーが発生します。

2
kishore

インデックスメソッドでModelオブジェクトを渡してみてください。

@RequestMapping("/")

public String index(org.springframework.ui.Model model) {

 return "index";

    }

実際には、スプリングコンテナはマッピングメソッドでModelオブジェクトを探します。同じものが見つかった場合、返される文字列をビューリゾルバにビューとして渡します。

お役に立てれば。

1
JavaEnthusiast
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

ちょっとあなたのweb.xmlで/を使用してください(/ *の代わりに)

0
Ashish

Context.xmlを含むMETA-INFフォルダーを追加しました

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/SpringGradleDemo"/>

SpringGradleDemoは私のプロジェクト名であり、動作します。私のサーブレットマッピングは「/」です。ここで読みます https://Tomcat.Apache.org/Tomcat-5.5-doc/config/context.html

0
Thuan Luong
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

変更先:

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
0
Tony.Cruise