Java 在web应用程序中生成excel工作表时出现的问题

Java 在web应用程序中生成excel工作表时出现的问题,java,multithreading,spring,spring-mvc,Java,Multithreading,Spring,Spring Mvc,在web应用程序中工作时,我在根据结果生成excel工作表时遇到一些问题。对于每个请求,此excel工作表数据应该是独立的。截至目前,我已通过以下方式实施: 为excel配置创建了xml文件 spring-excel-views.xml <bean id="excelView" class="com.test.service.excelService" I have configure this xml in the servlet configuration file <bean

在web应用程序中工作时,我在根据结果生成excel工作表时遇到一些问题。对于每个请求,此excel工作表数据应该是独立的。截至目前,我已通过以下方式实施:

为excel配置创建了xml文件

spring-excel-views.xml
<bean id="excelView" class="com.test.service.excelService"

I have configure this xml in the servlet configuration file
<bean class="xmlReolver> //Mentioned clearly in the code but not here
  <property name="location>
     <value>bin/spring-excel-views.xml</value>
  </property>
</bean>
现在在excelService.java中,代码如下:

class ExcelService implements AbstractExcelView{



 @overridden
    protected void buildExcelDocument(Map model,HttpServletRequest req, HTTPServletResponse res){
    Map m = model.getResults("results"); // Picking this from Controller
    for(Map.Entry<Integer,String> entry: m.entrySet()){ -->Exception is throwing
//excel sheet logiic
}
    //iteration logic  ----> Exception thrown here
    }
    }

正如您指出的,异常在下面的行中抛出

对于(Map.Entry:m.entrySet()){-->正在引发异常

您获得此异常是因为model.getResults(“results”)返回null。因此,您的m被分配为null,并且对null引用执行m.entrySet()操作会引发null指针异常

因此,您必须找出model.getResults(“结果”)返回null的原因并修复它。如果出现无法生成excel工作表和model.getResults(“结果”)的情况将返回null。然后您必须在代码中提供适当的检查。下面是一个检查,但它可能不足以处理更多内容

if(m!=null){
  for(Map.Entry<Integer,String> entry: m.entrySet()){ -->Exception is throwing
    //excel sheet logiic
  }
  //iteration logic  ----> Exception thrown here
}
如果(m!=null){
对于(Map.Entry:m.entrySet()){-->正在引发异常
//电子表格逻辑
}
//迭代逻辑-->此处引发异常
}

关于你关于线程安全的问题,这完全取决于你如何设计和使用你的类,仅仅看几行就很难回答。但是这可能不是线程安全的问题。

将正确的数据发送到控制器并在视图中正确显示。生成excel工作表允许您将迭代逻辑放在获取错误的位置,粘贴错误的堆栈跟踪也会非常有用。@SarfarazKhan:根据您的建议更新了异常。当输入for循环时,它会抛出异常。我感觉一旦单击excel按钮,它就无法找到确切的线程。这就是为什么y它引发异常。您能建议我如何独立地为每个请求生成excel报告吗?我能够根据请求将结果正确地发送到jsp页面。但是我无法正确生成excel表。您使用什么来生成excel文件?它是像apache.poi这样的库还是一些自定义代码?我的第一个印象是:您可能遇到了一个自动装箱问题,在ExcelService.java第34行中引发了空指针异常。(即,您将一些基本值设置为其包装类的空实例化版本,如int=null Integer)
Exception  Report:
type Exception report
message Request processing failed; nested exception is java.lang.NullPointerException
description: The server encountered an internal error that prevented it from fulfilling this request.
exception:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.
org. springframework. web. servlet. FrameworkServlet . processRequest (FrarneworkServlet. java: 932)
org.springframework.web.servlet.FrameworkServlet.doGet(Frameworkservlet.java:816)
javax.servlet.http.HttpServlet.service (HttpServlet.java: 620)
org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:801)
javax.servlet.http.Httpservlet.service(Httpservlet.java:727)
root cause

java.lang.NullPointerException
com. hello. services.ExcelService.buildExcelDocument (Excelservice.java:34)
org. springframework.web.servlet.view.document.AbstractExcelView.renderMergedoutputModel (AbstractE
org.springfranework.web.servlet.view.AbstractView.render (AbstractView.java:264)
org.springframework.web.servlet.DispatcherServlet.render (Dispatcherservlet.java: 1208)
org. springframework . web . serviet . DispatcherServlet . processDispatchResult (DispatcherServlet . java: 1208
org. springframework. web. servlet . DispatcherServlet . doDispatch (DispatcherServlet . java: 939)
org. springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:856)
org. springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java: 920)
org. springframework.web.servlet.FrameworkServlet.doGet (FrameeworkServlet.java:816)
javax.servlet.http.Httpservlet.service(Httpservlet.java: 620)
org.springframework.web.servlet.FrameworkServlet.service (FraneworkServlet.java:801)
javax.servlet.http.HttpServlet.service(Httpservlet.java:727)
if(m!=null){
  for(Map.Entry<Integer,String> entry: m.entrySet()){ -->Exception is throwing
    //excel sheet logiic
  }
  //iteration logic  ----> Exception thrown here
}