2017-06-29 19 views
0

Webアプリケーション用のJavaサーブレットを試しています。このアプリケーションでは、サーブレットにヒットし、.jspページを正しくロードできました。これを実行してSpring MVCに移動しました。私はサーブレットコントローラクラスが呼び出されたときに問題に遭遇しましたが、ビューをロードしません。Spring MVC - ロードしていないビュー

普通のJavaサーブレットで正しく動作しているため、私はリソースが見えないと判断しました。私はまた、すべてのリソース/チュートリアルを読んで、幸運のない問題を特定しようと努力しましたが、私の問題は変わりません。さらに、トラブルシューティングのために、エラーページタグ()を追加して、ページをヒットしようとすると正しくリダイレ​​クトされるかどうかを確認しましたが、404エラーで指定されたページを見つけることができませんでした。

誰かが私が逃したものを識別できますか?

のWeb.xml

バリエーション:変更URLパターン、INIT-paramsは、コンテキストの設定位置等

<servlet> 
    <servlet-name>LoginServlet</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/LoginServlet-servlet.xml</param-value> 
</init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>LoginServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

がloginservlet-servlet.xml

バリエーション:I他の投稿にも示唆されているように宣言を異なる位置に移動しようとしましたが、結果はありませんでした。また、一般的に私は、プレフィックスがに設定されなければならなかった/ WEB-INF/JSP/

<context:component-scan base-package="plan.route.server" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:annotation-config/> 
<mvc:annotation-driven /> 

LoginServlet.java

バリエーション:異なるrequestMappingパス、ではなく、クラスのメソッドをマーキングから文字列を返しますModelAndViewクラスを返すメソッド、

package plan.route.server; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller() 
@RequestMapping("/") 
public class LoginServlet extends org.springframework.web.servlet.mvc.AbstractController { 

@RequestMapping(method = RequestMethod.GET) 
public String forwardTo() { 
    return "index"; 
} 

@Override 
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 
    return new ModelAndView("login", "login", "login"); 
} 

} 

プロジェクトの設定

バリエーション:サーブレットXMLの異なる場所、.jspというファイルなど

Project Setup

誰もが私が見逃しているものを見ることができますか?私がやろうとしているのは、すべてのバリエーションが.jspページをロードしているにもかかわらずです。

編集:私のJavaサーブレットのメソッドが呼び出された後、次のエラーが表示されます。

WARNING: No mapping found for HTTP request with URI [/Root/Login] in DispatcherServlet with name 'LoginServlet' 

答えて

1

がloginservlet-servlet.xmlファイルで

<property name="prefix" value="/WEB-INF/jsp/"/> 

代わりの

<property name="prefix" value="/" /> 
+0

乾杯を動作するはずですが、私はこれを追加している必要があり変形セクション。 .jspファイルをweb-infフォルダから移動しようとすると、そのプレフィックス値が変更されました。私はそれを再追加する必要がありますが、これは私の問題を解決しません。ありがとう。 – Unknown

2

を試してみてください私は1つのことが間違っているのを見て、LoginServlet-servlet.xmlのjsp設定で、プレフィックスの値を

<context:component-scan base-package="plan.route.server" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:annotation-config/> 
<mvc:annotation-driven /> 

あなたの設定では、間違ったパスを指定したため、Springはjspファイルを見つけることができません。あなたの場合は、/WEB-INF/jspフォルダにjspファイルを持っている必要があります。

EDIT:

私は自分のワークスペースにプロジェクトを設定し、それが動作します。 web.xmlファイルからこの行を削除するようにしてください:

<init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/LoginServlet-servlet.xml</param-value> 
</init-param> 

そして、あなたのコントローラクラスは次のようにする必要があります:

@Controller 
@RequestMapping("/") 
public class LoginServlet{ 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView forwardTo(ModelMap model) { 
     return new ModelAndView("login", "login", "login"); 
    } 
} 

そして、あなたは、コントローラを起動する方法に注意を払う:

http://localhost:8080/Root/ 

これは、プロジェクトのルートに名前を付けてコントローラが"/"のパスを聴いているため、コントローラを呼び出す正しい方法です。私はポート8080を使用しました。なぜなら、あなたはtomcatでこの質問にタグを付けました。そして、これはデフォルトのTomcatポートです。現在のプロジェクトの設定

がloginservlet-servlet.xml

<context:component-scan base-package="plan.route.server" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:annotation-config/> 
<mvc:annotation-driven /> 

LoginServlet.java

@Controller 
@RequestMapping("/") 
public class LoginServlet { 

@RequestMapping(method = RequestMethod.GET) 
public String forwardTo() { 
    return "index"; 
} 

@RequestMapping(value="/login", method = RequestMethod.GET) 
public String forwardToLogin() { 
    return "login"; 
} 

} 

+0

乾杯、私はバリエーションのセクションにこれを追加する必要があります。 .jspファイルをweb-infフォルダから移動しようとすると、そのプレフィックス値が変更されました。私はそれを再追加する必要がありますが、これは私の問題を解決しません。ありがとう。 – Unknown

+0

遅く返事を申し訳ありませんが、私はそれを自分のワークスペースで動作させることができました。私の編集を参照してください。 – amicoderozer

+0

こんにちは、あなたの努力に感謝します。あなたの変更をワークスペースに同じように移植しましたが、私はまだ同じエラーを受けています。そのため、URIでHTTP要求を示す警告はマップされません。サーブレットクラスは依然として正しく呼び出されています。 – Unknown

1

これは

+0

ありがとう、私は100%以前の状態であってもまだまったく同じように動作していますが、私の現在のバージョンにこれらの変更を加えました。 – Unknown

+0

私はLoginServlet.javaを編集しました。あなたの問題の原因は、私が今含まれているログインページのリクエストマッピングがないことです。 – Perry

+0

私の答えで使用したアプローチでは、そのhandleRequestInternalメソッドは必要ありません。だから、それを削除してください。 – Perry

関連する問題