Spring boot - 无法解析jsp视图
Posted
技术标签:
【中文标题】Spring boot - 无法解析jsp视图【英文标题】:Spring boot - Unable to resolve jsp views 【发布时间】:2014-08-27 05:37:14 【问题描述】:我正在尝试使用 Spring Boot 构建一个基本的 MVC 应用程序,Hibernate 作为 ORM,mysql 作为数据库。我面临的问题是 jsp 视图 没有得到解决。
当我尝试使用带有以下 URL 的 GET 请求获取注册表单时收到 404 错误:
http://localhost:9000/users/register/
这是我在应用程序中的设置。
目录结构:
-src
-main
-java
-com
ApplicationStart.java
-controllers
UserController.java
-repositories
UserRepository.java
-webapp
-WEB-INF
-jsp
register.jsp
-resources
application.properties
用户控制器:
@RestController
public class UserController
private UserRepository userRepository;
@Autowired
public UserController(UserRepository userRepository)
this.userRepository = userRepository;
@RequestMapping(value = "/users/register", method = RequestMethod.GET)
public String Register()
return "register";
Application.properties:
server.port: 9000
spring.datasource.url:jdbc:mysql://localhost/Contacts
spring.datasource.driverClassName: com.mysql.jdbc.Driver
spring.datasource.username: 根
spring.datasource.password:
spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix:.jsp
POM.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- HIBERNATE -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<!-- MYSQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
主类
@ComponentScan
@Configuration
@EnableAutoConfiguration
public class ApplicationStart
public static void main(String[] args)
SpringApplication.run(ApplicationStart.class, args);
这是我的应用程序的当前设置。非常感谢任何有关如何解决此问题的帮助。
如果需要更多信息,请发表评论。
谢谢-
【问题讨论】:
试试http://localHost:port/YourProjectName/users/register
确保你的 pom 包装是战争而不是罐子。
【参考方案1】:
Spring Boot 对 JSP 的支持有限,因为它使用了嵌入式 servlet 容器。来自 Spring Boot reference documentation:
在运行使用嵌入式 servlet 容器(并打包为可执行存档)的 Spring Boot 应用程序时,JSP 支持存在一些限制。
对于 Tomcat,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且还可以部署到标准容器(不限于,但包括 Tomcat)。由于 Tomcat 中的硬编码文件模式,可执行 jar 将无法工作。 Jetty 目前不能用作带有 JSP 的嵌入式容器。 有一个JSP sample,您可以查看如何设置。
首先让您的应用程序成为可执行的战争,并确保您使用 Tomcat(启动应用程序时检查日志)。除非您明确声明应包含 Jetty,否则您使用的是 Tomcat,因为它是默认提供的。或者,尝试更改您的视图技术,这可能需要更多的初始工作,但可以显着减少开发过程中的周转时间,请参阅Hotswapping。
【讨论】:
【参考方案2】:我最近在升级一个旧项目时遇到了这个问题,该项目需要将jsps
作为视图技术,并将tomcat
作为嵌入式servlet-container
。警告:选择一个替代templating engine,如果可以,请避免使用 jsps。但是,如果您无法避免 jsps,并且您的应用程序无法解析它们,那么在撰写本文时(spring-boot 2.x.x),请确保以下几点:
java -jar war-filename.war
验证您的控制器是否具有@Controller
注释
但不是注解@EnableWebMvc
。那是因为您正在使用spring-boot
为您配置 WebMVC。
您的控制器是否被扫描并作为组件注入?如果您在不同的包中定义了您的控制器,可能您缺少@ComponentScan
注释?
您的 jsps 定位和配置是否正确?例如,假设您的 jsps 位于 /src/main/webapp/WEB-INF/jsp/,那么您的 application.properties
应该是这样的:
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
此外,由于您使用的是 spring-boot,因此您的 Application
无需扩展 SpringBootServletInitializer
。它也可以,但为了简单起见,您只需要一个如下所示的类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application
public static void main(String[] args)
SpringApplication.run(Application.class, args);
仅供参考,下面提到了所需的最小依赖集(Maven 示例):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<dependencies>
<!-- spring-boot dependencies below -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl and jsp compilation support below -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
【讨论】:
【参考方案3】:同意@code4kix,如果所有这些都不起作用,请尝试在 application.properties 文件中添加以下属性
spring.thymeleaf.enabled=false
【讨论】:
以上是关于Spring boot - 无法解析jsp视图的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 无法解析 Freemarker 视图
无法在 Spring Boot 中解析名称为“index”的视图
状态为404的Springboot Whitelabel错误页面:无法解析JSP的路径