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