Intellij运行配置Spring Boot与Maven问题

Omr*_*Hoo 6 java jsp intellij-idea maven spring-boot

我正在尝试使用Intellij IDEA运行我的Spring Boot项目.这个项目是Spring MVC类型,意味着它在路径中有JSP文件main/webapp/WEB-INF/jsp.

application.properties有这些设置:

spring.view.prefix=/WEB-INF/jsp/
spring.view.suffix=.jsp
Run Code Online (Sandbox Code Playgroud)

当我在Intellij中运行项目作为"Spring Boot Run Configuration"时,服务器无法识别JSP文件的路径.这是我得到的消息:

在此输入图像描述 ž

如果我使用命令"Maven Run Configuration"运行项目,spring-boot:run一切正常.

我不知道为什么会这样.每个运行配置的项目代码和设置都相同.

您可以尝试这个项目(而不是我的项目)来理解我的意思https://github.com/mariuszs/spring-boot-web-jsp-example.

我的项目也是如此.我应该注意,当项目使用Spring Boot Run Configuration运行时,我确实在控制台中看到控制器已正确映射.

2017-06-28 08:29:13.906  INFO 10308 --- [           main] o.s.w.s.h.SimpleUrlHandlerMapping        : Mapped URL path [/login] onto handler of type [class org.springframework.web.servlet.mvc.ParameterizableViewController]

2017-06-28 08:29:13.835  INFO 10308 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/login],methods=[GET]}" onto public java.lang.String com.intuit.mintbills.controllers.generic.LoginController.getLoginPage()
Run Code Online (Sandbox Code Playgroud)

Muz*_*mil 6

I solved this problem by setting the working directory to $MODULE_DIR$ in the run configuration.


g00*_*00b 5

这是IntelliJ和Spring启动的问题.你应该检查以下事项:

Web方面

确保已启用Web构面.示例项目没有web.xml文件,因此,IntelliJ没有提取src/main/webapp.您可以向项目添加虚拟web.xml文件src/main/webapp/WEB-INF并重新导入项目,也可以手动添加Web构面并进行正确配置.如果正确配置了Web构面,则应在webapp文件夹中看到蓝色圆圈.

虚拟web.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>
Run Code Online (Sandbox Code Playgroud)

这是src/main/webapp文件夹中的"蓝点" :

项目结构

提供依赖项

IntelliJ的另一个问题是提供的依赖项未正确获取.您通常可以通过打开" 模块"并选择" 依赖关系"选项卡来打开" 项目结构..."来解决此问题.在这里,你可以重写你的依赖的范围,所以你的情况我建议同时配置和对编译.tomcat-embed-jasperecj

依赖配置

我最近没有这样做,但每次改变你的时候都可能会被覆盖pom.xml.在这种情况下,我建议覆盖<scope>pom.xml:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您计划在Web容器(例如外部Tomcat)上部署应用程序,则可能需要使用配置文件,否则这可能会导致冲突,因为这些依赖项是由Web容器提供的.

JSP限制

还建议将打包更改为WAR,因为使用带有JAR文件的JSP有一些已知的限制.引用文档:

运行使用嵌入式servlet容器的Spring Boot应用程序(并打包为可执行存档)时,JSP支持存在一些限制.

  • 使用Tomcat它应该可以使用war包装,即可执行的war会起作用,并且也可以部署到标准容器(不限于但包括Tomcat).由于Tomcat中的硬编码文件模式,可执行jar将无法工作.
  • 使用Jetty它应该可以使用war包装,即可执行的war会起作用,并且也可以部署到任何标准容器.
  • Undertow不支持JSP.
  • 创建自定义error.jsp页面不会覆盖错误处理的默认视图,而应使用自定义错误页面.