简体   繁体   English

Spring MVC示例上的NullPointerException

[英]NullPointerException on Spring MVC Example

I'm trying to execute an example of MVC application using Spring Framework. 我正在尝试使用Spring Framework执行MVC应用程序的示例。
Note that I want to use only Java (no XML). 请注意,我只想使用Java(不使用XML)。
Note also that I simplified the example, so the view resolver is useless. 还要注意,我简化了示例,因此视图解析器没有用。

This is the project's structure: 这是项目的结构:

This is the POM.xml file: 这是POM.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>it.unipi.ing.ciampi</groupId>
  <artifactId>TestMVCSpring</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>TestMVCSpring Maven Webapp</name>
  <url>http://maven.apache.org</url>


  <dependencies>

    <!-- SERVLETS + JSP + JSTL -->
    <!-- Dependencies for Servlets  -->
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!-- Dependencies for Jstl -->
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- Dependencies for Servlet-Jsp api -->
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
    </dependency>
    <!-- END SERVLETS + JSP + JSTL -->

    <!-- SPRING FRAMEWORK -->
    <!-- Dependencies for Spring Core -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.3.RELEASE</version>
    </dependency>
    <!-- Dependencies for Spring Web MVC -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.3.RELEASE</version>
    </dependency>
    <!-- END SPRING FRAMEWORK -->

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

  </dependencies>


  <build>
    <plugins>
      <!-- Configuration of the maven-compiler-plugins to use Java 1.8 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <verbose>true</verbose>
          <source>1.8</source>
          <target>1.8</target>
          <showWarnings>true</showWarnings>
        </configuration>
      </plugin>
      <!-- Definition of the tomcat7-maven-plugin -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <path>/</path>
          <contextReloadable>true</contextReloadable>
        </configuration>
      </plugin>
    </plugins>
    <finalName>TestMVCSpring</finalName>
  </build>


  <properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </properties>

</project>

These are the implemented classes: 这些是已实现的类:

WebConfig Web配置

    package it.unipi.ing.ciampi.testmvcspring.configuration;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;

    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "it.unipi.ing.ciampi.testmvcspring")
    public class WebConfig extends WebMvcConfigurerAdapter {

        /*
         * Definition of a view resolver
         */
        @Bean
        public ViewResolver viewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/views/");
            resolver.setSuffix(".jsp");

            return resolver;
        }
    }


WebAppInitializer WebAppInitializer

package it.unipi.ing.ciampi.testmvcspring.configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;



public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class };
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}


TestController 测试控制器

package it.unipi.ing.ciampi.testmvcspring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;



@Controller
@RequestMapping("/")
public class TestControler {
    @RequestMapping(method=RequestMethod.GET)
    @ResponseBody
    public String home() {
        return "test";
    }
}



Then I use mvn clean install command, finally mvn tomcat7:run command. 然后,我使用mvn clean install命令,最后使用mvn tomcat7:run命令。
But when I try to visit my localhost:8080 address, I have this error: 但是,当我尝试访问我的localhost:8080地址时,出现此错误:

GRAVE: Servlet.service() for servlet [jsp] in context with path [] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at org.apache.jsp.index_jsp._jspInit(index_jsp.java:31)
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

ott 12, 2016 11:00:32 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [jsp] in context with path [] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at org.apache.jsp.index_jsp._jspInit(index_jsp.java:31)
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

ott 12, 2016 11:00:32 AM org.springframework.web.servlet.PageNotFound noHandlerFound



UPDATE 更新
It seems that the problem was the pattern where the dispatcher was listening to. 似乎问题在于调度程序正在侦听的模式。 By the way, I am confused about that. 顺便说一句,我对此感到困惑。

I initially created a Maven Project, so the WEB-INF folder was in src->main->webapp->WEB-INF. 我最初创建了一个Maven项目,因此WEB-INF文件夹位于src-> main-> webapp-> WEB-INF中。
Then I've updated the Project Facets changing the version of the Web Dynamic Module to 3.0 . 然后,我更新了Project Facets,将Web动态模块的版本更改为3.0。 Eclipse has added a new folder, Web Content, under which there was another WEB-INF folder. Eclipse添加了一个新文件夹Web Content,该文件夹下还有另一个WEB-INF文件夹。
I delete the webapp folder and now, at the address localhost:8080/ , my dispatcher is active. 我删除了webapp文件夹,现在位于地址localhost:8080 /的调度程序处于活动状态。

Is it the correct solution? 这是正确的解决方案吗? Where can I set the path where the dispatcher will be listening to? 我在哪里可以设置调度员将要收听的路径?

You don't provide jsp page so that i not sure to get your issue completely. 您没有提供jsp页面,因此我不确定是否完全解决您的问题。 But it seems you are wrong when you use JRE System Library with JavaSE-1.8. 但是,当您将JRE系统库与JavaSE-1.8一起使用时,您似乎错了。 You should change it to JDK 1.8 then compile the porject again. 您应该将其更改为JDK 1.8,然后再次编译该项目。

I found it in the post Creating Spring MVC Project in Eclipse Using Maven 在使用Maven在Eclipse中创建Spring MVC项目一文中找到了它

Hope this help! 希望对您有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM