Java 找到Spring Boot 2.1.x JSP文件,但未呈现

Java 找到Spring Boot 2.1.x JSP文件,但未呈现,java,spring,spring-boot,spring-mvc,jsp,Java,Spring,Spring Boot,Spring Mvc,Jsp,我目前正在将一个小规模的应用程序迁移到SpringBoot。我们有遗留代码,我希望通过将登录页挂接到SpringBoot,我能够让web应用程序的JSP/JS文件处理其余的代码 目前,我已经成功地将我们的产品推广到Spring5,并使用SpringBoot 2.1.8 POM代码片段:应用程序正在使用Spring提供的Tomcat默认值,并且已经引入了相关的Jasper/JSTL JAR,以便Tomcat可以读取 <dependency> &l

我目前正在将一个小规模的应用程序迁移到SpringBoot。我们有遗留代码,我希望通过将登录页挂接到SpringBoot,我能够让web应用程序的JSP/JS文件处理其余的代码

目前,我已经成功地将我们的产品推广到Spring5,并使用SpringBoot 2.1.8

POM代码片段:应用程序正在使用Spring提供的Tomcat默认值,并且已经引入了相关的Jasper/JSTL JAR,以便Tomcat可以读取

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
login.jsp:遗留代码,修改为调用控制器。我正在尽最大努力让Spring Security处理调用我的AuthenticationProvider和我的DB的过程(为了简洁起见,我只显示关键区域的内容,页面还是相当简单的)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

<!DOCTYPE html>
<html>
    <head>
        <%@page contentType="text/html" pageEncoding="UTF-8" %>
        <link type="text/css" href="${contextPath}/css/login.css" rel="stylesheet"/>
        <link rel="stylesheet" href="${contextPath}/css/font-awesome/css/font-awesome.min.css">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title></title>
    </head>

    <body class="loginBody">
          .
          .
          <div class="formdiv">
              <form name='f' action='doLogin' method='POST'>
                  <div style="width: 215px; margin: 0 auto; ">
                      <label class="loginLabel">Login</label><br>
                      <input type="text" name="username".../>
                      <label class="loginLabel">Password</label><br>
                      <input type="password" size="25" name="password".../><br>
                      <input type="submit" class="header_btn_class" value="Login" id="loginButton" style="..."/>
                    </div>
              </form>
           </div>
        .
        .
    </body>
</html>
我的application.properties文件中有这些字段

server.port=8888
server.servlet.context-path=/xxx
server.tomcat.additional-tld-skip-patterns=*mchange-commons-java*.jar

spring.mvc.view.prefix=/WEB-INF/view/jsp/
spring.mvc.view.suffix=.jsp
spring.mvc.servlet.load-on-startup=1
所有这些加在一起,使我能够在我请求的URL上登录
localhost:8888/xxx/login
很好,然后登录,观察Spring发现我的设置并很好地登录。问题是当它获取登录页时,它是一个名为
index.JSP
的JSP文件

Oct 09, 2019 2:44:37 PM org.springframework.core.log.LogFormatUtils traceDebug
FINE: GET "/xxx/login", parameters={}
Oct 09, 2019 2:44:37 PM org.springframework.web.servlet.handler.AbstractHandlerMapping getHandler
FINE: Mapped to public java.lang.String com.rhdjapan.xxx.controllers.LoginController.login()
Oct 09, 2019 2:44:37 PM com.xx.xxx.controllers.LoginController login
SEVERE: LoginController: Hit /login, returning login.jsp
Oct 09, 2019 2:44:37 PM org.springframework.web.servlet.view.ContentNegotiatingViewResolver getBestView
FINE: Selected 'text/html' given [text/html,...]
Oct 09, 2019 2:44:37 PM org.springframework.web.servlet.view.AbstractView render
FINE: View name 'login', model {}
Oct 09, 2019 2:44:37 PM org.springframework.web.servlet.view.InternalResourceView renderMergedOutputModel
FINE: Forwarding to [/WEB-INF/view/jsp/login.jsp]
Oct 09, 2019 2:44:38 PM org.springframework.web.servlet.FrameworkServlet logResult
FINE: Completed 200 OK
Oct 09, 2019 2:44:42 PM com.xx.xxx.services.common.security.service.UserDetailsServiceImpl loadUserByUsername
SEVERE: loadUserByUsername: looking up user [admin]
Oct 09, 2019 2:44:42 PM com.xx.xxx.services.common.security.service.UserDetailsServiceImpl loadUserByUsername
SEVERE: loadUserByUsername: userId found = [1111111]
Oct 09, 2019 2:44:42 PM org.springframework.core.log.LogFormatUtils traceDebug
FINE: "FORWARD" dispatch for POST "/xxx/postLogin", parameters={username:[admin], password:[admin]}
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.handler.AbstractHandlerMapping getHandler
FINE: Mapped to public java.lang.String com.xx.xxx.controllers.LoginController.postLogin(org.springframework.ui.Model,javax.servlet.http.HttpSession)
Oct 09, 2019 2:44:42 PM com.xx.xxx.controllers.LoginController postLogin
SEVERE: LoginController: postLogin
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.view.AbstractView render
FINE: View name 'redirect:', model {}
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.FrameworkServlet logResult
FINE: Exiting from "FORWARD" dispatch, status 302
Oct 09, 2019 2:44:42 PM org.springframework.core.log.LogFormatUtils traceDebug
FINE: GET "/xxx/", parameters={}
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.handler.AbstractHandlerMapping getHandler
FINE: Mapped to public java.lang.String com.xx.xxx.controllers.LoginController.index()
Oct 09, 2019 2:44:42 PM com.xx.xxx.controllers.LoginController index
SEVERE: LoginController: Hit /, returning index.jsp
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.view.ContentNegotiatingViewResolver getBestView
FINE: Selected 'text/html' given [text/html, ...]
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.view.AbstractView render
FINE: View name 'index', model {}
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.view.InternalResourceView renderMergedOutputModel
FINE: Forwarding to [/WEB-INF/view/jsp/index.jsp]
Oct 09, 2019 2:44:42 PM org.springframework.web.servlet.FrameworkServlet logResult
FINE: Completed 200 OK

这就是问题所在:当成功找到JSP文件时,页面不会呈现。返回一个空HTML文件,使用web调试器(chrome)只显示15行空白行的源代码。我假设它是我的
index.JSP
文件的长度

我的问题是双重的

  • HTML/JSP不能在我的屏幕上呈现的原因可能是什么
  • 如果有修复程序,对于我需要在SpringBoot下工作的所有其他遗留JSP文件,它们都需要类似的过程吗
  • 谢谢

    更新 为了简洁起见,有人问我制作的战争的结构,当我打开档案时,结构就是这样

    WAR
    |____css
    |____dashboard_view
    |____excel
    |____images
    |____jquery
    |____js
    |____jsp
    |____META-INF
    |____org
    |____third-party
    |____WEB-INF
    |________classes
    |________lib
    |________view
    |____________html
    |____________jsp
    |_________________index.jsp
    |_________________login.jsp
    

    考虑到我提供的登录和索引jsp文件,我想知道在渲染过程中是否有什么东西在无声地失败?

    因为您正在使用外部tomcat进行部署,方法是将
    spring boot starter tomcat
    设置为
    提供的
    作用域

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

    这似乎是一种情况,servlet无法找到某些有问题的文件,因此没有呈现任何内容,因为它找不到任何内容

    我需要进一步验证。但是在移动
    WEB-INF/view/js/home
    per
    index.jsp
    下的
    home.js
    时,我开始从我的网页中获得一些堆栈跟踪

    Exception: org.apache.jasper.JasperException: java.lang.NullPointerException
    
    Stack Trace
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:516) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) 
    org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:580) 
    org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:516) 
    org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequestDispatcher.include(HeaderWriterFilter.java:149) 
    org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:955) 
    org.apache.jsp.WEB_002dINF.view.jsp.index_jsp._jspService(index_jsp.java:150)
    
    还有我在SpringBoot的登录

    SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/xxx] threw exception [java.lang.NullPointerException] with root cause
    java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:434)
        at java.util.Properties.load0(Properties.java:353)
        at java.util.Properties.load(Properties.java:341)
        at com.xx.xxx.common.utils.common.GenericPropertiesUtil.loadProperties(GenericPropertiesUtil.java:16)
        at com.xx.xxx.common.utils.common.EnvPropertiesUtil.getEnvironmentProperties(EnvPropertiesUtil.java:43)
        at com.xx.xxx.common.utils.common.EnvPropertiesUtil.getParameterValue(EnvPropertiesUtil.java:23)
        at com.xx.xxx.common.utils.common.EnvPropertiesUtil.getFlagParameterValue(EnvPropertiesUtil.java:37)
        at com.xx.xxx.common.utils.Config.getFlagValue(Config.java:131)
        at com.xx.xxx.common.utils.Config.isProd(Config.java:59)
        at com.xx.xxx.common.utils.IO.debug(IO.java:514)
    
    
    这似乎表明页面上现在有活动


    如果需要,我会验证并重新打开。我会保留这篇文章,以防其他人有类似问题

    检查;特别是第3部分:“编辑dispatcher-servlet.xml,确保它在视图目录中查找以.jsp结尾的文件。”(但将“视图”更改为“视图”,以匹配您的使用)。谢谢您的回答。但是,application.properties中是否未通过[spring.mvc.view.prefix,spring.mvc.view.sufix]处理此问题字段?谢谢你的回答。不幸的是,我在网站上尝试了以前的答案,不管jasper或jstl上的范围如何,它似乎都不起作用JARs@JosephOrme您能验证创建的war是否正确包含所有jsp文件吗?因为您正在外部tomcat集合中部署jaspe在运行时检查stacktrace以验证传输jsp文件时是否没有生成错误。拉动WAR并在存档查看器中打开它,WAR提供了位于/WEB-INF/lib的tomcat embed jasper,jstl位于WEB-INF下/lib@JosephOrmejsp是否存在在战争中?你能在部署后检查tomcat文件夹吗?在呈现jsp时stacktrace中是否有任何错误?正如预期的那样,.jsp文件位于
    WEB-INF/view/jsp
    下。我正在努力查看是否找不到索引所依赖的其他.js/jsp/html文件之一。没有堆栈跟踪,我认为它失败了我沉默着,抱歉,但我似乎也不能给你贴标签
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    
    Exception: org.apache.jasper.JasperException: java.lang.NullPointerException
    
    Stack Trace
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:516) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) 
    org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:580) 
    org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:516) 
    org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequestDispatcher.include(HeaderWriterFilter.java:149) 
    org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:955) 
    org.apache.jsp.WEB_002dINF.view.jsp.index_jsp._jspService(index_jsp.java:150)
    
    SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/xxx] threw exception [java.lang.NullPointerException] with root cause
    java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:434)
        at java.util.Properties.load0(Properties.java:353)
        at java.util.Properties.load(Properties.java:341)
        at com.xx.xxx.common.utils.common.GenericPropertiesUtil.loadProperties(GenericPropertiesUtil.java:16)
        at com.xx.xxx.common.utils.common.EnvPropertiesUtil.getEnvironmentProperties(EnvPropertiesUtil.java:43)
        at com.xx.xxx.common.utils.common.EnvPropertiesUtil.getParameterValue(EnvPropertiesUtil.java:23)
        at com.xx.xxx.common.utils.common.EnvPropertiesUtil.getFlagParameterValue(EnvPropertiesUtil.java:37)
        at com.xx.xxx.common.utils.Config.getFlagValue(Config.java:131)
        at com.xx.xxx.common.utils.Config.isProd(Config.java:59)
        at com.xx.xxx.common.utils.IO.debug(IO.java:514)