我正在开发一个基于JSP的web应用程序。我有一个servlet类:
package managesystem;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
public class getUsernamesServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req, HttpServletResponse resp){
List<String> usernamesList = StudentManager.findAllUsernames();
req.setAttribute("usernames", new Gson().toJson(usernamesList));
}
}
我的问题如下:如果用户名仍然可用(如果列表中没有),我如何检查Ajax?如何使用Ajax获取servlet写入请求的JSON信息,例如register.jsp?
亲切的问候,
H4
答案 0 :(得分:5)
您需要将其写入响应正文,而不是将其设置为请求属性。
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(usernamesList));
这样,这个servlet上的Ajax请求会检索一个JSON响应,然后可以使用JavaScript以常规方式遍历该响应。
也就是说,如果您的唯一目的是检查用户名是否可用,那么您也可以稍微改变一下。不是通过网络抽取所有用户名的整个列表并在JavaScript端执行检查作业,您也可以将输入的用户名作为请求参数发送到servlet并让数据库执行检查作业并返回一个布尔true
或false
是否可用。例如,
String username = request.getParameter("username");
boolean usernameAvailable = studentService.usernameAvailable(username);
Map<String, Object> data = new HashMap<String, Object>();
data.put("usernameAvailable", usernameAvailable);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(data));
与
$.get('someservlet', { 'username': username }, function(data) {
if (!data.usernameAvailable) {
$('#somemessage').text('Username is not available, please choose another').show();
}
});
这样可以提高带宽效率,减少泄露敏感信息的风险。