92

ハンドラーはinternalresourceview'apiForm'に転送しますが、エラー404 RequestURI = / WEB-INF / pages/apiForm.jspが発生します。apiForm.jspは/WEB-INF/pages/にあると思います

13:45:02,034 DEBUG [org.springframework.web.servlet.view.JstlView]-InternalResourceView'apiForm'のリソース[/WEB-INF/pages/apiForm.jsp]に転送
13:45:02,035 DEBUG [org.springframework .web.servlet.DispatcherServlet]-[/WEB-INF/pages/apiForm.jsp]の最終変更値を決定する「testapp2」という名前のDispatcherServlet13
:45:02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet]- getLastModified
13:45:02,038にハンドラーが見つかりませんDEBUG [org.springframework.web.servlet.DispatcherServlet]-[/WEB-INF/pages/apiForm.jsp]
13:45:02,038のリクエストを処理する「testapp2」という名前のDispatcherServlet警告[org.springframework.web.servlet.PageNotFound]-名前が'testapp2'のDispatcherServletにURI[/WEB-INF/pages/apiForm.jsp]のHTTPリクエストのマッピングが見つかりません
13:45:02,045 DEBUG [org.springframework .web.servlet.DispatcherServlet]-リクエストを正常に完了しました
13:45:02,048DEBUG [org.springframework.web.servlet.DispatcherServlet]-リクエストを正常に完了しました

これが私のdispatcher.xmlの外観です。

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

16 に答える 16

155

DispatcherServletがapiForm.jspのリクエストを処理しようとしているようです。これは、web.xmlサーブレットマッピングがそのスペースのリクエストをDispatcherServletに送信していることを示しています。

あなたはこのようなものを持っているかもしれませんか?

<servlet-mapping>
  <servlet>dispatcher</servlet>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

別の拡張子(たとえば.do)を使用してコントローラーを呼び出し、サーブレットマッピングを適切に更新してみてください

 <servlet-mapping>
  <servlet>dispatcher</servlet>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>
于 2009-08-12T14:54:35.560 に答える
91

はい、私はこのパーティーに遅れていることを知っていますが、それは他の人を助けるかもしれません。

サーブレットコンテナは、一致する最長のパスに基づいてマッピングを選択します。したがって、このマッピングをJSPに組み込むことができ、/*マッピングよりも選択されます。

<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>/WEB-INF/pages/*</url-pattern>
 </servlet-mapping>

実際、Tomcatの場合、jspはそのままの状態で存在するサーブレットであるため、必要なのはそれだけです。他のコンテナの場合は、JSPサーブレットの名前を確認するか、次のようなサーブレット定義を追加する必要があります。

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
于 2010-05-27T17:49:39.240 に答える
19

<mvc:default-servlet-handler />DispatcherServlet構成に追加するだけで、完了です。

于 2014-09-21T06:35:23.847 に答える
13

No mapping found for HTTP request with URIエラーが発生します

間違ったパッケージをスキャンした場合

たとえば、コントローラーはmy.package.abcにあり ますが、誤って入力しました

<context:component-scan base-package="my.package.efg*" />

また

@ComponentScan("my.package.efg*")

つまり、リクエストがURLだけでなく、クラス全体が見つからない場合、コントローラーはWebアプリケーションコンテキストにスキャンされません。

于 2016-05-30T01:25:13.183 に答える
9

インターネット全体を読んで、sitemeshに拡張子なしのhtmlパスと拡張子なしのAPIパスを処理させる方法を理解したと思います。私はこれを理解するためにまっすぐなジャケットに包まれました、毎ターンは何か他のものを壊したようでした。それから私はついにこのポストに出くわしました。

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>

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

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/views/*</url-pattern>
 </servlet-mapping>

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/decorators/*</url-pattern>
</servlet-mapping>

これをdispatcher-servlet.xmlに入力します

<mvc:default-servlet-handler/>
于 2013-06-10T21:46:27.313 に答える
9

私を助けた解決策は次のとおりです。にマップしないDispatcherServlet/*、にマップし/ます。最終的な構成は次のとおりです。

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

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
于 2014-05-23T23:50:57.503 に答える
8

Spring3.1とTomcat7では、次のエラーが発生しました。

org.springframework.web.servlet.DispatcherServletnoHandlerFound名前が「appServlet」のDispatcherServletにURI[/baremvc/]のHTTPリクエストのマッピングが見つかりません

そして、次の構成をweb.xmlに追加する必要がありました。

<welcome-file-list>
    <welcome-file/>
</welcome-file-list>

そして、アプリケーションは機能しました!

于 2012-04-12T08:07:25.960 に答える
8

簡単なチェックができます。私は現在、休止状態と一緒にSpringMVCアーキテクチャを使用しています。クラス名のすぐ上に@Controllerアノテーションを書くのを忘れていました。これが私に問題を引き起こしていました。

@Controller
public class MyClass{
    ...
}

この簡単なチェックで問題が解決することを願っています。

于 2012-11-29T06:55:54.110 に答える
3

私も同じ問題を抱えていましたが、もちろん少し違いがありました。話は、私が以下の行を削除していたときでした:

<mvc:resources mapping="/resources/**" location="classpath:/resources/" />

すべてがOKでしたが、その行が存在する場合、同じエラーが発生します。

試行錯誤の末、Springアプリケーションのコンテキストファイルに次の行を追加する必要があることがわかりました。

<mvc:annotation-driven />

それが役に立てば幸い!

于 2016-05-25T03:46:46.337 に答える
2

これは、アプリが実際にコンパイルされていないにもかかわらず、Tomcatで起動されている場合にも発生する可能性があります。これが発生するのを見たとき、プロジェクトには「プロジェクト固有の」JDKが指定されていたため、コンパイルされていませんでした。コードは、その特定のJDKがないマシンでチェックアウトされました。EclipseはデフォルトでJDKではなくJREに設定されていたため、アプリはコンパイルされませんでした。

特定のケースで修正するために、ここで「プロジェクト固有の設定」をオフにしました。

「プロジェクト|プロパティ|Javaコンパイラ」

これを行う方法の詳細については、 https ://stackoverflow.com/a/2540730/26510をご覧ください。

于 2012-03-16T12:44:33.723 に答える
2

ブラッドパークスと同じ答え...しかしもっとテキスト

私はまったく同じ問題を抱えており、上記の解決策を他の多くの解決策と一緒に試しましたが、すべて否定的な結果になりました。私は新しい新しいDevenvから始めて、spring-mvc-templateをインストールし、インストール直後に実行しようとしました(動作するはずですが、失敗しました)

私にとっての問題は、プロジェクトでjdk1.6を使用していたことでしたが、eclipseで選択した実行環境はjdk1.7でした。 解決策は、このプロジェクトがjdk1.6に設定されるように、プロジェクト固有の実行環境設定を変更することでした。[プロジェクト]->[プロパティ]->[Javaコンパイラ]->[プロジェクト固有の設定を有効にする]をオンにします(まだチェックされていない場合)->適切なjdkを選択します(インストールされていない場合は追加します)。

私はここ数日インターネットの隅々で答えを探してきたので、これが誰かを助け、その人の時間を節約できることを願っています。私が必死になって、それが(私の脳によれば)見つけられそうにない領域で解決策を探し始めたとき、私は偶然それを自分で見つけました。=)

私の2セント。ありがとう!

編集1:プロジェクト固有の設定を使用する

Edit2:ブラッド・パークスがこのスレッドですでにこれに答えていることに気づきました。まあ、少なくとも私は「編集者」を手に入れました-これからバッジ= D

于 2013-03-17T17:15:43.267 に答える
1

残念ながら、これはかなり広範なクラスのエラーメッセージです。うまくいかない可能性のあるさらに別のことは、いくつかのクラス/jarが欠落している場合です。たとえば、spring-expression jarファイルが欠落している場合、dispatch-servletは、どのように努力し、他のすべてがどのように正しく構成されていても、コントローラーを見つけることができません。

于 2013-05-31T20:45:19.207 に答える
1

EclipseLunaEEでこの問題が発生しました。私の解決策は、Eclipseを再起動するだけで、魔法のようにサーブレットのロードを適切に開始しました。

于 2015-07-02T10:31:14.280 に答える
0

必要なのは、最初にURLに応答し、次にjspをレンダリングするコントローラーを用意することです。解決策については、このリンクを参照してください。

于 2009-08-12T15:02:15.763 に答える
0

「/openStudentPage」は私が最初に開きたいページです、私はしました:

 @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
     return "redirect:/openStudentPage";
    }

@RequestMapping(value = "/openStudentPage", method = RequestMethod.GET)
public String listStudents(Model model) {
    model.addAttribute("student", new Student());
    model.addAttribute("listStudents", this.StudentService.listStudents());
    return "index";
}
于 2015-01-22T10:46:07.940 に答える
-4

サーブレット名ディスパッチャーを他の名前に変更します。ディスパッチャーはspring3、spring4バージョンの事前定義された名前であるためです。

<servlet>
    <servlet-name>ahok</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ashok</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
于 2014-07-19T12:40:48.340 に答える