ハンドラーはinternalresourceview 'apiForm'に転送しますが、エラー404 RequestURI =/WEB-INF/pages/apiForm.jspが発生します。/WEB-INF/pages /にあるapiForm.jspを確認します。
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 /のLast-Modified値を決定する「testapp2」という名前のDispatcherServlet apiForm.jsp]
13: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のリクエストを処理する 'testapp2'という名前のDispatcherServlet ]
13:45:02,038 WARN [org.springframework.web.servlet.PageNotFound]-URI [/WEB-INF/pages/apiForm.jsp]のHTTP要求のマッピングが見つかりません「testapp2」という名前のDispatcherServlet
13:45:02,045 DEBUG [org.springframework.web.servlet.DispatcherServlet]-リクエストが正常に完了しました
13:45:02,048 DEBUG [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>
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>
はい、私はこのパーティーに遅れていることを知っていますが、それは他の人を助けるかもしれません。
サーブレットコンテナは、一致する最長パスに基づいてマッピングを選択します。したがって、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>
<mvc:default-servlet-handler />
をDispatcherServlet構成に追加するだけで完了です!
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アプリケーションコンテキストにスキャンされません!
私を助けた解決策は、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>
インターネット全体を読んで、拡張機能なしのhtmlパス+拡張機能なしのAPIパスをsitemeshで処理する方法を理解したと思います。私はこれを理解するためにまっすぐなジャケットに包まれました、毎ターンは何か他のものを壊すようでした。それから私はついにこの投稿に出会いました。
<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/>
Spring 3.1とTomcat 7では、次のエラーが発生しました:
org.springframework.web.servlet.DispatcherServlet noHandlerFound 'appServlet'という名前のDispatcherServletでURI [/ baremvc /]のHTTP要求のマッピングが見つかりません
そして、次の設定をweb.xmlに追加する必要がありました。
<welcome-file-list>
<welcome-file/>
</welcome-file-list>
そして、アプリケーションはうまくいきました!
簡単な確認ができます。現在、休止状態とともにSpring MVCアーキテクチャを使用しています。クラス名のすぐ上の@Controllerアノテーションを書くのを忘れていました。これが私にとって問題の原因でした。
@Controller
public class MyClass{
...
}
この簡単なチェックで問題が解決することを願っています。
私は同じ問題を抱えていましたが、もちろん少し違いがありました。ストーリーは、次の行を削除したときです。
<mvc:resources mapping="/resources/**" location="classpath:/resources/" />
すべては問題ありませんでしたが、その行があると同じエラーが発生しました。
いくつかの試行錯誤の後、次の行を私の春のアプリケーションコンテキストファイルに追加する必要があることがわかりました。
<mvc:annotation-driven />
それが役に立てば幸い!
ブラッド・パークスと同じ答え...もっとテキストはありますが
私はまったく同じ問題を抱えており、上記の解決策を他の多くの問題と一緒に試してみましたが、すべてマイナスの結果になりました。新しい新鮮なDev envから始めて、spring-mvc-templateをインストールし、インストール後に直接実行しようとしました(動作するはずですが、失敗しました)
私にとって問題は、プロジェクトでjdk1.6を使用していましたが、Eclipseで選択した実行環境はjdk1.7でした。解決策は、プロジェクト固有の実行環境設定を変更して、このプロジェクトがjdk1.6に設定されるようにすることでした。プロジェクトを右クリック->プロパティ-> Javaコンパイラ-> [プロジェクト固有の設定を有効にする]がオンになっていない場合はオンにします->適切なjdkを選択します(またはインストールされていない場合は追加します)。
これがインターネットの隅々で答えを探すためにここ数日を費やしたので、これがsomeoneを助け、その時間を節約できることを願っています。必死になって、それが(脳によると)見つけられそうにない領域で解決策を探し始めたとき、私は偶然それを偶然見つけました。 =)
私の2セント。ありがとう!
編集1:プロジェクト固有の設定を使用する
編集2:ちょうどこのスレッドでブラッドパークスがすでにこれに答えていることに気づいた。まあ、少なくとも私はこれから「編集者」バッジを得ました= D
Eclipse Luna EEでこの問題に遭遇しました。私の解決策は、単にEclipseを再起動するだけで、魔法のようにサーブレットを適切にロードし始めました。
残念ながら、これはかなり広範なクラスエラーメッセージです。さらに間違っている可能性のある別のことは、いくつかのクラス/ jarが欠落している場合です。たとえば、spring-expression jarファイルが欠落している場合、dispatch-servletは、あなたがどんなに努力しても、どのようにコントローラーを見つけられない他のすべてが設定されていることを修正します。
これは、アプリが実際にコンパイルされていないにもかかわらず、Tomcatで起動されている場合にも発生する可能性があります。これが起こるのを見たとき、プロジェクトには「プロジェクト固有の」JDKが指定されていて、コードはその特定のJDKを持たないマシンでチェックアウトされたため、コンパイルされませんでした。 EclipseはデフォルトではJDKではなくJREにデフォルト設定されていたため、アプリはコンパイルされませんでした。
特定のケースで修正するために、ここで「プロジェクト固有の設定」をオフにしました。
「プロジェクト|プロパティ| Javaコンパイラ」
これを行う方法の詳細情報は次のとおりです。 https://stackoverflow.com/a/2540730/2651
「/ 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";
}
必要なのは、最初にURLに応答してからjspをレンダリングするコントローラーを持つことです。こちらをご覧ください ソリューションのリンク 。