例如:
我有一个像:
$.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()这样页面就不会重新加载,但不幸的是,当我没有调度时,我的响应对象似乎是空的,当我发送和转发时,当我提醒响应时,它会提醒页面文本。
答案 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");
} );
});