当前位置: 首页 > 知识库问答 >
问题:

JSP到Servlet1到Servlet2的调用失败

赏阳嘉
2023-03-14

我正在运行一个JSP调用servlet1的应用程序。此servlet1在内部调用servlet2以获取一些数据。Servlet1自己计算一些数据,从servlet2获得一些数据,并将其发送回JSP。

但我得到了以下错误:

HTTP状态500-

类型异常报告

留言

说明服务器遇到内部错误(),无法完成此请求。

例外情况

JAVAlang.IllegalStateException:提交响应后无法转发RoutingParser。doPost(RoutingParser.java:389)javax。servlet。http。HttpServlet。服务(HttpServlet.java:754)javax。servlet。http。HttpServlet。服务(HttpServlet.java:847)

注意根原因的完整堆栈跟踪可在Apache Tomcat/7.0.16日志中找到。

    import java.awt.List;
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Enumeration;
    import java.util.HashSet;
    import org.w3c.dom.Element;

    //import javax.lang.model.element.Element;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.swing.text.Document;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;

    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;

    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;

    import org.w3c.dom.NodeList;
    import org.w3c.dom.Node;

    import java.io.File;
    import java.util.ArrayList;


    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Enumeration;
    import java.util.HashSet;

    //import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;

    public class RoutingParser extends HttpServlet {


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

     response.setContentType("text/html");
     PrintWriter writer = response.getWriter();

     System.out.println("Routing Parser is accessible");

     System.out.println("i reached servlet");
          try {

              ArrayList inputlist1= new ArrayList();

                                        inputlist1.add(request.getParameter("CardNetwork"));//CardNetwork
                inputlist1.add(request.getParameter("Currency"));//Currency
                inputlist1.add(request.getParameter("TxnCategory"));//TxnCategory
                inputlist1.add(request.getParameter("TxnType"));//TxnType


                ArrayList list1=new ArrayList();
                ArrayList returnedData= new ArrayList();

                System.out.println("i reached servlet");
                  try {

                    File fXmlFile = new File("c:\\eclipse\\RoutingTable.xml");
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    org.w3c.dom.Document doc = dBuilder.parse(fXmlFile);
                    doc.getDocumentElement().normalize();

                    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
                    NodeList nList = doc.getElementsByTagName("Entry");
                    System.out.println("-----------------------");

                    for (int temp = 0; temp < nList.getLength(); temp++)
                    {

                                //some piece of code

                              returnedData.add(data1);
                              returnedData.add(extra_info);
                              break;
                          }

                       }

                       /*it is important to remove the earlier node elements as the comparison starts from 0 all the time, we make a purely fresh arraylist for every node
                       * if we dont remove, the arraylist will keep on adding elements to the end and the comparison will not be made with latest node elements.
                       */ 
                       for (int remove = 0; remove < 26; remove++){
                           list1.remove(0);
                       }

                    }
                    //this will be returned to JSP page

                    ServletContext context = this.getServletContext();
                    RequestDispatcher dispatcher = context.getRequestDispatcher("/Mid");

                    // change your request and response accordingly

                    dispatcher.forward(request, response);


                    request.setAttribute("returndata",returnedData);
                    System.out.println("data1 set in arraylist for JSP page is: "+ returnedData.get(0));
                    System.out.println("extra_info set in arraylist for JSP page is: "+ returnedData.get(1));




                  } catch (Exception e) {
                    e.printStackTrace();
                  }

                  System.out.println("array list in end is: " + list1);
          } finally {

                RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher("/show_result_combination_2.jsp");
                requestDispatcher.forward(request,response);

          }
              }

              private static String getTagValue(String sTag, Element eElement) {
                NodeList nlList = (eElement).getElementsByTagName(sTag).item(0).getChildNodes();

                    Node nValue = (Node) nlList.item(0);

                return nValue.getNodeValue();
              }

}

有人能帮我解决这个错误吗?

提前谢谢。

共有2个答案

云俊名
2023-03-14

你在逻辑上有问题。最后块中的代码应该移动到捕获块内几行(因为我知道你想转发响应 /Mid如果一切正常,如果不是你想重定向到/show_result_combination_2.jsp)

如果不是这样,那么您应该修改代码,因为您有两个可能发生的正向条件。这就是导致错误的原因。如果执行第一个,则第二个转发生成异常

唐博文
2023-03-14

问题是,您试图在转发后写入响应。Servlet 2可能正在提交响应。

尝试使用RequestDispatcher。而是包括。

 类似资料:
  • 我研究一个简单的问题已经有相当长的时间了。在包括这个网站在内的许多论坛上搜索了很多,但仍然无法解决这个问题。因此请求您的帮助。 我有一个带有文本区域和提交按钮的JSP页面。 在Servlet类中,我执行以下操作- 因此,在我点击提交按钮后,我的请求将转到servlet,并从servlet返回到原始的jsp,但我无法用servlet输出填充文本区域。我已经尝试了很多方法,就像我在互联网上发现的那样,

  • 我回来时问了同样的问题,但这次有更多的记录。我有一个包含许多servlet和JSP的web应用程序。应用程序有一个登录选项。在登录servlet中,我启动一个新会话,在会话中放置一些信息后,我转到一个JSP。 登录。java相关代码: 转发后,我得到一个名为Insert.jsp的Jsp页面,在那里我得到会话属性。 插入jsp相关代码: 在这之后,我有一个表单将我引导到servlet Adaugar

  • 我们在Liferay 7.0.6中实现了一个corejspook模块来定制user_action.jsp,它工作得很好。 升级到Liferay 7.3.6后,它停止工作。通过在gogo shell中搜索,我已经确保了我们将jsp替换成的模块是正确的。我还查看了源代码,以确认包含。jsp是对的。我将版本号更新为Liferay 7.3捆绑包版本(5.0.53)。我的bnd中的条目。bnd是:Fragm

  • 如何将表单信息从jsp传递到java再传递到jsp。 我有一个jsp表单,当我提交它时,它会直接传递到另一个显示这些信息的jsp页面。但我想先在java文件中处理这些信息,然后再将其传递给jsp。 我在jsp中做了类似的事情。。 然后在process.java我使用request.set属性(“数据”)来存储处理后的数据。但是如何将其重定向回html视图文件?抱歉,这里是新用户。 对不起,这应该是

  • 主要内容:JSP的由来,Servlet与JSP异同点,JSP相对于Servlet的优点JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML 文件中插入 Java 代码和 JSP 标签,后缀名为 。 JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文件,因此只要有浏览器就能查看 JSP 页面。 JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以

  • 介绍:JAVA Web应用程序中包含的Servlet。有一些值用于所有servlet,而另一些值仅与指定的servlet相关。因此,使用一个输入表单(JSP),然后它将这些值/表单输入发布到另一个“新”JSP。从这个JSP中,以前的表单(JSP)中的值应该被发布到一个servlet(-有时,会加入新表单中的附加值) 使用一个简单的HTML表单,将JSP中的值成功地发布到另一个JSP中。 问题:比如