【问题标题】:NullPointerException when passing object from jsp to Servlet将对象从 jsp 传递到 Servlet 时出现 NullPointerException
【发布时间】:2015-02-27 09:31:21
【问题描述】:

我正在尝试使用会话对象将我的 DTO 对象从 jsp 传递到 servlet,但我得到了空指针异常,最初我尝试使用请求对象,它给出了相同的错误,因此我移至会话对象。

在第一个 servlet 中

request.getSession().setAttribute("datadto", dataDTO);
request.getRequestDispatcher("success.jsp").forward(request, response);

在jsp中

<% 
        DataDTO dataDTO = (DataDTO) request.getAttribute("datadto");
        HttpSession session420 = request.getSession();
        session420.setAttribute("object", dataDTO);
%>

在第二个 servlet 中

HttpSession session=request.getSession(false);
DataDTO dataDTO = (DataDTO) session.getAttribute("object");

MyService myService = ServiceFactory.getMyService();
myService.generateExcel(dataDTO); <--nullpointerexception

在谷歌上我发现了以下link 我按照他说的实现了我仍然得到空指针异常

在jsp中

DataDTO dataDTO = myService.getData(keyword, nor);
String myObjectId = UUID.randomUUID().toString();
request.getSession().setAttribute(myObjectId, dataDTO);
request.setAttribute("myObjectId", myObjectId);

在第二个 servlet 中

String myObjectId = request.getParameter("myObjectId");
Object myObject = request.getSession().getAttribute(myObjectId);
DataDTO dataDTO = (DataDTO) myObject;
request.getSession().removeAttribute(myObjectId);

请帮帮我。

【问题讨论】:

    标签: java jsp servlets nullpointerexception


    【解决方案1】:

    您的 DTO 已在您的第一个 servlet 中设置为 session。因此,只需从您的 JSP 中删除此代码,因为它实际上是通过将其设置为 null 来从 session 中删除 DTO。

    <% 
        DataDTO dataDTO = (DataDTO) request.getAttribute("datadto");
        HttpSession session420 = request.getSession();
        session420.setAttribute("object", dataDTO);
    %>
    

    并使用原始 key 名称 datadto

    在您的第二个 servlet 中检索 DTO
    HttpSession session=request.getSession(false);
    DataDTO dataDTO = (DataDTO) session.getAttribute("datadto");
    

    【讨论】:

    • 我在 exportExcel() 的第二个 servlet 中遇到空指针异常
    • 我按照你说的删除了代码 HttpSession session=request.getSession(false); DataDTO dataDTO = (DataDTO) session.getAttribute("datadto");在第二个 servlet 中
    • 你确定 datadto 在第一个 servlet 中不为空吗?向我们展示更多代码?
    • 在第一个 servlet DataDTO dataDTO = myService.getData(keyword,nor); request.getSession().setAttribute("datadto", dataDTO); if(dataDTO !=null) request.getRequestDispatcher("success.jsp").forward(request, response); else request.getRequestDispatcher("failure.jsp").forward(request, response);
    • 请分享您的完整代码。错误可能在其他地方。也许你也在其他地方覆盖了这个值。
    【解决方案2】:

    JSP 你说的是。

     DataDTO dataDTO = (DataDTO) request.getAttribute("datadto");
    

    应该是request.getSession().getAttribute("datadto");

    您在下面一行中修改的代码

    <% 
            DataDTO dataDTO = (DataDTO) request.getSession().getAttribute("datadto");
            HttpSession session420 = request.getSession();
            session420.setAttribute("object", dataDTO);
    %>
    

    【讨论】:

    • 在第一个 servlet 中 ---------------- request.getSession().setAttribute("datadto", dataDTO);在 jsp ------ 在第二个 servlet ----------------- HttpSession session=request.getSession(false); DataDTO dataDTO = (DataDTO) session.getAttribute("object");
    • 在第一个 servlet 中 ---------------- request.getSession().setAttribute("datadto", dataDTO);在 jsp ------ 在第二个 servlet ----------------- HttpSession session=request.getSession(false); DataDTO dataDTO = (DataDTO) session.getAttribute("object");
    • @rock :我指的是您的代码如下。在第一个 servlet 中,您将值设置如下 request.getSession().setAttribute("datadto", dataDTO);在第一个 jsp 中,您说的是 DataDTO dataDTO = (DataDTO) request.getAttribute("datadto");。你将如何获得价值。在 servlet 中,您在 session 中设置值,在 jsp 中,您从请求中获取值。这就是我在回答中所展示的。如果我错了,请纠正我
    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2013-11-25
    • 2012-05-03
    相关资源
    最近更新 更多