package com.google.gwt.query.servlet; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.gwt.query.client.plugins.ajax.Ajax; public class GQAjaxTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String name = this.getClass().getSimpleName() + " "; @SuppressWarnings("unused") private void dumpHeaders(HttpServletRequest req) { System.out.println(name + req.getMethod() + " " + req.getContentType()); @SuppressWarnings("unchecked") Enumeration<String> en = req.getHeaderNames(); while (en.hasMoreElements()) { String s = (String) en.nextElement(); System.out.println(name + s + " " + req.getHeader(s)); } } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String t = req.getParameter("timeout"); if (t != null && t.matches("\\d+")) { try { int ms = Integer.parseInt(t); System.out.println(name + "sleeping: " + ms); Thread.sleep(ms); } catch (Exception e) { } return; } String data = ""; if (req.getMethod().equalsIgnoreCase("get")) { data = req.getParameter("data") != null ? req.getParameter("data") : ""; if (req.getParameter("callback") != null) { data = req.getParameter("callback") + "(" + data + ");"; } } else if (req.getMethod().equalsIgnoreCase("post") && req.getContentType() != null && req.getContentType().toLowerCase().startsWith(Ajax.JSON_CONTENT_TYPE)) { BufferedReader reader = req.getReader(); String line; while ((line = reader.readLine()) != null) { data += line; } } String origin = req.getHeader("Origin"); if ("true".equals(req.getParameter("cors")) && origin != null) { resp.addHeader("Access-Control-Allow-Origin", origin); if ("true".equals(req.getParameter("credentials"))) { resp.addHeader("Access-Control-Allow-Credentials", "true"); } String method = req.getHeader("Access-Control-Request-Method"); if (method != null) { resp.addHeader("Access-Control-Allow-Methods", method); resp.setHeader("Allow", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS"); } String headers = req.getHeader("Access-Control-Request-Headers"); if (headers != null) { resp.addHeader("Access-Control-Allow-Headers", headers); } } PrintWriter p = resp.getWriter(); p.print(data); p.flush(); p.close(); System.out.println(name + "returns: " + data); } }