Jsp/servlet 似乎比我预想的要乏味得多。我试图通过 ajax 调用 servlet 函数,并实际上让它将一些数据反馈给我的前端,这是一个 jsp 文件。
此代码将我的响应返回为 null。
这是我的 servlet 的一部分。我正在尝试(绝望地从代码中显而易见)让它发送一些东西 - 任何东西返回到ajax。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = (String) request.getParameter("action");
if (action.equalsIgnoreCase("selectedhotel"))
{
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
System.out.println("test");
String attribute = (String) request.getParameter("hotel_id");
System.out.println(attribute);
List<Room> aRooms;
aRooms = model.getRoomByHotel(Integer.valueOf(attribute));
request.setAttribute("aRooms", aRooms);
request.setAttribute("list", list);
PrintWriter outPrintWriter = response.getWriter();
outPrintWriter.write("ASDSADA");
outPrintWriter.println("test");
}
以及我的 JSP 中的 ajax:
$(function(){
$("#hotelSelector li").click(function(){
var hid = $(this).attr('id');
$.ajax({ type: "GET",
url: "AppController?action=selectedhotel&hotel_id=1",
success : function(text)
{
alert(text);
// This will show the values. Change "alert" for $('div#mydiv').html(value) or so
}
});
});
});</script>
好的...所以,请修复?
最佳答案
如前所述,您确实需要从小事做起,逐步提高。获得一个简单的“hello world”ajax 响应,然后处理更复杂的响应。对于更复杂的数据响应,我建议查看 json(请参阅 gson )来序列化 java 对象,以便在响应编写器中发回。
您应该考虑的第一件事是使用 jQuery post 并获取包装器以使您的生活更轻松。
例如,您的 html 将如下所示:
<h1>Hello: <span style="color:red" id="showMyName"></span></h1>
<form method="post" action="AjaxServlet" id="myForm">
<input type="text" name="myName" />
</form>
<button id="ajaxSubmit" type="submit">SEND</button>
<script type="text/javascript">
$(document).ready(function() {
$('#ajaxSubmit').on('click', function() {
// To simplify things, wrap what you can in a form and serialize
// it to send to the server.
var myForm = $('#myForm');
$.get(myForm.attr('action'), myForm.serialize(), function(data) {
$('#showMyName').text(data);
});
});
});
</script>
在 servlet 方面,您应该从一个简单的 servlet 开始,一旦确定它正常工作,就开始添加额外的范围。基本 servlet 应该是这样的:
// For this example, get and post will use the same base procedures.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
/* TODO output your response here.*/
out.println(request.getParameter("myName"));
} finally {
out.close();
}
}
发送复杂响应的一种方法是将所有数据放入某种类型的集合中,并使用 gson 或其他 JsonObjectMapper 将其转换为字符串。然后,您可以将此字符串放入响应编写器中,并将其发送回以供 jQuery 解析。
编辑:
我忘了提到您需要确保您的 servlet 也能被您的 servlet 容器识别。如果您尚未将描述符添加到 web.xml,它应该具有如下所示的条目:
<servlet>
<servlet-name>AjaxServlet</servlet-name>
<servlet-class>org.test.AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AjaxServlet</servlet-name>
<url-pattern>/AjaxServlet</url-pattern>
</servlet-mapping>
关于java - 从 servlet 获取数据到 ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549292/