如何创建可用于整个 servlet 的 class 的一个实例

How to create one instance of a class available to entire servlet

我有一个 JSP 应用程序,其中包含 Login.java 的普通 java class 和一个在 doGet 方法中调用名为 loginList 的过程的 servlet。 loginList 过程需要使用名为 OAVDbUtil 的 java class 和方法 "getLoginsList" 创建登录列表。但是 Eclipse 似乎无法识别 "getLoginsList" 过程,当我输入它时,会给出 "eclipse cannot make a static reference to the non-static method" 的消息。但一切看起来都很好,因为我没有将 getLoginsList 声明为静态。我认为有一种方法可以创建 OAVDbUtil 的实例以避免必须创建 New OAVdbUtil 对象的多个实例但是有人可以告诉我如何做到这一点并且不会收到 "eclipse cannot make a static reference to the non-static method" 的消息吗?

这是一些代码和屏幕转储

servlet 的屏幕转储

这是 OAVDbUtil

的代码
public OAVDbUtil(DataSource theDataSource) {
  dataSource = theDataSource;
}

public List<Login> getLoginsList() throws Exception {

   List<Login> loginList = new ArrayList<Login>();

getLoginsList() 不是静态的,创建它就会起作用。

您收到此错误是因为 getLoginsList() 不是 static

  1. 您可以将该方法更改为静态

    public static List<Login> getLoginsList() throws Exception {
    

(或)

  1. OAVDbUtil

    创建对象
    OAVDbUtil dbUtil = new OAVDbUtil();
    List<Login> logins = dbUtil.getLoginsList();
    

OAVDbUtil.getLoginsList()是在class中使用静态方法的方式,不能用它来访问class.

的实例方法

如果您打算 getLoginsList 成为一个静态方法,那么就这样声明它:

public static List<Login> getLoginsList() throws Exception

如果您希望 getLoginsList 成为一个实例方法,那么您需要有一个 OAVDbUtil class 的实例并且可用,并使用以下方法调用该方法:

OAVDbUtil theInstance = .... get from somewhere

List<Login> logins = theInstance.getLoginsList();

您需要向 servlet 提供 OAVDbUtil 实例 ,然后对该对象调用 getLoginsList()

servlet 可以在其初始化方法中构造这样一个对象,也可以通过容器将其注入到 servlet 中。