2012-11-19 4 views
3

Я уже научился настраивать приложение Spring MVC с XML, поэтому решил пойти дальше.Spring MVC-реализация WebApplicationInitializer

Я прочитал документацию о WebApplicationInitializer и минимизировал XML в конфигурации приложения. Но когда я завершил все приготовления образца приложения, я столкнулся с 404 страницами.

Дальше я добавляю фрагменты кода, пожалуйста, дайте мне советы, как сделать подход на основе @.

Файл конфигурации:

package com.onet.init; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.view.UrlBasedViewResolver; 

@Configuration 
@ComponentScan("com.onet") 
@EnableWebMvc 
public class BaseConfig { 

    @Bean 
    public UrlBasedViewResolver setupViewResolver() { 
     UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 
     resolver.setPrefix("/WEB-INF/views/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 

} 

Initializer:

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration.Dynamic; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 

public class Initializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
     ctx.register(BaseConfig.class); 

     Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); 
     servlet.addMapping("*.html"); 
     servlet.setLoadOnStartup(1); 
    } 

} 

pom.xml

<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>oneTest</groupId> 
    <artifactId>oneTest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <packaging>war</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>3.1.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
    </dependencies> 

</project> 

Контроллер:

package com.onet.controller; 

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

@Controller 
public class HelloController { 

    @RequestMapping(value="/hello") 
    public ModelAndView goToHelloWorld() { 
     return new ModelAndView("hello-world"); 
    } 

} 

index.jsp

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Home page</title> 
</head> 
<body> 
<h1>Home page</h1> 
<p>This is a home page.</p> 
<p><a href="hello.html">Say Hello</a></p> 
</body> 
</html> 

Так что, когда я нажимаю на «Say Hello» ссылка Я получаю 404. Весь проект, который вы можете download от моего падения коробки.

+0

Я думаю, что в вашей конфигурации отсутствует эквивалент folloging xml: Yevgeniy

+0

Но я думал, что если я использую подход, основанный на аннотациях, не нужно использовать эквиваленты XML, не так ли? –

+0

как-то вам нужно сказать, что весна должна была искать аннотированные классы, не так ли? – Yevgeniy

ответ

2

Я просто проверил проект в вашем Dropbox. мне кажется, структура проекта неверна. вы смешали maven-scructure с структурой eclipse. Когда вы используете maven, вы кладете webcontent в src/main/webapp ... не в WebContent, как вы. вы можете посмотреть here для более подробной информации по этой теме.

короткая версия:

перемещать файлы из WebContent в src/main/webapp и повторите попытку.

длинная версия:

при запуске mvn package и извлечь полученный * .war из /target каталога, вы увидите, что не хватает файлов из WebContent каталога. Maven ожидает, что эти файлы будут в src/main/webapp. Я предполагаю, что вы начали с создания «Dynamic Web Project» в eclipse. Eclipse ожидает, что такие ресурсы, как * .jsp и co. который находится в WebContent, поэтому звоните index.jsp работы. Но когда дело доходит до весны, это не удается, потому что hello-world.jsp не расположен, где должно быть.

как исправить:

Начните с перемещения файлов из WebContent в src/main/webapp. затем запустите mvn eclipse:eclipse -Dwtpversion=2.0. он будет генерировать конфигурацию для eclipse (.classpath, .project и т. д.). Обновите проект в Eclipse. Теперь это должно сработать.

+0

К сожалению, после смены структуры проекта у меня было [404] (http://dl.dropbox.com/u /29572172/404.jpg), но теперь даже для домашней страницы –

+0

я только что построил и запустил ваш проект, и каждый из них отлично работает ... я продлю свой ответ на бит. – Yevgeniy

+0

Спасибо за подробный ответ с пошаговой инструкцией, но я чувствую себя как манекен ... Я сделал все, как вы сказали, но снова [ничего не получил] (http://dl.dropbox.com/u/29572172/ 404.png) –

Смежные вопросы