我有一个JSP页面,其中有一类用户users_group_1
需要使用文件。 所有这些都使用相同的文件,所以自从我在JSP中,我创建了一个类(Class1
),所有方法都为 synchronized 避免使用它的问题。
在这些用户组的JSP中,我只有一个实例,声明如下:
<%!
Class1 my_object = null;
%>
然后,当第一个用户使用网络时,它会:
if (my_object == null)
{
my_object = new Class1(file_to_open);
}
然后,该组中的所有用户将使用相同的实例。
现在,我需要另一个JSP页面,它将由user_group_2
打开,关闭此文件并保存已完成的工作。
所以我认为我需要获取JSP中使用的Class1
实例并将其提供给第二个实例。
我该怎么做?
额外数据:user_group_2
从不使用与user_group_1
相同的JSP页面,因此我无法使用request / session / ...对象(我认为)。
答案 0 :(得分:1)
您的要求可以通过使用ServletContext
对象(应用程序范围)在下面给出的内容来实现。
在第一个jsp页面上,您要初始化对象并将其设置为应用程序范围。
<%
ProcessFile processFile=(ProcessFile)application.getAttribute("processFile");
if(null==processFile){
// make sure that all method of this class is synchronized beacause of multiple users
processFile=new ProcessFile("pathToOpenFile");
}
application.setAttribute("processFile", processFile);
//now processFile available globally.
%>
然后在第二个jsp页面上,您可以使用已设置到应用程序范围内的processFile
对象,如:
<%
ProcessFile processFile2=(ProcessFile)application.getAttribute("processFile");
// now start processing of file
if(null!=processFile2){
processFile2.readFile();
//open file if not. And read it.
//and after that.
processFile2.closeFileIfOpen();
// do neccesorry checks inside above method while closing file.
//all method are synchronized
}
%>
答案 1 :(得分:0)
创建一个单例类,让每个人都获得该类的实例。
public class SingletonFile {
private static SingletonFile instance.
static {
instance = new SingletonFile();
}
public static SingletonFile getInstance() {
return instance;
}
private SingletonFile () {}
// public methods for manipulation of files goes here.
}