java - 如何使用 Spring Boot、Gradle 和 JSP 构建项目

标签 java spring jsp spring-mvc spring-boot

我开始通过书本学习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 :

@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 View 放在 ViewResolver 可访问的文件夹中。

WEB-INF/views/文件夹必须放在我粘贴的树中的什么位置? 是不是必须插入jsp的地方?

非常感谢。

最佳答案

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

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

关于java - 如何使用 Spring Boot、Gradle 和 JSP 构建项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41085621/

相关文章:

java - 这里的 Optional<Class> 有什么问题?

java - 在java中捕获异常以使应用程序继续执行

java - GridBagLayout 定位不正确

java - 将代码转换为 Spring 注解

java - UTC 时间自动添加到我的日期变量中

java - 批量更新从更新中返回了意外的行数(Spring/Hibernate)

java - MongoDB - 命令失败,错误代码 13 `not authorized by ***** to execute this command`

java - 如何在不使用 ComponentScan 的情况下启动 Spring Boot Web 应用程序

java - HTTP 状态 404 : The requested resource is not available

java - 如何从 servlet 显示带有图像的 html 文件?