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

Google App Engine JSON :: AboutMyRequest

Viele Wege führen nach JSON, hier ein kleines Beispiel in Java …

HinweisDas folgende Beispiel wurde unter Mac OS X 10.6.8 mit der Java Version 1.6.0_26, Eclipse EE 3.7.1 Indigo und Google Plugin für Eclipse 2.4.1 durchgeführt. Siehe auch Hello World Google App Engine

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.

TippDamit die Dokumenation der Referenzimplementierung von Douglas Crockford in Eclipse verwendet werden kann, können die Quellen unter JSON-java als ZIP-Archiv heruntergeladen werden und dem Projekt hinzugefügt werden.

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

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

HinweisDie Anfrage wird durch die Google App Engine um zusätzliche Informationen wie z.B. die i18n Info “X-AppEngine-Country”:”DE” erweitert.

Weiter …

Tags: , , , , , ,

3 Antworten zu “Google App Engine und JSON, AboutMyRequest ein Beispiel”

  1. Simon Ox sagt:

    Warum ist JSON typsicher? JavaScript ist schon nicht streng typsisiert. Wie kann dann die Object Notation typsicher sein?

  2. mg sagt:

    @Simon Ox; Korrigiert … sollte einfach ein gültiges JavaScript sein und unterscheidet wenigstens zwischen Nullwert, boolescher Wert, Zahl und Zeichenkette.

  3. Simon Ox sagt:

    Full ACK.

Hinterlasse eine Antwort