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 中设置它们:

  1. maven: 你的 pom 必须是 'war' 包。 这将使 intellij 正确地查找和编译 JSP。

  2. web facet:将你的 .jsp 文件放在一个文件夹中,它们应该在 webapp 中:src/main/webapp/WEB-INF/jsp/ jsp 永远不会是静态的 'compiled'/'interpretable'。

  3. spring 方面:在 application.properties

    中将前缀设置为 /WEB-INF/jsp/
  4. 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>
  1. build 运行nable war:制作一个 运行 :
  2. 的 Intellij“maven 配置”

clean install -f pom.xml

  1. 运行 war:使用这些设置进行 Intellij“jar 配置”:
  • jar 路径:<target 文件夹中 war 文件的路径>
  • 启动前:运行 您创建的“maven 配置”

我遇到了类似的问题,对我来说指定包含 JSP 文件的 Web 资源目录解决了这个问题。

  1. 打开项目结构并在模块 -> 网络 -> 网络资源目录下指定包含您的视图的目录(在本例中 webapp
  2. 打开application.properties
  3. 在您的网络资源目录中指定包含您的视图的文件夹作为前缀(在本例中 /views/
  4. 指定您的视图后缀.jsp

这应该使 intelij 能够解析控制器返回的视图。