4

を装着System.out.printlnすると@Controller、Tomcat コンソールにメッセージが表示されますが、Web ブラウザーでは表示されますThe requested resource () is not available.

私のコントローラー:

@Controller
public class IndexPageController {
    @RequestMapping("/hello")
    public String homePage(Model model) {
        System.out.println("Controller method called"); // gets printed
        return "hello";
    }
}

私のビュー リゾルバー (この URL ディスパッチャーに関連する 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/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

この必須プロパティを削除すると、viewClass に関する例外がスローされるため、ViewResolver は確実に作成されます。

もちろん、/WEB-INF/jsp/hello.jspファイルは存在します。また、このファイルは適切にデプロイされます (Tomcat ランタイム ディレクトリをチェック)。

に例外は見られませんtomcat_working_dir/logs。次のログのみにアクセスします。

127.0.0.1 - - [01/Nov/2013:13:59:01 +0100] "GET /mvctest/hello HTTP/1.1" 404 952

コントローラーから「hello.jsp」を返しても何も変わりません。

/helloまったく同じ出力が得られる以外の URL を呼び出す`The requested resource () is not available.

JstlViewAGAIN を介して JSPに転送されているように見えますがDispatcherServlet、もちろんディスパッチャーはそのような URL のマッピングを認識していません。

春のログ:

14:20:43.049 ["http-bio-8080"-exec-16] DEBUG org.springframework.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'hello'; URL [/WEB-INF/jsp/hello.jsp]] in DispatcherServlet with name 'SpringDispatcher'
14:20:43.049 ["http-bio-8080"-exec-16] DEBUG org.springframework.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/jsp/hello.jsp] in InternalResourceView 'hello'
14:20:43.049 ["http-bio-8080"-exec-16] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'SpringDispatcher' processing GET request for [/mvctest/WEB-INF/jsp/hello.jsp]
14:20:43.050 ["http-bio-8080"-exec-16] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /WEB-INF/jsp/hello.jsp
14:20:43.050 ["http-bio-8080"-exec-16] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Did not find handler method for [/WEB-INF/jsp/hello.jsp]
14:20:43.050 ["http-bio-8080"-exec-16] WARN  org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/mvctest/WEB-INF/jsp/hello.jsp] in DispatcherServlet with name 'SpringDispatcher'

TRACE-leveled log here: pastebin raw file .

web.xmlディスパッチャ構成:

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

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

他にservletsservlet-mappingsもありませんwelcome-file-list

4

1 に答える 1

5

この問題は、ディスパッチャ サーブレット マッピングに起因しています。「/*」マッピングにより、jsp へのリクエストも傍受します。そのはず:

<servlet-mapping>
    <servlet-name>SpringDispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
于 2013-11-01T13:35:41.157 に答える