Google App Engine und JSON, AboutMyRequest ein Beispiel
Die JavaScript Object Notation (JSON) ist ein leicht lesbares und leichtgewichtiges Protokoll, um Daten strukturiert mit wenigen Regeln verwalten zu können.

Google App Engine JSON :: AboutMyRequest
Viele Wege führen nach JSON, hier ein kleines Beispiel in Java …
AboutMyRequest …
… oder einfach über mein Request soll als kleines Beispiel die Informationen über eine Anfrage zur Anwendung in der Google App Engine in JSON zurück beantworten.
JSON Referenzimplementierung
Im SDK von der Google App Engine sind die Klassen der Referenzimplementierung zur Verarbeitung von JSON im Paket com.google.appengine.repackaged.org.json (appengine-api-labs-1.5.4.jar) vorhanden.
AboutMyRequestServlet
Ein neues Servlet wird im Google App Engine Projekt bei selektiertem Package über “File / New / Class” mit folgenden Einstellungen erstellt.

Google App Engine JSON :: Eclipse New Java Class
- Name: AboutMyRequestServlet
- Superclass: javax.servlet.http.HttpServlet
In dem folgenden Servlet wird ein JSONObject erzeugt (Zeile 20) und die jeweiligen Header-Informationen hinzugefügt (Zeile 25). Das JSONObject wird mit dem richtigen Media Type (Zeile 27) über Response einfach zum Client gesendet (Zeile 28).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package tld.sld.my.example; import java.io.IOException; 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.appengine.repackaged.org.json.JSONException; import com.google.appengine.repackaged.org.json.JSONObject; @SuppressWarnings("serial") public class AboutMyRequestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { JSONObject jsonObject = new JSONObject(); try { Enumeration<String> names = req.getHeaderNames(); while(names.hasMoreElements()) { String name = names.nextElement(); jsonObject.put(name, req.getHeader(name)); } resp.setContentType("application/json"); resp.getWriter().print(jsonObject); } catch (JSONException e) { e.printStackTrace(); } } } |
AboutMyRequestServlet.java
Konfiguration
Damit das Servlet im Container bekannt ist (<servlet>) und über eine URL auflösbar ist (<servlet-mapping>), muss folgende Konfiguration in der Datei “war/WEB-INF/web.xml” hinzugefügt werden.
<servlet> <servlet-name>AboutMyRequest</servlet-name> <servlet-class>tld.sld.my.example.AboutMyRequestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AboutMyRequest</servlet-name> <url-pattern>/aboutmyrequest</url-pattern> </servlet-mapping> |
web.xml
Anschließend kann die Webanwendung über “Run / Run As / Web Application” gestartet werden und lokal über http://localhost:8888/aboutmyrequest getestet werden.
Antworten
Nach erfolgreicher Publizierung in der Google App Engine kann auf das Servlet über http://myappid.appspot.com/aboutmyrequest wie z.B. http://mgsimon.appspot.com/aboutmyrequest zugegriffen werden.
{ "Accept-Language":"de-de,de;q=0.8,en-us;q=0.5,en;q=0.3", "Host":"mgsimon.appspot.com", "Accept-Charset":"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "X-AppEngine-Country":"DE", "User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.2.23) Gecko/20110920 Firefox/3.6.23", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" } |
Antwort einer Anfrage durch Mozilla Firefox unter Mac OS X auf einem MacBook Pro
{ "Host":"mgsimon.appspot.com", "Referer":"http://mgsimon.de/", "X-AppEngine-Country":"DE", "User-Agent":"Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC_DesireZ_A7272 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1" } |
Antwort einer Anfrage durch Browser unter Android auf einem HTC Desire Z
Weiter …
Tags: App, Engine, GAE, Google, Java, JSON, Servlet
30. Oktober 2011 um 21:29
Warum ist JSON typsicher? JavaScript ist schon nicht streng typsisiert. Wie kann dann die Object Notation typsicher sein?
31. Oktober 2011 um 06:08
@Simon Ox; Korrigiert … sollte einfach ein gültiges JavaScript sein und unterscheidet wenigstens zwischen Nullwert, boolescher Wert, Zahl und Zeichenkette.
31. Oktober 2011 um 11:05
Full ACK.