2012-03-21 10 views
2

これはおそらく簡単なものですが、私は推測しているものがありません。この問題は次のようになります。HelloControllerを使用して "/WEB-INF/hello.jsp"を表示しようとしています。残念ながら、アクセスしようとすると404が表示されますhttp://example.com/app/helloSpring MVCコントローラが見つかりません

ここにコードがあります。おそらく簡単な修正です。

のweb.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 
<display-name>app</display-name> 

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value> 
    </context-param> 

    <listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
    </listener> 

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/classes/applicationContext.xml</param-value> 
    </init-param> 
</servlet> 

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

applicationContext.xmlを:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:security="http://www.springframework.org/schema/security" 
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.1 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.1.xsd 
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.1.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> 

<context:component-scan base-package="web.controller" /> 

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    p:prefix="/WEB-INF/" p:suffix=".jsp" /> 

</beans> 

HelloController.java:

@Controller 
public class HelloController { 

    @RequestMapping(value="/hello", method=RequestMethod.GET) 
    public ModelAndView helloWorld() { 
     ModelAndView mv = new ModelAndView(); 
     mv.setViewName("hello"); 
     return mv; 
    } 
} 

Hello.jspの:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Hello</title> 
</head> 
<body> 
<p>Hello</p> 
</body> 
</html> 

更新:リクエストごとにエラーメッセージが追加されました。

エラー404 - HTTP/1.1 - RFC 2068ハイパーテキスト転送プロトコルから見つかりませんでした:サーバーは要求URIに一致するものを見つけていない

10.4.5 404が見つかりませんでした。 は、条件が一時的なものか、または のものかを示しています。

サーバーがこの情報をクライアントの が利用できるようにしたくない場合は、ステータスコード403(禁止)を代わりに使用できます。 ステータスコードは、 内部で設定可能なメカニズムによって、古いリソースが恒久的に利用できず、転送先アドレスがないことをサーバが認識した場合に使用する必要があります(SHOULD)。

+0

''を試してみましたか? –

+0

これまでは運がなかったので、これをapplicationContext.xmlに戻しました。 – Jason

+0

アプリケーション起動時に表示されました何かのように: '情報:org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping - マップされたURLパス[/ hello/*]をハンドラ 'helloController''に移動しますか? – vacuum

答えて

7

この問題(web.xmlで):

<url-pattern>/*</url-pattern> 

これはJSPに、コントローラからあなたの要求を含む春サーブレット、からすべて要求をリダイレクトします。基本的には、制御フローはコントローラから再びSpringにループします。 JSPの要求がSpringではなく、下位のコンテナに直接向くように、それを絞り込む必要があります。

<url-pattern>/app*</url-pattern> 

にそれを変更してみてください、再試行してください。先導スラッシュと後スラッシュを使って機能させるには、少し練習しなければならない場合があります(<url-pattern>/app*</url-pattern>または@RequestMapping("hello")など)

+0

まだ運がない。この時点で、Springがコントローラクラスを取得しているのだろうかと思います。 – Jason

+0

@Jason:404ページを表示します。そのスタイルは、見つからないものを手がかりにします。 – skaffman

+0

オリジナルの投稿に追加 – Jason

0

コメントを入力すると、特定のURLにマップされた情報が表示されます。だから、私は、プログラムがコントローラにあると思う。

「mil.army.retain.web」のコントローラを確認してください。コントローラ」パッケージと注釈-config設定をオンにします。

<context:annotation-config /> 
+0

それは私が運がないと試した別のものでした。また、パッケージ名を編集するのを忘れてしまったようです... – Jason

+0

http:// localhost:nnnn/helloに行くときのログの内容は? – vacuum

+1

EclipseコンソールのWebサーバーログには、/ app /hello.doのマッピングが見つからないか、見つからないという傾向があります。私はLog4Jリスナーを設定していないので、アプリケーションの起動を監視してまだスプリングの初期化を確認することはできません。 – Jason

1

あなたの次の行で言及したように、あなたのすべてのコントローラクラス/サブパッケージまたは他のクラスが同じパッケージ内にあることを確認してください:

<context:annotation-config /> 
<context:component-scan base-package="com.kfs" /> 
+2

は 'annotation-config'タグの効果を意味します – shevchyk

関連する問題