2

サンプルアプリを用意し、

view/HelloWorld.html

ページ。コントローラーから、次を返します

public String home(Locale locale, Model model) {
    return "HelloWorld";
}

デバッグ モードでは、次の警告/エラーが表示されます。

WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/HelloWorld/WEB-INF/views/HelloWorld.html] in DispatcherServlet with name 'appServlet'

私の src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml の内容

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".html" />
</beans:bean>

.html の名前を .jsp に変更し、上記を .jsp に変更すると、問題なく動作します。

4

2 に答える 2

11

このリクエストに対してサーブレット コンテナが通過するフローは次のとおりです。

  1. まず、DispatcherServlet がサーブレット コンテナによって呼び出されます。
  2. DispatcherServlet は、コントローラーのホーム メソッドにマップするマッピングを見つけ、ホーム メソッドはビュー名「HelloWorld」を返します。
  3. これで、DispatcherServlet は View Resolver (your InternalResourceViewResolver) を使用して、モデルをレンダリングするビューを見つけます。名前は「HelloWorld」であるため、これは/WEB-INF/view/HelloWorld.htmlビューにマップされます。
  4. 今、本質的に呼び出しが行われますRequestDispatcher.forward("/WEB-INF/views/HelloWorld.html",....
  5. /WEB-INF/views/HellowWorld.htmlこの時点で、サーブレット コンテナはuriを処理できるサーブレットを見つけようとします。ある場合.jspJSPServlet、jsp のレンダリングを処理できる登録*.html済みのサーブレットがありますが、サーブレットが登録されていないため、呼び出しは で終了します"default servlet"/おそらくあなたの DispatcherServletであるサーブレットマッピングに登録されています。
  6. Dispatcher サーブレットは、リクエストを処理するコントローラーを見つけられない/WEB-INF/views/HelloWorld.htmlため、表示されるメッセージ

この種の拡張機能をサーブレット コンテナー (たとえば、tomcat) で処理する場合は、*.html拡張機能を登録して JSPServlet で処理すると、問題なく動作するはずです。または、フォルダーforward:/resources/HelloWorld.htmlに相対的な静的ファイルと見なされるものを返しresourcesます。

于 2012-11-29T01:03:31.957 に答える
0

html と jsp には多くの違いがあります。Java サーバー ページは、Java の「サーブレット」にコンパイルされます。Java Beans コンポーネントや Enterprise Java Beans コンポーネントなどの Bean や Enterprise Bean を呼び出して、サーバー上で処理を実行する場合があります。したがって、このような JSP テクノロジを使用することは、Web ベースのアプリケーションの高レベル アーキテクチャの重要な要素になる可能性があります。

于 2012-11-29T00:48:02.877 に答える