Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC“请求处理失败”500错误_Java_Spring_Hibernate_Spring Mvc_Annotations - Fatal编程技术网

Java Spring MVC“请求处理失败”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

我是春天的新手,试图通过教程学习。我有个问题。我将基于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 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 {