Java + Spring:SEVERE Servletservice
我不知道我在控制器map.put("contactList", contactService.listContact());
什么问题map.put("contactList", contactService.listContact());
有人能帮助我吗?
严重:Servlet [dispatcher]的Servlet.service()在上下文中与路径[/ test]引发exception[请求处理失败; 嵌套exception是java.lang.NullPointerException],根据原因java.lang.NullPointerException位于太阳的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的pl.ivmx.contact.controller.ContactController.listContacts(ContactController.java:26)位于org.springframework的java.lang.reflect.Method.invoke(Method.java:601)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中的.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)。 web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)位于org.springframework.web.servlet的org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)。位于org.springframework.web.servlet.Dispatc的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)的mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) herServlet.doService(DispatcherServlet.java:852)位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)的org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)位于javax .servlet.http.HttpServlet.service(HttpServlet.java:621),位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:30)的javax.servlet.http.HttpServlet.service(HttpServlet.java:722) )org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)org.apache.catalina.core.StandardContextValve。在Org.apache上的org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)中调用(StandardContextValve.java:123) org.apache.catalina.va上的.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) lves.AccessLogValve.invoke(AccessLogValve.java:927)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:585)org.apache.tomcat.util.net.JIoEndpoint java的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)中的$ SocketProcessor.run(JIoEndpoint.java:312),java的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)。 lang.Thread.run(Thread.java:722)
package pl.ivmx.contact.controller; import java.util.Map; import pl.ivmx.contact.dao.ContactDAO; import pl.ivmx.contact.form.Contact; import pl.ivmx.contact.service.ContactService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class ContactController { @Autowired private ContactService contactService; @RequestMapping("/contact") public String listContacts(Map map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); return "/contact"; } @RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/contact"; } @RequestMapping("/delete/{contactId}") public String deleteContact(@PathVariable("contactId") Integer contactId) { contactService.removeContact(contactId); return "redirect:/contact"; } }
package pl.ivmx.contact.dao; import java.util.List; import pl.ivmx.contact.form.Contact; public interface ContactDAO { public void addContact(Contact contact); public List listContact(); public void removeContact(Integer id); }
包pl.ivmx.contact.dao;
import java.util.List; import pl.ivmx.contact.form.Contact; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class ContactDAOImpl implements ContactDAO { @Autowired private SessionFactory sessionFactory; public void addContact(Contact contact) { sessionFactory.getCurrentSession().save(contact); } public List listContact() { return sessionFactory.getCurrentSession().createQuery("from Contact").list(); } public void removeContact(Integer id) { Contact contact = (Contact) sessionFactory.getCurrentSession().load( Contact.class, id); if (null != contact) { sessionFactory.getCurrentSession().delete(contact); } } }
包pl.ivmx.contact.service;
import java.util.List; import pl.ivmx.contact.form.Contact; public interface ContactService { public void addContact(Contact contact); public List listContact(); public void removeContact(Integer id); }
包pl.ivmx.contact.service;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import pl.ivmx.contact.dao.ContactDAO; import pl.ivmx.contact.form.Contact; @Service public class ContactServiceImpl implements ContactService { @Autowired private ContactDAO contactDAO; @Transactional public void addContact(Contact contact) { contactDAO.addContact(contact); } @Transactional public List listContact() { return contactDAO.listContact(); } @Transactional public void removeContact(Integer id) { contactDAO.removeContact(id); } }
包pl.ivmx.contact.form;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="CONTACTS") public class Contact { @Id @Column(name="ID") @GeneratedValue private Integer id; @Column(name="FIRSTNAME") private String firstname; @Column(name="LASTNAME") private String lastname; @Column(name="EMAIL") private String email; @Column(name="TELEPHONE") private String telephone; public String getEmail() { return email; } public String getTelephone() { return telephone; } public void setEmail(String email) { this.email = email; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getFirstname() { return firstname; } public String getLastname() { return lastname; } public void setFirstname(String firstname) { this.firstname = firstname; } public void setLastname(String lastname) { this.lastname = lastname; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } }
contextConfigLocation WEB-INF/applicationContext.xml org.springframework.web.context.ContextLoaderListener dispatcher org.springframework.web.servlet.DispatcherServlet 1 dispatcher *.do dispatcher *.html /pages/index.jsp
applicationContext.xml中
<!-- --> <!-- --> org.hibernate.cfg.AnnotationConfiguration <!-- org.hibernate.dialect.MySQLDialect true pl.ivmx.model.UserTest -->
调度员servlet.xml中
<!-- --> /WEB-INF/pages/ .jsp userTest pl.ivmx.model.UserTest registration registrationsuccess
它看起来像这里的方法抛出的NullPointerException:
@RequestMapping("/contact") public String listContacts(Map map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); return "/contact"; }
我会调试并检查contactService是否已正确自动assembly。
空指针是第26行,如果这是包含contactService.listContact()
的行,则contactService为null。 如果是上面的行,那么map
为空。
我不确定但是尝试添加:
对于dispatcher-servlet.xml,也可能是注释没有得到处理
你在方法中返回"/contact"
作为要显示的视图:
@RequestMapping("/contact") public String listContacts(Map map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); return "/contact"; // <---- here! }
这意味着您应该在某处定义名为/ contact的视图,但我没有看到它。 您需要具有与您定义的值相对应的视图。
您可能希望返回"contact"
而不是"/contact"
,然后在webapp / WEB-INF / views文件夹中使用contact.jsp(假设您使用maven标准目录布局)。
我没有看到任何明显的东西…… sessionFactory可以为null吗? 应该很容易找到。 逐步调试调试器中的代码。
我认为您缺少将contactService bean添加到applicationContext.xml尝试将以下内容添加到标记中
- Java:FloatBuffer到OpenGL – wrap()与allocate()对比BufferUtils.createBuffer()
- JTextPane突出显示问题
- 如何处理从模态窗口上传文件Selenium WebDriver Java
- 在迭代列表时删除列表元素是否存在Java中公认的最佳实践?
- 使用Apache CXF的Web服务响应显示“无绑定操作信息…”
- 旋转BufferedImage时如何产生清晰的绘画效果?
- spring batch:没有ItemWriter的Tasklet
- 如何在多个浏览器中运行Selenium测试,以便使用Java进行跨浏览器测试?
- Java拆分function:这是预期的行为吗?