割り当てのために、Webアプリケーションを作成するためのJavaのSpring MVCを実践しています。私はIDE Intellij Ultimate 2016.2.5でこのプロジェクト全体を構築しました。無効なルーティングのため、スプリングルーティングで404エラーが発生する
私はこのためにMavenプロジェクトを作成し、これに対して正しい依存関係と依存関係をインポートしてビルドしました。
IDEは、次のディレクトリ構造を構築する:
├───src
│ └───bas
│ └───animalkingdom
│ ├───config
│ ├───controllers
├───test
│ └───bas
│ └───animalkingdom
└───web
├───META-INF
├───resources
└───WEB-INF
└───pages
私のコンフィギュレーションクラスがWebMvcConfigurerAdapterから延びる、ここでconfig
パッケージは次のとおりです。
パッケージbas.animalkingdom.config。
import ...
@Configuration
@ComponentScan("bas.animalkingdom")
@EnableWebMvc
public class Config extends WebMvcConfigurerAdapter {
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/pages/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
@ComponentScan
は、すべてのソースファイルがあるメインソースディレクトリを指していなければならないと思っていました。
私はまた、WebApplicationInitializer
からのクラスが必要であると言われました。私は私の学校からこれを持ってきました
package bas.animalkingdom.config;
import ...
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(Config.class);
ctx.setServletContext(servletContext);
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
これはconfig
パッケージにもあります。
Configクラスは、私のIDEのプロジェクト構造設定にSpring Application Context
として設定されています。
ルートディレクトリには、web
というフォルダがあります。フォルダWEB-INF
に空のweb.xml
ファイルがあります。これは、設定が設定クラスを介してロードされるため、私は必要としないと言われました。それは次のようになります。web
フォルダのルートディレクトリに
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
はindex.jsp
ファイルです。
bas.animalkingdom.controllers
パッケージには、私のコントローラがあります。私はlocalhost/animals
URLに移動し、それは私のweb\WEB-INF\pages\
パッケージにanimals.jsp
ファイルをロードすることをできることを期待このコントローラでは
package bas.animalkingdom.controllers;
import ...
@Controller("AnimalC")
public class AnimalController {
@RequestMapping(value = "/animals", method = RequestMethod.GET)
public String getAnimals(ModelMap modelMap) {
Animal animal = new AfricanElephant(new Male(), "Body Covering", "Ename", " acolor", 123, 321);
modelMap.put("animal", animal);
return "animals";
}
}
:テストpurposingのために、私は一つだけを作成しました。
私のコードにはコンパイルエラーはありません。
TomCatサーバーを実行し、ブラウザーを開いて対応するホストでlocalhostに移動すると、index.jspファイルが問題なくロードされます。このファイルはweb\
パッケージに含まれています。
localhost:(port)/animals
に行くと、404ページが表示され、ページが見つからないというメッセージが表示されます。
この原因は何ですか?私はそのルートを正しく設定するコントローラを定義しましたか?
また、他のSpring MVCチュートリアルを見ると、それらはすべて別のパッケージを使用していますが、これも同様ですか?
手始めに、あなたがそれを必要としない、それは現在、仕事をしてから 'WebInitializer'を防ぐweb.xml'あなた'取り除きます。 –
コントローラに 'pages/animals'を返す必要はありませんか? –
@OlarAndreiなぜですか? – Bas