Serialization 其中,在项目netbeans上放置序列化文件对象

Serialization 其中,在项目netbeans上放置序列化文件对象,serialization,servlets,netbeans,Serialization,Servlets,Netbeans,我有一个实现Serializable类的桌面应用程序,但现在我将它转换为一个带有servlet的web应用程序,我使用Netbeans进行这项工作,我有以下代码: InputStream input = ClassLoader.getSystemResourceAsStream(file_input); 如果file_输入是以前序列化的对象的字节码fyle,我不知道应该把这个文件放在哪里,因为在桌面应用程序中,我把它放在我的类所在的目录中 (我有这个文件,我不需要创建它)。首先,永远不要在Ja

我有一个实现Serializable类的桌面应用程序,但现在我将它转换为一个带有servlet的web应用程序,我使用Netbeans进行这项工作,我有以下代码:

InputStream input = ClassLoader.getSystemResourceAsStream(file_input);
如果file_输入是以前序列化的对象的字节码fyle,我不知道应该把这个文件放在哪里,因为在桌面应用程序中,我把它放在我的类所在的目录中


(我有这个文件,我不需要创建它)。

首先,永远不要在Java EE web应用程序中使用
ClassLoader#getSystemResourceAsStream()
。相反,请使用
类加载器#getResourceAsStream()
。在Java SE桌面应用程序中使用
ClassLoader#getSystemResourceAsStream()
时,我也会打上大大的问号,这是肯定的,如果它是为了可分发的,但这一点除外

ClassLoader
最终从类路径加载资源。因此,您需要做的只是确保文件放置在默认情况下由webapp的运行时类路径覆盖的路径之一,或者通过特定于服务器的配置设置将文件的新路径添加到webapp的运行时类路径,例如Tomcat的
/conf/catalina.properties的
shared.loader
属性

webapp的运行时类路径覆盖的默认路径之一是WAR的
/WEB-INF/classes
文件夹。从IDE项目的角度来看,只需将该文件放到“Java源代码”(src)文件夹的根文件夹中,在那里您就有了所有的Java包和类。IDE会注意到它最终会出现在构建WAR文件的
/WEB-INF/classes

顺便说一句,我仍然假设您没有像您明确告诉的那样,从webapp内部创建文件。那不行。如果您实际上还需要具有写访问权限,那么您将需要一个绝对磁盘文件系统路径。例如,您可以通过将其作为VM参数或环境变量提供来始终使其可配置