【问题标题】:spring boot jsp file can not be viewedspring boot jsp文件无法查看
【发布时间】:2016-02-18 12:18:35
【问题描述】:

我正在使用 Spring Boot 应用程序。我已经为其设置了 MvcConfig 类,并将 tomcat-embed-jasper 和 jstl 依赖项添加到 pom.xml。但是,我无法在“WEB-INF”文件夹中查看我的 jsp 文件,我会收到 404 错误(Whitelabel 错误页面)。我已经设置了 Application.properties。这是我的 application.properties:

#
## View resolver
#
spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp

这是我的 MvcConfig 类:

package com.goodvideotutorials.spring.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("home");
    }

}

这是我的 home.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Up and running with Spring Framework quickly</title>
</head>
<body>
    <h2>Hello, world!</h2>
</body>
</html>

它被插入到 src > main > webapp > WEB-INF > jsp > home.jsp

我已将这些依赖项添加到 pom.xml:

<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> 

这是我的 Application.java 类:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {
       public static void main(String[] args)  {
           ApplicationContext ctx = SpringApplication.run(Application.class, args);
    }
}

和我的控制器类:

@Controller
public class RootController {

//  @RequestMapping("/")
//  public String home() {
//
//  return "home";
//  
//  }

}

无论如何,如果我在控制器中注释代码并且不使用 MvcConfig,它就不起作用。如果我评论该代码并使用 MvcConfig 类,它就不能正常工作。这是网址:localhost:8080

我刚刚测试了很多东西,但它显示的是“Whitelabel Error Page”而不是 JSP。我还在 JEE 环境中安装了 Tomcat 服务器。这会导致问题吗?

【问题讨论】:

    标签: spring jsp spring-boot


    【解决方案1】:

    Spring boot 通过以下方式自动为您提供帮助:

    添加文件src/main/resources/application.properties:

    spring.view.prefix: /WEB-INF/jsp/ 
    spring.view.suffix: .jsp
    

    以及依赖:

    <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jstl</artifactId>
    </dependency>
    

    或者您应该为视图解析器添加配置,例如:

    @Configuration
    @EnableWebMvc
    public class MvcConfiguration extends WebMvcConfigurerAdapter{
        @Bean
        public ViewResolver getViewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/jsp/");
            resolver.setSuffix(".jsp");
            return resolver;
        }
    
        @Override
        public void configureDefaultServletHandling(
                DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }    
    }
    

    更改您的应用程序,如:

    public class Application extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    【讨论】:

    • 我完成了所有这些阶段,我得到了相同的“Whitelabel Error Page”!可能的原因是,我在 JEE 环境中安装了 tomcat 服务器。我很惊讶为什么它不能提供所有这些设置。还有什么想法吗?
    • 确保您的属性文件是 src/main/resources/application.properties,可能区分大小写
    • @mehrnazbayaki 尝试像我更新的那样更改您的应用程序
    • 我可以通过添加这个依赖来解决这个问题,实际上我已经拥有了我需要的所有设置,但是显示 jsp 文件是 Tomcat 的问题
    • org.springframework.bootspring-boot-starter-tomcat提供
    【解决方案2】:

    按照以下步骤进行

    1 - tomcat-embed-jasper 依赖

    <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-jasper</artifactId>
          <scope>provided</scope>
    </dependency>
    

    2 - 添加下面的配置是 application.properties

    spring.mvc.view.prefix: /
    spring.mvc.view.suffix: .jsp
    

    3 - 你想要显示的任何 JSP 页面,以便在控制器中添加以下代码

    @RequestMapping("/")
    public String welcome(Model model) {
        model.addAttribute("message", "Hello World !!!");
        return "welcome";
    }
    

    所以根据上面的代码,它会在 webapps/welcome.jsp 中寻找 welcome.jsp 文件

    那还是有疑问的,看看下面的链接吧

    Spring Boot and JSP Integration

    【讨论】:

      【解决方案3】:

      只是我的 2 美分。

      对我来说,我在服务器日志中收到以下警告:

      WARN  : ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/welcome.jsp]
      

      并显示了白标错误页面,为了修复它,我修改了我的 JSP 位置

      来自

      src/main/webapp/WEB-INF/jsp/welcome.jsp
      

      到

      src/main/webapp/templates/jsp/welcome.jsp
      

      为什么它对我有用?

      Spring 文档明确指出 ResourceHttpRequestHandler 将拒绝任何包含 WEB-INF 或 META-INF 的 URL。

      ResourceHttpRequestHandler doc link

      来自 DOCS:识别无效的资源路径。默认拒绝: 包含“WEB-INF”或“META-INF”的路径

      因此,一旦我用模板替换了 WEB-INF 文件夹名称,它就开始工作了。

      注意: 我还为我的内部视图解析器配置了所需的前缀和后缀。 我正在使用 spring-boot-starter-parent - 2.1.2.RELEASE

      【讨论】:

        【解决方案4】:

        问题是由org.apache.tomcat.embed dependency 的&lt;scope&gt; 引起的。 解决&lt;scope&gt;provided&lt;/scope&gt; 行。所以,依赖看起来像:

            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
        

        作用域provided 仅在编译和测试类路径上可用,在运行时不可用。它不能作为默认范围 compile 传递。

        【讨论】:

          猜你喜欢
          • 2018-02-10
          • 1970-01-01
          • 2017-06-06
          • 2021-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          相关资源
          最近更新 更多