2016-10-12 2 views
0

Я пытаюсь выполнить пример приложения MVC с использованием Spring Framework.
Обратите внимание, что я хочу использовать только Java (без XML).
Обратите также внимание на то, что я упростил пример, так что искатель вида бесполезен.

Это структура проекта:NullPointerException on Spring MVC Пример

Это 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> 

Эти реализованные классы:

WebConfig

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

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"; 
    } 
} 



Затем я использую MVN чистую установку команды, наконец, МВН tomcat7: команда запуска.
Но когда я пытаюсь посетить мой 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
Похоже, что проблема была картина, когда диспетчер слушает. Кстати, я смущен этим.

Первоначально я создал проект Maven, поэтому папка WEB-INF была в src-> main-> webapp-> WEB-INF.
Затем я обновил факс проекта, изменив версию веб-динамического модуля на 3.0. Eclipse добавила новую папку, Web Content, под которой была другая папка WEB-INF.
Я удаляю папку webapp и теперь, по адресу localhost: 8080 /, мой диспетчер активен.

Это правильное решение? Где я могу установить путь, куда будет слушаться диспетчер?

+0

Я запускаю ваш код, и он отлично работает. Но я не использую maven, следовательно, возможно, проблема в библиотеке, которую вы включаете в свой pom. Вы пытались удалить первые три импорта? Они не нужны. – amicoderozer

+0

Первая зависимость необходима .... поэтому ошибка уже здесь ... – PenguinEngineer

+0

Не могли бы вы рассказать мне, как вы выполнили код, пожалуйста? – PenguinEngineer

ответ

0

Вы не предоставляете страницу jsp, чтобы я не мог полностью решить вашу проблему. Но, похоже, вы ошибаетесь, когда используете JRE System Library с JavaSE-1.8. Вы должны изменить его на JDK 1.8, затем снова скомпилируйте этот файл.

Я нашел его в должности Creating Spring MVC Project in Eclipse Using Maven

Надежда эта помощь!

+0

Я использую аннотацию @ResponseBody, поэтому page.jsp бесполезен. Я также пытаюсь прокомментировать viewResolver, но у меня такая же ошибка – PenguinEngineer

+0

Я думаю, что проблема не связана с Java, она успешно компилируется – PenguinEngineer

Смежные вопросы