2017-08-26 16 views
1

私は春のMVCとブーツの周りに頭を上げようとしています。 私はそれの背後にある理論を理解していますが、何とか私はそれを働かせることができません。 私は白いページのエラーの質問が1000回尋ねられたのを知っていますが、それらはすべてweb.xmlを使用して設定します。私はapplication.propertiesを使用します。mvcで自動起動されたスプリングブート

私はプロジェクトを作成しました。私のアプリケーションはコントローラでした。JSPページを表示するためのリクエストマッピングとレスポンスボディを使用しました。これは、異なるJSPページを複数回呼び出してもうまく機能しました。しかし、コントローラーを分離してコントローラークラスに入れようとすると、白いラベルのページエラーが出るのですか? 誰かが私が間違っていることの考えですか?

私は、彼の主なアプリはデフォルトパッケージにあり、パッケージされたアプリでは私がエラーが発生したため、チュートリアルに従っています。最後のビデオとビデオの間で私は保護されたSpringApplicationBuilderメソッドconfigureをオーバーライドしてしまいましたが、それをオーバーライドしようとするとスーパークラスのメソッドではないという警告が表示されます。彼はまた、メッセージの内容を決して説明しません。

これは私のpom.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
    http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>be.intecBrussel.danielDemesmaecker</groupId> 
<artifactId>springMVC</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>war</packaging> 
<properties> 
    <java.version>1.8</java.version> 
</properties> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.8.RELEASE</version> 
</parent> 

<build> 
    <finalName>SpringMVC</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <configuration> 
       <executable>true</executable> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>required</scope> 
    </dependency> 
</dependencies> 
</project> 

私のPageControllerで:

@Controller 
public class PageController { 

    @RequestMapping("/") 
    String home(){ 
     return "home"; 
    } 

    @RequestMapping("/about") 
    String about(){ 
     return "about"; 
    } 

    @RequestMapping("/contact") 
    String contact(){ 
     return "contact"; 
    } 
} 

マイアプリ:

@EnableAutoConfiguration 
@ComponentScan 

public class App { 
    public static void main(String[] args) { 
     SpringApplication.run(App.class,args); 
    } 
} 

マイアプリ彼女はまだコントローラクラスなしで働いていたとき。

@EnableAutoConfiguration 
@Controller 

public class App { 
    public static void main(String[] args) { 
     SpringApplication.run(App.class,args); 
    } 

    @RequestMapping("/") 
    String home(){ 
     return "home"; 
    } 

    @RequestMapping("/about") 
    String about(){ 
     return "about"; 
    } 

    @RequestMapping("/contact") 
    String contact(){ 
     return "contact"; 
    } 
} 

なぜ私はこのようなことではないかのような質問にコミュニティがぶつかるのを知っていますが、問題をどのように他の方法で知ることができないのか分かりません。だから誰でも私のコントローラを独立したクラスに移動させた後に、ビューリンクが壊れてしまった理由を理解するのを助けることができます。参考 :私はこのチュートリアルを使用していました:http://courses.caveofprogramming.com/courses/spring-boot-tutorial/lectures/1063634

は私の英語すみません、私は

答えて

0

を入れ

mvc/src/main/java/da/ny/App.java 
mvc/src/main/java/da/ny/Controller.java 

をHAVAすべきフォルダ構造の一種です。 あなたはそのjavadocの見ることができるように、私は裸の注釈

@ComponentScan 

を参照してください。

特定 *パッケージが定義されていない場合、スキャンはこのことを宣言し *クラスのパッケージから発生します。注釈。

したがって、コントローラをAppクラスと同じ、またはabサブパッケージに配置する必要があります。

コントローラクラスにコンストラクタを追加し、内部にブレークポイントを追加し、デバッグモードでアプリケーションを起動します。それがブレークポイントで停止しない場合、コントローラは、スプリングによってインスタンス化されていません....

あなたは書きました:

をそれらはすべて設定するためのweb.xmlを使用し、私はapplication.propertiesを使用。

サーブレットコンテキストを設定するためにweb.xmlが使用されます。 Javaサーブレットバージョン3以降、これはJavaで完全に実行できます。 Springはこれを行います。これはもうweb.xmlが不要な理由です。

application.propertiesは、春と独自のクラスの設定に使用されます。これはweb.xmlとはまったく異なるものです。あなたは、この基本的な春のチュートリアルを見ているかもしれ

Finaly、あなたが私はあなたに少しを助けることができる、これまでに...

希望をしようとしたものよりも従うことは容易であろう。

+0

ステファンありがとうございます。それはそれほど簡単でした。私は自分のコントローラのパッケージを私のアプリケーションのサブに移動し、今は動作します。私は基本的な春のチュートリアルに従いましたが、彼らは構成クラスを使ってBeanを構成し、サーバーを使用しませんでした。それは依存性注入に関するものでした。助けてくれてありがとう –

+0

ニースは私の答えを正しいものとしてマークすればいいですね! –

0

オランダだパッケージが主な問題です。 @ComponentScanはパッケージを取り出し、すべてのサブパッケージを検索します。たとえば、パッケージcom.dan.ny.Appのメインクラスはcom.dan.ny.controllers.*にあります。

あなたがデフォルトのパッケージを言うとき、私はあなたがパッケージ宣言を一番上に置かないと仮定しています。あなたはこれをする必要があります。それはJavaのベストプラクティスに帰着します。それは良いパッケージ名である必要はありませんが、あなたは大きなアプリでそれを持っていただければ幸いです。 Springはクラスパス上のライブラリ内のコードとあなたのコードを区別する必要があります。ここで

はあなたのコントローラが春の構成に追加されていないように見えます両方のファイルの先頭に

package da.ny; 
+0

デフォルトパッケージでは、main/javaを使用します。 –

+0

はい、それが問題です。パッケージ名を作成して使用します。 –

+0

これは私のフォルダ構造です:mvc/src/main/java/app/App.class mvc/src/main/java/controllers/PageController.class。私のapplication.propperties:mvc/src/main/resources。私はmain/javaに自分のアプリケーションを置こうとしました。しかし、私はエラーが発生しました –

関連する問題