为啥 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 中删除 以上是关于为啥 Jsp 文件不与 Spring Boot 中的控制器返回视图映射的主要内容,如果未能解决你的问题,请参考以下文章
spring boot学习02如何在spring boot项目中访问jsp