如何使用GSON并在JSP文件中显示信息

时间:2011-11-25 00:29:57

标签: jquery ajax json jsp gson

我正在开发一个基于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

1 个答案:

答案 0 :(得分:5)

您需要将其写入响应正文,而不是将其设置为请求属性。

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(usernamesList));

这样,这个servlet上的Ajax请求会检索一个JSON响应,然后可以使用JavaScript以常规方式遍历该响应。

也就是说,如果您的唯一目的是检查用户名是否可用,那么您也可以稍微改变一下。不是通过网络抽取所有用户名的整个列表并在JavaScript端执行检查作业,您也可以将输入的用户名作为请求参数发送到servlet并让数据库执行检查作业并返回一个布尔truefalse是否可用。例如,

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();
    }
});

这样可以提高带宽效率,减少泄露敏感信息的风险。

另见: