问题描述
我试图通过将InputStream对象从一个servlet发送到另一个servlet,方法是将其设置为HttpSession Interface对象的属性。 但是,当我尝试在另一个servlet中检索它时,它将返回NullPointerException。
Servlet1.java
main.js?d610:7356 UnkNown option 'eventDrop'
warnUnkNownoptions @ main.js?d610:7356
CalendarDataManager._computeOptionsData @ main.js?d610:7143
eval @ main.js?d610:983
CalendarDataManager @ main.js?d610:6974
Calendar @ main.js?573d:53
eval @ index.js?b635:45
Servlet2.java
HttpSession session = request.getSession(false);
protected void doPost(HttpServletRequest request,HttpServletResponse response)
throws servletexception,IOException {
try (PrintWriter out = response.getWriter()) {
Part part = request.getPart("file");
InputStream is = part.getInputStream();
LinkedHashMap<String,String> listofColumns = TypeCheck.typeCheck(is);
boolean test = listofColumns.isEmpty();
if (!test) {
HttpSession session=request.getSession();
session.setAttribute("myObjectId",is);
request.setAttribute("listofColumns",listofColumns);
request.getRequestdispatcher("showcolumns.jsp").forward(request,response);
System.out.println("Columns name shown in JSP page");
} else {
System.out.println("Something went wrong");
}
} catch (Exception ex) {
System.out.println("Exception Occured: " + ex);
}
doGet(request,response);
}
当我尝试使用InputStream对象时,它给出了NullPointerException。 请赐教。
解决方法
因为InputStream
本身实际上不包含任何数据。它只是指向原始HttpServletRequest
正文中包含的数据的指针。一旦第一个servlet完成其任务,则基本上将整个请求(包括其主体)丢弃。 InputStream
现在将不再指向任何内容。当您尝试在第二个servlet中读取它时,在完全不同的HttpServletRequest
中,它可能会抛出NPE,因为它找不到包含需要读取的数据的原始HttpServletRequest
。>
解决方案很简单:只需立即将其读入byte[]
或更好的temporary File
中,然后将其传递出去即可。