无法查看spring Boot jsp文件

bvjveswy  于 2023-03-21  发布在  Spring
关注(0)|答案(5)|浏览(162)

我正在使用Sping Boot 应用程序。我已经为它设置了MvcConfig类,并将tomcat-embed-碧玉和jstl依赖项添加到pom.xml。但是,我无法查看“WEB-INF”文件夹中的jsp文件,我将收到404错误(白标签错误页)。我已经设置了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");
    }

}

这里是我的家。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类,它也不起作用。本地主机:8080
我刚刚测试了很多东西,但是它显示“白标签错误页面”而不是JSP。我也有Tomcat服务器安装在JEE环境中。这会导致问题吗?

b09cbbtk

b09cbbtk1#

只是我的两分钱。
对于我来说,我在服务器日志中收到了以下警告:

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-INFMETA-INF的URL。
ResourceHttpRequestHandler doc link
来自DOCS:标识无效的资源路径。默认情况下拒绝:包含“WEB-INF”或“META-INF”的路径
因此,只要我用模板替换了WEB-INF文件夹名,它就开始工作了。

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

2ic8powd

2ic8powd2#

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);
    }
}
n3ipq98p

n3ipq98p3#

遵循以下步骤
1 -tomcat-嵌入-碧玉依赖关系

<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

cig3rfwq

cig3rfwq4#

这个问题是由org.apache.tomcat.embed dependency<scope>引起的。要解决<scope>provided</scope>行,依赖关系如下所示:

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

作用域provided只在编译和测试类路径上可用,在运行时不可用。它不像默认作用域compile那样可传递。

hfyxw5xn

hfyxw5xn5#

这绝对是jsp的愚蠢情况。是的,它会在WEB-INF中被拒绝,除非你部署war文件。是的,所有的java大师都会告诉你,出于安全原因,把你的jsp放在WEB-INF下。我的观点是,它绝对是Spring Boot 和 Spring mvc的混乱

相关问题