Java Spring启动-无法解析jsp视图
我正在尝试使用SpringBoot构建一个基本的MVC应用程序,其中Hibernate作为ORM,MySql作为数据库。我面临的问题是,jsp视图没有得到解决 当我尝试使用具有以下URL的get请求获取注册表时,我收到一个404错误:Java Spring启动-无法解析jsp视图,java,jsp,spring-mvc,spring-boot,Java,Jsp,Spring Mvc,Spring Boot,我正在尝试使用SpringBoot构建一个基本的MVC应用程序,其中Hibernate作为ORM,MySql作为数据库。我面临的问题是,jsp视图没有得到解决 当我尝试使用具有以下URL的get请求获取注册表时,我收到一个404错误: http://localhost:9000/users/register/ 这是我在应用程序中的设置 目录结构: -src -main -java -com ApplicationStart.java
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";
}
}
用户控制器:
-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";
}
}
应用程序。属性:
-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";
}
}
服务器端口:9000
spring.datasource.url:jdbc:mysql://localhost/Contacts
spring.datasource.driverClassName:com.mysql.jdbc.Driver
spring.datasource.username:root
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>
这是我的应用程序的当前设置。非常感谢您对如何解决此问题的任何帮助
如果需要更多信息,请发表评论
谢谢-Spring Boot对JSP的支持有限,因为它使用了嵌入式servlet容器。从弹簧靴: 当运行使用嵌入式servlet容器(并打包为可执行存档)的Spring引导应用程序时,JSP支持存在一些限制
- 使用Tomcat时,如果您使用war打包,它应该可以工作,也就是说,一个可执行的war可以工作,并且可以部署到一个标准容器(不限于,但包括Tomcat)。由于Tomcat中的硬编码文件模式,可执行jar无法工作
- Jetty目前不作为带有JSP的嵌入式容器工作。 这里有一个窗口,您可以查看如何设置
首先让你的应用程序成为一个可执行的war,并确保你使用Tomcat(启动应用程序时检查日志)。除非您明确声明应该包括Jetty,否则您使用的是Tomcat,因为它是默认提供的。或者,尝试更改视图技术,这可能需要更多的初始工作,但可以显著缩短开发期间的周转时间,请参阅。我最近在升级一个旧项目时遇到了这个问题,该项目需要使用
jsp
作为视图技术,而tomcat
作为嵌入式servlet容器。警告:选择一个替代方案,尽可能避免JSP。但是,如果您无法避免JSP,并且您的应用程序无法解决它们,在撰写本文时(spring boot 2.x.x),请确保:
- 确保应用程序是一个war,而不是一个jar。尽管让JSP使用jar包装并非不可能,但由于某些原因,它有点复杂。您可以在服务器或容器中使用war包运行它们,就像:
java-jarwarfilename.war
- 验证控制器是否具有
@Controller
注释
但不是注释@EnableWebMvc
。这是因为您正在使用springboot
为您配置WebMVC
- 您的控制器是否作为组件进行扫描和注入?如果在不同的包中定义了控制器,可能缺少
@ComponentScan
注释
- 您的JSP是否正确定位和配置?例如,假设您的jsp位于/src/main/webapp/WEB-INF/jsp/,那么您的
应用程序的属性应该是这样的:
spring.mvc.view.prefix:/WEB-INF/jsp/
spring.mvc.view.suffix:.jsp
另外,由于您使用的是spring boot,因此您的应用程序不需要扩展SpringBootServletilizer
。它也可以工作,但为了保持简单,您只需要一个如下所示的类:
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示例):
org.springframework.boot
spring启动程序父级
2.0.2.1发布
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧靴起动器执行器
org.springframework.boot
弹簧启动机tomcat
假如
javax.servlet
jstl
org.apache.tomcat.embed
汤姆卡特·贾斯珀
假如
同意,如果所有这些都不起作用,请尝试在application.properties文件中添加以下属性
spring.thymeleaf.enabled=falsetryhttp://localHost:port/YourProjectName/users/register
确保您的pom包装是war而不是jar。