目前,我有一个jsp文件,一些java bean类和两个servlet。 第一个servlet负责上传文件并打印出它的上下文。 第二个servlet负责获取java bean代码,执行它并在jsp上打印结果。然而,这结束了在servlet中复制代码。重复的代码实际上是需要重新上传文件才能调用bean:
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Iterator<FileItem> iterator = upload.parseRequest(request).iterator();
File uploadedFile = null;
String dirPath = "C:\\fileuploads";
while (iterator.hasNext()) {
FileItem item = iterator.next();
if (!item.isFormField()) {
String fileNameWithExt = item.getName();
File filePath = new File(dirPath);
if (!filePath.exists()) {
filePath.mkdirs();
}
uploadedFile = new File(dirPath + "/" + fileNameWithExt);
item.write(uploadedFile);
} else {
String otherFieldName = item.getFieldName();
String otherFieldValue = item.getString();
}
}
FileInputStream fstream = new FileInputStream(uploadedFile);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
接下来是将servlet与java bean连接起来的代码。这有效但我的问题是分享这个上传文件的最佳方式是什么?如果我可以将文件路径存储在变量中,并将其从第一个servlet调用到第二个,而没有重复的代码。
提前致谢。
P.S我也读过这个问题Share uploaded file between servlets in session,但我并没有真正做到这一点。
答案 0 :(得分:2)
如果我可以将文件路径存储在变量中,并将其从第一个servlet调用到第二个没有 重复的代码。
所以你只是获取文件路径,然后从第二个servlet再次读取文件。
session.setAttribute("filePath",yourCalculatedFilePath);
使用
从不同的servlet中检索它session.getAttribute("filePath");
您只需在会话属性中设置filePath,即可在整个会话中访问它。但是将整个文件放入会话并不是一个好主意,只要想象用户放置一个大小为1MB的文件,并且一次有1000个在线用户(仅举例)它将花费1GB的服务器内存。