【问题标题】:How to structure project with Spring Boot, Gradle, and JSPs如何使用 Spring Boot、Gradle 和 JSP 构建项目
【发布时间】:2016-12-11 11:25:30
【问题描述】:

我开始使用一本书来学习 Spring,但我陷入了困境。我正在实现本书的示例,因为我想运行该应用程序,所以我使用的是 spring-boot。我唯一得到的是一个 “出现意外错误(类型=未找到,状态=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的地方?

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    如果你想在 Spring Boot 中使用 JSP,你必须使用 WAR 格式而不是 fat JAR 格式。

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

    【讨论】:

      【解决方案2】:

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

      main/webapp/WEB-INF/views/
      

      【讨论】:

      • 我试过了,没用。我想这是因为 Sam Brannen 上面写的限制。还是谢谢!
      猜你喜欢
      • 2020-04-13
      • 2023-04-09
      • 2020-03-13
      • 2021-11-01
      • 2021-08-01
      • 2018-09-24
      • 2018-05-15
      • 2020-05-16
      • 2020-01-16
      相关资源
      最近更新 更多