请求Dispatcher导致$ .get的jQuery提醒页面文本

时间:2014-11-17 09:46:41

标签: java jquery ajax servlets get

例如:

我有一个像:

$.get('Test_Controller.html',function(response){ 
   alert(response);
});

在我的Test_Controller.html servlet中我有:

    request.setAttribute("test","testData");
    RequestDispatcher requestDispatcher =
    request.getRequestDispatcher("/test.jsp");
    requestDispatcher.forward(request,response);

问题是:

为什么response会始终提醒test.jsp的文字内容,而不是我通过JSON

传递的getWriter()

编辑:

我需要得到:

  TestData testData = new TestData();
     request.setAttribute("test",testData);

使用jQuery' $ .get()这样页面就不会重新加载,但不幸的是,当我没有调度时,我的响应对象似乎是空的,当我发送和转发时,当我提醒响应时,它会提醒页面文本。

3 个答案:

答案 0 :(得分:6)

您希望将servlet中的一些信息写回客户端。 你的serlvet看起来像这样:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    response.setContentType("application/json");
    Writer w = response.getWriter();
    w.append("... your json here ....");
}

这就是全部(显然将servlet连接到web.xml中的URL)。你的$.get()应该看到你写给作家的任何内容。

请注意,发送的内容(在Java中)和收到的内容(在Javascript中)都是TEXT字符串。您有责任将数据转换为Java端的可读JSON,并在Javascript端将文本解释为JSON。后者可以这样做:

$.get(....., function(data) {
    try {
        // convert the text to JSON
        data = jQuery.parseJSON(data);
    } catch (e) {
        alert("Problem reading data: "+e);
    }
    ... use the JSON data ...
}

答案 1 :(得分:2)

在这种情况下,最终响应来自test.jsp,因为您已将请求转发到Test_Controller.html内的test.jsp。如果你想将这个json数据打印到test.jsp,那么你不需要将该请求转发到test.jsp页面。否则你也可以在里面创建那个json文件 test.jsp使用scriplet标签,如:

<% 
request.setAttribute("test","testData");
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
String json = new Gson().toJson(test);
response.getWriter().write(json);
%>

快乐编码!!!

答案 2 :(得分:-1)

test.jsp 中获取对象。

<%
    TestData testData = (TestData) request.getAttribute("test");
    String testDataString = new GSON().toJson(testData);
    out.println(testDataString);
%>

Javascipt 使用 $。getJSON 而非 $。获取

$.getJSON('Test_Controller.html',function(responseJSON){ 
   alert(responseJSON);
 var testData = responseJSON;// Then you can accesss your class values.

 $.each(testData,function(key,value){
      alert("Key:-"+key+": Value:-"+value");
  }  );

});