如何创建可用于整个 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
。
您可以将该方法更改为静态
public static List<Login> getLoginsList() throws Exception {
(或)
为 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 中。
我有一个 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
。
您可以将该方法更改为静态
public static List<Login> getLoginsList() throws Exception {
(或)
为
创建对象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 中。