如何从打开的位置关闭不同JSP页面中的文件

时间:2015-03-11 18:50:27

标签: java file jsp

我有一个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 / ...对象(我认为)。

2 个答案:

答案 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.
 }