Java Spring MVC“请求处理失败”500错误
我是春天的新手,试图通过教程学习。我有个问题。我将基于xml的配置转换为基于注释的配置。这是教程 我收到HTTP 500错误。这是完整的堆栈跟踪Java Spring MVC“请求处理失败”500错误,java,spring,hibernate,spring-mvc,annotations,Java,Spring,Hibernate,Spring Mvc,Annotations,我是春天的新手,试图通过教程学习。我有个问题。我将基于xml的配置转换为基于注释的配置。这是教程 我收到HTTP 500错误。这是完整的堆栈跟踪 SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with r
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
root cause
java.lang.NullPointerException com.ulotrix.spring.service.PersonServiceImpl.listPersons(PersonServiceImpl.java:35)
com.ulotrix.spring.controller.PersonController.listPersons(PersonController.java:28)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
项目结构
AppConfig.java
PersonService.java
PersonDAO.java
我想您错过了private PersonDAO PersonDAO;之前的@Autowired注释;。因此,这一行中的值为null,返回this.personDAO.listPersons 我想你错过了private PersonDAO PersonDAO;之前的@Autowired注释;。因此,这一行中的值为null,返回this.personDAO.listPersons 您没有包含@Autowired以注入依赖项 PersonServiceImpl中的1个: 2在PersonDAOImpl中: 最后,您需要在Spring配置类中使用@EnableTransactionManagement来启用事务管理:
@EnableWebMvc
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.ulotrix.spring" })
public class AppConfig extends WebMvcConfigurerAdapter {
您没有包括@Autowired以注入依赖项 PersonServiceImpl中的1个: 2在PersonDAOImpl中: 最后,您需要在Spring配置类中使用@EnableTransactionManagement来启用事务管理:
@EnableWebMvc
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.ulotrix.spring" })
public class AppConfig extends WebMvcConfigurerAdapter {
@ulotrix你能添加PersonDAO的代码吗?如果有更多异常,请查看服务器日志。您还必须在此处添加@Autowired:private PersonServicepersonService@ulotrix你加的不是刀,对不起我的错。再次编辑。我还加了“自动连线”。@ulotrix我看不到刀@ulotrix你能添加PersonDAO的代码吗?如果有更多异常,请查看服务器日志。您还必须在此处添加@Autowired:private PersonServicepersonService@ulotrix你加的不是刀,对不起我的错。再次编辑。我还加了“自动连线”。@ulotrix我看不到刀?!我改变了这些,并在Intellih IDEA中对项目结构进行了一些配置。现在我没有收到这个错误。但这次当我尝试浏览http://localhost:8080/persons 页面我收到HTTP状态404-/WEB-INF/views/person.jsp。但是我有person.jsp在完全相同的位置。如果文件存在,那么您将不会得到404错误。尝试将该文件导出为WAR文件,并查看person.jsp是否仍然存在于所需的path.No处。只有lib和类。为什么不添加我的视图文件夹?好的,完成。我的想法被打破了。我改变了这个,它工作了。谢谢你,做得很好,谢谢柴坦尼亚!我改变了这些,并在Intellih IDEA中对项目结构进行了一些配置。现在我没有收到这个错误。但这次当我尝试浏览http://localhost:8080/persons 页面我收到HTTP状态404-/WEB-INF/views/person.jsp。但是我有person.jsp在完全相同的位置。如果文件存在,那么您将不会得到404错误。尝试将该文件导出为WAR文件,并查看person.jsp是否仍然存在于所需的path.No处。只有lib和类。为什么不添加我的视图文件夹?好的,完成。我的想法被打破了。我改变了这个,它工作了。谢谢你,做得很好,谢谢柴坦尼亚!
@Service("personService")
public class PersonServiceImpl implements PersonService {
private PersonDAO personDAO;
public void setPersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO;
}
@Override
@Transactional
public void addPerson(Person p) {
this.personDAO.addPerson(p);
}
@Override
@Transactional
public void updatePerson(Person p) {
this.personDAO.updatePerson(p);
}
@Override
@Transactional
public List<Person> listPersons() {
return this.personDAO.listPersons();
}
@Override
@Transactional
public Person getPersonById(int id) {
return this.personDAO.getPersonById(id);
}
@Override
@Transactional
public void removePerson(int id) {
this.personDAO.removePerson(id);
}
}
@Controller
public class PersonController {
private PersonService personService;
@Autowired(required = true)
@Qualifier(value = "personService")
public void setPersonService(PersonService ps) {
this.personService = ps;
}
@RequestMapping(value = "/persons", method = RequestMethod.GET)
public String listPersons(Model model) {
model.addAttribute("person", new Person());
model.addAttribute("listPersons", this.personService.listPersons());
return "person";
}
//For add and update person both
@RequestMapping(value = "/person/add", method = RequestMethod.POST)
public String addPerson(@ModelAttribute("person") Person p) {
if(p.getId() == 0) {
this.personService.addPerson(p);
}else {
this.personService.updatePerson(p);
}
return "redirect:/persons";
}
@RequestMapping(value = "/remove/{id}")
public String removePerson(@PathVariable("id") int id) {
this.personService.removePerson(id);
return "redirect:/persons";
}
@RequestMapping(value = "/edit/{id}")
public String editPerson(@PathVariable("id") int id, Model model) {
model.addAttribute("person", this.personService.getPersonById(id));
model.addAttribute("listPersons", this.personService.listPersons());
return "person";
}
}
public interface PersonDAO {
public void addPerson(Person p);
public void updatePerson(Person p);
public void removePerson(int id);
public List<Person> listPersons();
public Person getPersonById(int id);
}
@Component
public class PersonDAOImpl implements PersonDAO {
private static final Logger logger = LoggerFactory.getLogger(PersonDAOImpl.class);
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf) {
this.sessionFactory = sf;
}
@Override
public void addPerson(Person p) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(p);
logger.info("Person saved successfully, Person Details="+p);
}
@Override
public void updatePerson(Person p) {
Session session = this.sessionFactory.getCurrentSession();
session.update(p);
logger.info("Person updated successfully, Person Details="+p);
}
@SuppressWarnings("unchecked")
@Override
public List<Person> listPersons() {
Session session = this.sessionFactory.getCurrentSession();
List<Person> personList = session.createQuery("from Person").list();
for(Person p: personList) {
logger.info("Person List::"+p);
}
return personList;
}
@Override
public Person getPersonById(int id) {
Session session = this.sessionFactory.getCurrentSession();
Person p = (Person) session.load(Person.class, new Integer(id));
logger.info("Person loaded successfully, Person details="+p);
return p;
}
@Override
public void removePerson(int id) {
Session session = this.sessionFactory.getCurrentSession();
Person p = (Person) session.load(Person.class, new Integer(id));
if(null != p) {
session.delete(p);
}
logger.info("Person deleted successfully, person details="+p);
}
}
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
@Autowired
private PersonDAO personDAO;
@Autowired
private SessionFactory sessionFactory;
@EnableWebMvc
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.ulotrix.spring" })
public class AppConfig extends WebMvcConfigurerAdapter {