Spring Boot Web MVC 应用程序无法解析 JSP 视图
SpringBoot Web MVC Application cannot resolve JSP views
我正在尝试使用 Springboot 实现一个 Web 应用程序。但是当我请求方法时,我得到 404 错误。 Springboot 找不到 Jsp 个文件。
这是我的控制器代码:
@PostMapping(value = "/loginSuccess")
public ModelAndView loginSuccess() {
System.out.println("in login success");
return new ModelAndView("index");
}
@GetMapping(value = "/loginError")
public ModelAndView showLoginError() {
System.out.println("in login error");
return new ModelAndView("error");
}
这是我的安全配置:
@ComponentScan
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private EmployeeRepository employeeRepository;
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService(){
return new EmployeeDetailService(employeeRepository, passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.formLogin()
.successForwardUrl("/loginSuccess")
.failureUrl("/loginError")
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/").permitAll()
.and()
.httpBasic();
}
}
我还在application.properties中指定了前缀和后缀:
spring.mvc.view.prefix=/static/
spring.mvc.view.suffix=.jsp
我的 pom 文件中也有这些依赖项:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
这是我的项目结构:
谁能告诉我这是什么问题?
SpringBoot 的主要模板引擎 是 Thymeleaf、Groovy、FreeMarker、Jade。在参考指南中:
JSP should be avoided if possible, there are several known limitations
when using them with embedded servlet containers.
An executable jar will not work because of a hard coded file pattern
in Tomcat.
如果 JSP 是您无法转换的遗留代码或专有代码,您必须做一些事情才能 develop/maintain、编译和有点 运行 SpringBootApplication 运行在 Intellij 中设置它们:
maven: 你的 pom 必须是 'war' 包。
这将使 intellij 正确地查找和编译 JSP。
web facet:将你的 .jsp 文件放在一个文件夹中,它们应该在 webapp 中:src/main/webapp/WEB-INF/jsp/
jsp 永远不会是静态的 'compiled'/'interpretable'。
spring 方面:在 application.properties
中将前缀设置为 /WEB-INF/jsp/
tomcat:有那些依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
- build 运行nable war:制作一个 运行 :
的 Intellij“maven 配置”
clean install -f pom.xml
- 运行 war:使用这些设置进行 Intellij“jar 配置”:
- jar 路径:<target 文件夹中 war 文件的路径>
- 启动前:运行 您创建的“maven 配置”
我遇到了类似的问题,对我来说指定包含 JSP 文件的 Web 资源目录解决了这个问题。
- 打开项目结构并在模块 -> 网络 -> 网络资源目录下指定包含您的视图的目录(在本例中
webapp
)
- 打开
application.properties
- 在您的网络资源目录中指定包含您的视图的文件夹作为前缀(在本例中
/views/
)
- 指定您的视图后缀
.jsp
这应该使 intelij 能够解析控制器返回的视图。
我正在尝试使用 Springboot 实现一个 Web 应用程序。但是当我请求方法时,我得到 404 错误。 Springboot 找不到 Jsp 个文件。
这是我的控制器代码:
@PostMapping(value = "/loginSuccess")
public ModelAndView loginSuccess() {
System.out.println("in login success");
return new ModelAndView("index");
}
@GetMapping(value = "/loginError")
public ModelAndView showLoginError() {
System.out.println("in login error");
return new ModelAndView("error");
}
这是我的安全配置:
@ComponentScan
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private EmployeeRepository employeeRepository;
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService(){
return new EmployeeDetailService(employeeRepository, passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.formLogin()
.successForwardUrl("/loginSuccess")
.failureUrl("/loginError")
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/").permitAll()
.and()
.httpBasic();
}
}
我还在application.properties中指定了前缀和后缀:
spring.mvc.view.prefix=/static/
spring.mvc.view.suffix=.jsp
我的 pom 文件中也有这些依赖项:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
这是我的项目结构:
SpringBoot 的主要模板引擎 是 Thymeleaf、Groovy、FreeMarker、Jade。在参考指南中:
JSP should be avoided if possible, there are several known limitations when using them with embedded servlet containers.
An executable jar will not work because of a hard coded file pattern in Tomcat.
如果 JSP 是您无法转换的遗留代码或专有代码,您必须做一些事情才能 develop/maintain、编译和有点 运行 SpringBootApplication 运行在 Intellij 中设置它们:
maven: 你的 pom 必须是 'war' 包。 这将使 intellij 正确地查找和编译 JSP。
web facet:将你的 .jsp 文件放在一个文件夹中,它们应该在 webapp 中:src/main/webapp/WEB-INF/jsp/ jsp 永远不会是静态的 'compiled'/'interpretable'。
spring 方面:在 application.properties
中将前缀设置为 /WEB-INF/jsp/tomcat:有那些依赖项:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
- build 运行nable war:制作一个 运行 : 的 Intellij“maven 配置”
clean install -f pom.xml
- 运行 war:使用这些设置进行 Intellij“jar 配置”:
- jar 路径:<target 文件夹中 war 文件的路径>
- 启动前:运行 您创建的“maven 配置”
我遇到了类似的问题,对我来说指定包含 JSP 文件的 Web 资源目录解决了这个问题。
- 打开项目结构并在模块 -> 网络 -> 网络资源目录下指定包含您的视图的目录(在本例中
webapp
) - 打开
application.properties
- 在您的网络资源目录中指定包含您的视图的文件夹作为前缀(在本例中
/views/
) - 指定您的视图后缀
.jsp
这应该使 intelij 能够解析控制器返回的视图。