如何使用Spring Boot,Gradle和JSP构建项目

时间:2016-12-11 11:25:30

标签: java spring jsp spring-mvc spring-boot

我开始使用一本书来学习Spring,但我仍然坚持不懈。我正在实现本书的示例,因为我想运行应用程序,所以我使用的是spring-boot。我唯一得到的是一个 "出现意外错误(type = Not Found,status = 404)。 没有可用的消息"。

我使用配置为此的ServletDispatcher:

@EnableAutoConfiguration
public class SpittrWebAppInitializer
        extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { WebConfig.class };
    }

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

这是WebConfig.class:

@Configuration
@EnableWebMvc
@ComponentScan("spitter.web")

public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver =
                new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    } 
}

这是控制器:

@Controller
public class HomeController {

    @RequestMapping(value="/", method=GET)
    public String home() {
        return "home";
    }


}

这是我正在使用的项目的结构:

├── build
│   ├── classes
│   │   ├── main
│   │   │   └── spittr
│   │   │       ├── config
│   │   │       │   ├── RootConfig.class
│   │   │       │   ├── SpittrWebAppInitializer.class
│   │   │       │   └── WebConfig.class
│   │   │       └── web
│   │   │           └── HomeController.class
│   │   └── test
│   │       └── spittr
│   │           └── web
│   │               └── HomeControllerTest.class
│   └── resources
│       └── main
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── spittr
    │   │       ├── config
    │   │       │   ├── RootConfig.java
    │   │       │   ├── SpittrWebAppInitializer.java
    │   │       │   └── WebConfig.java
    │   │       └── web
    │   │           └── HomeController.java
    │   └── resources
    └── test
        ├── java
        │   └── spittr
        │       └── web
        │           └── HomeControllerTest.java
        └── resources

现在,如果我向localhost发出请求:8080我收到404错误,可能是因为我必须将jsp视图放在ViewResolver可以访问的文件夹中。

在我粘贴的树中,必须放置WEB-INF / views /文件夹? 它是必须插入jsp的地方吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果要将JSP与Spring Boot一起使用,则必须使用WAR格式而不是胖JAR格式。

请参阅Spring Boot参考手册中的JSP Limitations部分以及Spring Boot JSP Sample Application。该示例使用Maven,但如果您遵循Spring Boot参考手册中的指导原则,您将能够使用Gradle获得相同的结果。

答案 1 :(得分:0)

根据您的文件夹结构和ViewResolver前缀定义判断,您必须在main目录下创建以下目录并在其中添加jsp个文件:

main/webapp/WEB-INF/views/