2016-08-24 42 views
-1

我试图创建简单的Web应用程序,并在我在localhost中输入应用程序时收到错误500。调度程序servlet中的空指针异常

20:14:32 ERROR Servlet.service() for servlet [dispatcher] in context with path [/tasker] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 
    java.lang.NullPointerException: null 
     at controller.TaskController.showMain(TaskController.java:24) ~[main/:na] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_92] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_92] 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180) ~[spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) ~[tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_92] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_92] 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.33.jar:8.0.33] 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92] 

这是我的服务类

package service; 
import dao.TaskDao; 
import entity.Task; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 


@Service 
public class TaskServiceImpl implements TaskService { 

    private TaskDao taskDao; 

    @Autowired 
    public void setTaskDao(TaskDao taskDao) { 
     this.taskDao = taskDao; 
    } 

    @Override 
    @Transactional 
    public boolean addTask(Task task) { 
     taskDao.addTask(task); 
     return true; 
    } 
} 

我的控制器

package controller; 

import entity.Priority; 
import entity.Task; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import service.TaskService; 

@Controller 
public class TaskController { 
    @Autowired 
    private TaskService taskService; 



    @RequestMapping("/") 
    public String showMain(Model model) { 
     Task task = new Task(); 
     task.setName("shnaps"); 
     task.setDescription("Hi im shnaps"); 
     task.setPriority(Priority.LOW); 
     taskService.addTask(task); 
     model.addAttribute(task); 
     return "index"; 
    } 
} 

这是我的DAO实现

package dao; 
import entity.Task; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 

@Repository 
public class TaskDaoImpl implements TaskDao { 

    @Autowired 
    private SessionFactory sessionFactory; 

    @Override 
    public boolean addTask(Task task) { 
     Session session = sessionFactory.getCurrentSession(); 
     session.save(task); 
     return true; 
    } 
} 

调度员的servlet

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" xmlns="http://www.springframework.org/schema/beans" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 


    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 
    <context:component-scan base-package="controller"/> 

</beans> 

的applicationContext

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns="http://www.springframework.org/schema/beans" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <import resource="hibernateContext.xml"/> 

    <mvc:annotation-driven/> 

    <context:component-scan base-package="service"/> 
    <context:component-scan base-package="dao"/> 

</beans> 

而且index.jsp中被放下我的IM/WEB-INF/jsp目录

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <title>$Title$</title> 
</head> 
<body> 
Hello, ${task.name} lol 
</body> 
</html> 

,并链接到我的github上的个人资料。也许在那里看这个错误会更容易些。 Click here

+1

没有我的朋友。这是我的原因中另一种类型的NullPointerException错误。而且idk如何修复它 –

+1

''mvc:annotation-driven />'应该在你的'dispatcher-servlet'配置中。 –

+0

@Sotirios仍然无法正常工作。我得到这个错误> org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'taskController'的bean时出错:通过字段'taskService'表示的不满意的依赖:没有发现依赖关系[tasker.service.TaskService]类型的合格bean .service.TaskService]: –

回答

0

问题的精简版本不再有NullPointerException。 Sotirios Delimanolis的回答是正确的答案,并且这很合乎逻辑,因为Spring MVC bean应该属于调度程序servlet所附带的特定上下文。

所以我去了你的GitHub库,并在你的web.xml,我看到这一点:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value></param-value> 
</context-param> 

这实际上阻止了ContextLoaderListener从加载默认applicationContext.xml文件。因此,您的应用程序最终没有服务,也没有DAO,并且在TaskController中有NullPointerException。您必须从web.xml中删除context-param,并将<mvc:annotation-driven />applicationContext.xml移至dispatcher-servlet.xml以解决该问题。

+0

Thx寻求帮助!更新了我的所有代码。但是仍然有相同的错误通过字段'taskService'表示的不满意的依赖性:找不到依赖性[tasker.service.TaskService]的[tasker.service.TaskService]类型的限定bean。你能告诉我问题在哪里吗? :( –

-1

您需要调试public String showMain(Model model)设置在第一行一个破发点,并检查taskServicenull,如果是这样的话,那么你应该检查你的Spring配置,你得到的自动装配吧?

+0

为什么这会被投票? – alibttb

+0

谁知道。我没有投票给这个答案。 –

+0

这对新来者:( – alibttb