【问题标题】:Unable to receive response from the servlet无法接收来自 servlet 的响应
【发布时间】:2013-05-13 14:33:51
【问题描述】:

我需要将控件检索回 Jsp,并响应我之前触发的请求。 但我面临的问题是我无法在 jsp 中得到响应。

我浏览了一些帖子并尝试了一些建议,但似乎没有一个对我有用。请指出我的错误在哪里。

下面是我的尝试:

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        log.info("IN form doGet");
        request.setCharacterEncoding("utf-8");
        String selectedClass = request.getParameter("key");
        log.info(selectedClass);
        String[] section = null;
        DBHandler dbhandler = new DBHandler();
        dbhandler.makeConnection();
        if (true == dbhandler.verifyConnection()) {
            section = dbhandler.getSection(selectedClass);
        }
        for (String str : section) {
            log.info(str);
        }
        Logger log;
        if (null != section) {
            request.setAttribute(Appconstants.Section, section);
        }
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.sendRedirect("/ReportFetcher/WebContent/FirstJSP.jsp");
//      RequestDispatcher view = request.getRequestDispatcher("/First.jsp");
//      view.forward(request, response);
    }

以下是jsp部分:

function funcOnChange() {
    var index = document.detail.Class.selectedIndex;
    var valueSelected = document.detail.Class.options[index].value;
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function()
    {
        // Check to see if this state change was "request complete", and
        // there was no server error (404 Not Found, 500 Server Error, etc)
        if (xmlhttp.readyState==4 && xmlhttp.status==200) 
        {
            var substring=xmlHttp.responseText;
            alert("Alert Dialog! Gaurav");
        }
        if (xmlhttp.readyState == 404){
            alert("404 error");
        }
        if (xmlhttp.readyState == 500){
            alert("500 error");
        }

    }
    xhr.open('GET', 'http://localhost:8080/ReportFetcher/FormHandler?key='+encodeURIComponent(valueSelected), true);
    xhr.send(null);
    return false;
}

【问题讨论】:

  • 不清楚你想要实现什么以及问题是什么,但在 servlet 中,从数据库中检索信息并将其存储在请求属性中的意义是什么,如果你只是之后是发送重定向到另一个位置?
  • 其实我需要做两个下拉,这样第二个下拉项目依赖于第一个下拉选择。这就是为什么我需要执行数据库操作来获取元素。所以,我在这里发送一个关于第一个下拉列表的 onChange 的请求并执行数据库操作并取回结果。现在我想要将此结果发送回我的 jsp 并激活第二个。但我无法发送结果。
  • 重定向到 FirstJSP.jsp 告诉浏览器向 FirstJSP.jsp 发送新请求。因此,当 JSP 处理第二个请求时,您存储在第一个请求的属性中的所有内容都会丢失。你想要的是转发,而不是重定向。
  • 你确定你的帖子是jsp部分吗?..是javascript?!
  • 如我所说。在尝试找到解决问题的方法之前。试着找出并说出问题所在。这是通过在代码中添加跟踪、在服务器端使用调试器、使用浏览器开发工具查看发送的请求和接收的响应等来完成的。

标签: android jsp servlets


【解决方案1】:

我认为您所做的一切都是正确的,并且如上所述,您还应该需要转发请求而不是重定向请求。

您出错的地方是您正在创建 XMLHttpRequest 的对象并在发出请求时使用变量 xhr 引用它,但是当您当时处理响应时,您正在检查变量 @ 的状态987654322@ ,所以你需要做的就是将变量xmlhttp 替换为xhr

如果您遇到任何问题,请随时提出。

【讨论】:

    【解决方案2】:

    您的第一个下拉菜单的 Onchange 向您的 db 发出 ajax 请求。这就是您已经完成的操作。 因此,现在您需要编写在您的 jsp 中收到的响应,以便它实际填充第二个下拉列表。

    要让 servlet 响应,您需要使用响应对象并使用打印方法来编写响应。

    这是如何在下拉菜单中动态生成选项的线索

    使用 document.getElementById(yourselecttagid); 并对上面返回的标签使用 appendChild 方法添加选项..

    好的,现在 servlet 使用 responseText 返回响应并在任何你想显示的地方显示它...在你的 jsp 中使用 scriplet 像这样

    【讨论】:

      【解决方案3】:

      使用 RequestDispatcher 包含或转发您的响应和请求。这将很容易处理。

      【讨论】:

        【解决方案4】:

        我想你可能误解了 response.sendDirect 方法的含义。该方法将

        设置适当的标头和内容正文以将客户端重定向到不同的 URL。

        有关详细信息,请参阅 SRV.5.4。

        因此,当您涉及该方法时,响应已解决,并且当客户端(浏览器)收到响应时,它会重定向到您设置的 URL。jsp 将收到来自浏览器的新请求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-20
          • 1970-01-01
          • 2014-06-16
          • 1970-01-01
          • 2020-09-16
          • 2015-10-12
          • 2020-05-13
          相关资源
          最近更新 更多