首页 文章

如何使用Spring MVC框架为Spring Boot应用程序加载jsp页面?我得到空指针异常

提问于
浏览
0

当我的代码试图查找并加载jsp页面时,我总是得到一个空指针异常 . 这是一个Spring Boot应用程序,我正在尝试使用最新的Spring MVC框架 . 请注意,我在jar中部署应用程序而不是war文件 . 所以我的项目中没有WEB-APP文件夹或web.xml等 .
我在src / main / resources下有文件夹"templates",其中放置了ViewName.jsp页面 .
这是从我的Controller java文件中引用的代码片段:

@RequestMapping(value = "/x")
public String launch(@RequestParam("inputFile") String inputFile, @RequestParam("instance") int instance) {

    try {
        launcher.launch(inputFile, instance);
        LOGGER.info("launch completed, trying to set and load the view now");

    } catch (Exception ex) {
        LOGGER.error("Failed to launch job successfully.", ex);
    }

    ModelAndView mav = new ModelAndView();

    Map<String, String> parameters = new HashMap<>();

    parameters.put("inputFile", inputFile);
    parameters.put("instance", Integer.toString(instance));
    mav.addObject("parameters", parameters);

    LOGGER.info("Before setting mav.setViewname");

    mav.setViewName("ViewName");

    LOGGER.info("After setting mav.setViewname, that means setViewName is good"); //this gets printed in the log

    return "ViewName.jsp";


}

下面是抛出的空指针异常:

错误:org.springframework.boot.web.support.ErrorPageFilter - 由于异常[null]转发到请求[/ x]的错误页面java.lang.NullPointerException:null at weblogic.servlet.internal.ServletResponseImpl.sendContentError(ServletResponseImpl .java:713)〜[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:761)〜[weblogic.server.merged.jar:12.1 . 3.0.0] at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:693)〜[weblogic.server.merged.jar:12.1.3.0.0] at org.springframework.boot.web.support.ErrorPageFilter $ weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:321)〜[weblogic]中的ErrorWrapperResponse.flushBuffer(ErrorPageFilter.java:315)〜[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] .server.merged.jar:12.1.3.0.0] at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)~ [spring-webmvc-4.3.13.RE LEASE.jar:4.3.13.RELEASE]在org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE ] org.springframework.web.serv.Dispatcher服务中的org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] .processDispatchResult(DispatcherServlet.java:1041)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)〜[在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)〜[spring-webmvc-4.3.13.RELEASE.jar]中的spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] :4.3.13.RELEASE] org.springframework上的org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)~ [spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] .web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)〜[spring-webmvc-4.3.13.RELEASE .jar:4.3.13.RELEASE]在org.springframework.web.servlet的javax.servlet.http.HttpServlet.service(HttpServlet.java:731)〜[weblogic.server.merged.jar:12.1.3.0.0] .FrameworkServlet.service(FrameworkServlet.java:846)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]在javax.servlet.http.HttpServlet.service(HttpServlet.java:844)~ [ weblogic.server.merged.jar:12.1.3.0.0]在weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:280)〜[weblogic.server.merged.jar:12.1.3.0.0] at at weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:254)〜[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136 )〜[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)〜[weblogic.server.merged.jar:12.1.3.0.0]在weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)〜[weblogic.server.merged .jar:12.1.3.0.0]在org.springframework.boot.web的weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)〜[weblogic.server.merged.jar:12.1.3.0.0] .support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115)[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] atg.springframework.boot.web.support.ErrorPageFilter.access $ 000(ErrorPageFilter . java:59)[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] org.springframework.boot.web.support.ErrorPageFilter $ 1.doFilterInternal(ErrorPageFilter.java:90)[spring-boot- 1.5.9.RELEASE.jar:1.5.9.RELEASE]在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13 . 发布在org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108)[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] atweblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)[weblogic.server.merged.jar:12.1.3.0.0] at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java: 106)[spring-boot-actuator-1.5.9.RELEASE.jar:1.5.9.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13 .RELEASE.jar:4.3.13.RELEASE]在org.springframework.web的weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)[weblogic.server.merged.jar:12.1.3.0.0] . filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)[weblogic.server.merged.jar:12.1.3.0.0 ]在org.springframework.web.filter.HiddenHttpMe thodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring -web-4.3.13.RELEASE.jar:4.3.13.RELEASE]在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)[weblogic.server.merged.jar:12.1.3.0.0] at at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)[weblogic.server.merged.jar :org.springframework上的org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]中的:12.1.3.0.0] . web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)[weblogic.server.merged.jar :org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)中的:12.1.3.0.0] [spring-boot-actuator-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl . java:79)[weblogic.server.merged.jar:12.1.3.0.0] at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)[spring-boot-1.5.9.RELEASE .jar:1.5.9.RELEASE]在weblogic的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] . servlet.internal.FilterChainImpl.doFilter(过滤接rChainImpl.java:79)[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.wrapRun(WebAppServletContext.java:3451)[weblogic.server.merged.jar:12.1 .3.0.0]在weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3417)[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.security.acl.internal.AuthenticatedSubject . doAs(AuthenticatedSubject.java:321)[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)[com.oracle.css.weblogic.security .wls_7.1.0.0.jar:CSS 7.1 0.0]在weblogic.servlet上的weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)[weblogic.server.merged.jar:12.1.3.0.0] . 在weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2196)[weblogic.ser]中的internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2280)[weblogic.server.merged.jar:12.1.3.0.0 ver.merged.jar:12.1.3.0.0] at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.servlet.internal .ServletRequestImpl.run(ServletRequestImpl.java:1632)[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.servlet.provider.ContainerSupportProviderImpl $ WlsRequestExecutor.run(ContainerSupportProviderImpl.java:256)[weblogic.server . merged.jar:12.1.3.0.0] atweblogic.work.ExecuteThread.execute(ExecuteThread.java:311)[weblogic.server.merged.jar:12.1.3.0.0] at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)[weblogic.server.merged的.jar:12.1.3.0.0]

2 回答

  • 1

    默认情况下,spring boot不支持classpath中的任何jsp文件 . 有两种解决方案,1 . 您可以将Thymeleaf模板放在classpath中 . Spring启动会自动配置它 . 2.如果要加载JSP模板,则应将jsp文件放在src / main / webapp下 . InternalResourceViewResolver将对其进行配置 .

  • 1

    默认情况下,spring boot不支持JSP,因此您需要添加如下所示的支持 .

    在你的 pom.xml 中添加tomcat jasper依赖项

    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jasper</artifactId>
        <version>8.5.31</version>
    </dependency>
    

    **这里 version 应该与你的 Spring 季启动内部tomcat使用相同(对我而言是8.5.31)

    通过添加此依赖关系,spring boot将了解如何将jsp转换为servlet .

    jsp页面应该在webapp目录中 . 我正在附加一个图像供您参考有关目录结构和视频链接的逐步配置 .

    https://www.youtube.com/watch?v=nLbvzF1-vXY

    Project Directory Structure

相关问题