0

我的小项目使用一个包含员工数据(姓名、电话、电子邮件)的数据库表。它通过网络浏览器提供员工列表的前端管理(插入新闻员工,编辑当前,删除现有)。

每当我从 Eclipse 在 Tomcat 服务器上运行我的项目(以显示所有员工的列表)时,我都会收到以下错误:

java.lang.NullPointerException com.myproject.crud.EmployeesListServlet.doGet(EmployeesListServlet.java:24) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java :722)

第 24 行:request.setAttribute("employeess", employeesRepo.listEmployeess());

雇员列表Servlet

package com.myproject.crud;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
@WebServlet("/employees/")
public class EmployeesListServlet extends HttpServlet {

    @Inject @JDBC
    private EmployeesRepository employeesRepo;

    public EmployeesListServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("employeess", employeesRepo.listEmployeess());
        getServletContext().getRequestDispatcher("/WEB-INF/pages/employees-listing.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

}
4

1 回答 1

1

之前的问题确认您正在尝试遵循本教程。然而,它针对的是Caucho Resin,这是一个成熟的 Java EE 应用程序服务器,它支持所有的 Java EE 功能,无需添加更多的 JAR。

但是,您正在使用 Tomcat。Tomcat 是一个准系统 JSP/Servlet 容器,它不支持开箱即用的所有其他 Java EE 幻想。它只支持JSPServlets。是 CDI的@Inject一部分,首先不能在您的 Java servlet 代码中导入。你让它编译只能意味着你下载了一些包含 JARjavax.inject.Inject并将它放在运行时类路径中。

这不是在 Tomcat 中安装 CDI 的方式。你需要做更多的工作。另请参阅Tomcat 上的 Weld(CDI 参考实现)文档


然而,我建议停止阅读该教程,它并不是对 Java EE 的一个很好的介绍(@JDBC注释本身也有点“wtf?”)并寻找另一个教程,或者更好的是,一本真正的书。如果您想认真学习 Java EE,那么我还建议您将 Tomcat 替换为真正的 Java EE 应用程序服务器,例如TomEEGlassfishJBoss AS等。它们都带有开箱即用的 CDI(以及 JPA 和 EJB比JDBC好得多)。

于 2012-10-24T20:14:45.430 回答