无法从servlet接收响应

时间:2013-05-18 15:07:54

标签: android jsp servlets

我需要将控制权检索回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;
}

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

第一次下拉的更改会向db.thats发出ajax请求。 所以现在你需要在你的jsp中写下收到的响应,这样它实际上会填充第二个下拉列表。

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

这是一个如何在动态下拉列表中生成选项的线索

使用document.getElementById(yourselecttagid); 对于上面返回的标记,使用appendChild方法向其添加选项..

好的,现在servlet使用responseText返回响应,并使用scriplet在你的jsp中显示它... 喜欢这个

答案 2 :(得分:1)

使用RequestDispatcher包含或转发您的回复和请求。它很容易处理。

答案 3 :(得分:0)

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

那个方法
  

设置适当的标题和内容正文,将客户端重定向到其他网址。

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

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