为啥 Jsp 文件不与 Spring Boot 中的控制器返回视图映射

Posted

技术标签:

【中文标题】为啥 Jsp 文件不与 Spring Boot 中的控制器返回视图映射【英文标题】:Why Jsp files not mapping with the Controller return view in Spring Boot为什么 Jsp 文件不与 Spring Boot 中的控制器返回视图映射 【发布时间】:2018-10-20 16:39:38 【问题描述】:

我正在开发一个 Spring Boot 项目。我只是创建这个控制器来返回登录视图。

@Controller
public class loginController 
    @RequestMapping("/login")
    public String login()
        return "login";
    

login.jsp 文件位于 **src/main/webapp/WEB-INF/jsp/login.jsp **

我在应用程序属性文件中设置前缀和后缀是这样的。

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
logging.level.org.springframework.web=DEBUG

就像我这样设置依赖项一样。

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>



    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

我的项目结构是这样的。

如果我运行程序并点击 localhost:8080/login 我得到以下白标错误。谁能告诉我为什么会发生这种情况以及解决方案

白标错误页面

此应用程序没有显式映射 /error,因此您将其视为后备。

【问题讨论】:

您使用的是哪个 Spring Boot 版本? @ShafinMahmud um 使用 2.0.6.RELEASE。 @RaminduNanayakkara 给你的项目结构截图 @AvijitBarua 我上传它请检查。 @RaminduNanayakkara 你的主要课程在哪里? 【参考方案1】:

将您的main 课程放在com.example 下! 和 尝试替换

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

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

而且这个也是需要的

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

你的项目结构应该像https://i.stack.imgur.com/UaK8l.png

【讨论】:

请告诉你项目结构@RaminduNanayakkara 主类在 com.example.demo 包中。我的 LogingController 在 com.example.controller 包中......所以? @RaminduNanayakkara 将main 类放在com.example 下而不是其他包中。将主文件拖到 com.example 中。希望它会工作 @RaminduNanayakkara 您遇到错误是因为您的主类无法扫描您的控制器类!所以主类应该在主包下【参考方案2】:

需要添加如下maven依赖:

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

Jsp 需要依赖 javax.servelt 来处理请求。

更新:

默认情况下不处理您的 jsp 目录位置。请将其移至:

src/main/resources/META-INF/resources/WEB-INF/jsp

更新: 确保您的 SpringBootApplication 正在扫描控制器。您必须在日志中看到类似的内容:

s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "[/login],methods=[GET]"

请在您的 SpringBootApplication 上添加注解 @ComponentScan("com.example.controller") 以扫描您的控制器或移动公共包中的 SpringBootApplication com.example

【讨论】:

@Adina 这是视图解析器问题。这与jstl无关。 @Adina.. 你知道如何解决这个问题吗? @ShafinMahmud 没有 servlet 依赖项,tomcat 不会处理您的请求,您将看到状态为 404 的 Whitelabel 错误页面未找到。 @RaminduNanayakkara 能否请您从 tomcat-embed-jasper 中删除 provided,重新导入 maven 项目并重试? @Adina 还是一样。我不知道为什么会这样。

以上是关于为啥 Jsp 文件不与 Spring Boot 中的控制器返回视图映射的主要内容,如果未能解决你的问题,请参考以下文章

spring boot不加载jsp文件

我应该将jsp文件放在spring-boot项目中的位置

spring boot学习02如何在spring boot项目中访问jsp

JSP 文件未在 Spring Boot Web 应用程序中呈现

spring boot怎么创建jsp页面

spring boot jsp文件无法查看