<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>smash-it.de &#187; Jersey</title>
	<atom:link href="http://www.smash-it.de/blog/tag/jersey/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.smash-it.de/blog</link>
	<description></description>
	<lastBuildDate>Wed, 02 Mar 2011 23:40:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>REST mit Eclipse und Tomcat</title>
		<link>http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/</link>
		<comments>http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 11:02:43 +0000</pubDate>
		<dc:creator>mash</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Jersey]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebService]]></category>

		<guid isPermaLink="false">http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/</guid>
		<description><![CDATA[Motivation: Der SOA Zug rollt bzw. ist eigentlich schon lange lange unterwegs und WebServices sind ein Trendthema. Ein Web Service lässt sich mit dem SOAP basierten Ansatz oder mit der REST Idee realisieren. Auf SOAP und Frameworks wie Axis2 werde ich hier nicht eingehen. Nun eine kurze Erklärung zu REST: Der größte Unterschied zu dem [...]]]></description>
			<content:encoded><![CDATA[<h6><strong>Motivation:</strong></h6>
<p align="justify">Der SOA Zug rollt bzw. ist eigentlich schon lange lange unterwegs und WebServices sind ein Trendthema. Ein Web Service lässt sich mit dem SOAP basierten Ansatz oder mit der REST Idee realisieren. Auf SOAP und Frameworks wie Axis2 werde ich hier nicht eingehen. Nun eine kurze Erklärung zu REST: Der größte Unterschied zu dem SOAP basierten Ansatz ist, dass es die HTTP Methoden wie GET, POST, PUT, DELETE, HEADER benutzt. In dem Glaubenskrieg zwischen den &#8220;Seifenliebhabern&#8221; und den REST-Anhängern wird das immer als Argument gebracht, dass REST als Web Service viel näher am Internet (HTTP) ist. Denn REST arbeitet wie gesagt mit den HTTP Methoden und die Daten des Service sind per Link erreichbar.</p>
<p align="justify">Ich habe mich vor kurzem mit der Materie auseinandergesetzt und versucht eine leichte Erklärung zu finden, die mir zeigt wie ich ein REST Projekt erstelle, es auf dem Tomcat Server zum laufen bringe und anschließend benutze. Weil ich die Ergebnisse bei der Suche nach solchen Tutorials nicht besonders befriedigend fand, dachte ich mir, es wäre an der Zeit so ein einfaches Tutorial zu schreiben.</p>
<p><span id="more-347"></span></p>
<h6>Projekt Setup:</h6>
<ul>
<li><a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip" target="_blank" class="lizip">Eclipse JavaEE 3.4 (Ganymede)</a></li>
<li><a href="http://mirror.moooo.org/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.zip" target="_blank" class="lizip">Tomcat 6.0.18</a></li>
<li><a href="https://jersey.dev.java.net" target="_blank" class="liexternal">Jersey</a> (REST Referenz Implementierung)</li>
</ul>
<p>Außerdem verwende ich das Kommandozeilentool <a href="http://www.gknw.net/mirror/curl/win32/curl-7.19.2-devel-mingw32.zip" target="_blank" class="lizip">Curl</a> zum Testen der Anwendung. Mit dem Tool können einfach Request an eine URL geschickt und die Antwort ausgewertet werden.</p>
<p>Nun kann man direkt in Eclipse loslegen indem man ein neues Dynamisches Web Projekt anlegt.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image3.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb3.png" border="0" alt="image" width="467" height="467" /></a></p>
<p align="justify">Nach dem Anlegen des Projektes habe ich lediglich das Paket de.smashit.resources angelegt und die Datei web.xml im Ordner WEB-INF erstellt. Den Inhalt der web.xml findet Ihr weiter unten.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image4.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb4.png" border="0" alt="image" width="233" height="211" /></a></p>
<p align="justify">Für das Entwickeln eines RESTful Webservice sind auch einige Bibliotheken von Nöten, die im Ordner WEB-INF/lib liegen müssen. <a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/rest_libs.zip" title="REST Libraries" target="_blank" class="lizip">Hier</a> erhaltet ihr die von mir verwendete libs.</p>
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">
<p align="justify">Das folgende Listing zeigt eine einfache Ressourcenklasse, die im Paket de.smashit.resources liegt. Diese Ressource ist über die URL <a href="http://localhost/RestDemo/helloworld" class="liexternal">http://localhost/RestDemo/helloworld</a> erreichbar. Die Annotation @Path konfiguriert die URL für die Ressource. Die Annotation @GET und @POST zeichnen die einzelnen Java Methoden aus und sorgen für ein Mapping zu den Http Methoden (GET, POST, PUT, DELETE, HEAD). Die @Produces Annotation gibt an welche Output von der Methode zurückgeliefert wird. In diesem einfachen Beispiel ist es nur einfacher Text aber es gibt noch andere Typen wie: application/xml, text/html, application/json.</p>
<p align="justify">
<pre lang="JAVA" line="1">
package de.smashit.resources;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

//The resource (Java class) will be hosted at the URI path "/helloworld"
@Path("/helloworld")
public class HelloRestResource {

// The method will be invoked by HTTP GET requests
// The method will produce content of MIME Media type "text/plain"
@GET
@Produces("text/plain")
public String getClichedMessage() {
return "Hello Rest (GET)";
}

@POST
@Produces("text/plain")
public String setSomething() {
return "Hello Rest (Post)";
}
}</pre>
<p align="justify">Im Ordner WEB-INF die Datei web.xml anlegen und mit folgendem XML Code füllen. In der web.xml wird ein sogenanntes Servlet gemappt (RestServlet), das von der Wurzel Url aus aufrufbar ist (siehe url-pattern). Die Ressourcenklassen müssen sich in den Paketen de.smashit.resources oder test befinden. Jersey sucht sich die Resourcen aus den Paketen raus.</p>
<pre lang="XML" line="1">
< ?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance"
xmlns="<a href="http://java.sun.com/xml/ns/javaee" class="liexternal">http://java.sun.com/xml/ns/javaee"</a>
xmlns:web="<a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" class="liexternal">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a>
xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee" class="liexternal">http://java.sun.com/xml/ns/javaee</a> <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" class="liexternal">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> id="WebApp_ID" version="2.5"&gt;

<display -name>RestDemo</display><display -name>

<servlet>
</servlet><servlet -name>RestServlet</servlet>
<servlet -class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet>

<init -param>
<param -name>
com.sun.jersey.config.property.resourceConfigClass
</param>
<param -value>
com.sun.jersey.api.core.PackagesResourceConfig
</param>
</init>

<init -param>
<param -name>
com.sun.jersey.config.property.packages
</param>
<param -value>
de.smashit.resources;test
</param>
</init>

<load -on-startup>1</load>

<servlet -mapping>
</servlet><servlet -name>RestServlet</servlet>
<url -pattern>/*</url>

</display></pre>
<p align="justify">Das Projekt wird als WebArchive (.war) auf dem Tomcat deployed. Dazu wählt man die Export Funktion von Eclipse und exportiert die war-Datei in den Ordner Webapps des Tomcats. Falls der Tomcat Server bereits läuft, wird die Anwendung automatisch deployed/gestartet und wenn nicht muss nun noch der Server gestartet werden.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image5.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb5.png" border="0" alt="image" width="589" height="376" /></a></p>
<p align="justify">Das Projekt wurde erfolgreich auf dem Tomcat deployed, wenn die Meldung in der Konsole des Tomcat in etwa die Nachricht &#8220;Root resource classes found&#8221; steht. Dann hat der Server die Resource-Klassen in den einzelnen Paketen gefunden und sie erfolgreich geladen.</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image6.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb6.png" border="0" alt="image" width="596" height="167" /></a></p>
<p align="justify">Anschließen kann man die Anwendung bequem per Browser oder dem Kommandozeilentool curl testen, indem man eine Anfrage an die Adresse stellt. Sowohl der Browser als auch curl versenden standardmäßig GET-Anfragen. So dass in diesem Fall eine Methode der Ressource ansgesprochen wird, die mit @GET annotiert ist.</p>
<p>Mit Browser:</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image7.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb7.png" border="0" alt="image" width="594" height="215" /></a></p>
<p>oder ein GET Request mit curl:</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image8.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb8.png" border="0" alt="image" width="586" height="110" /></a></p>
<p>oder ein POST Zugriff mit der Option -F</p>
<p><a href="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image9.png" class="liimagelink"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.smash-it.de/blog/wp-content/uploads/2008/12/image-thumb9.png" border="0" alt="image" width="588" height="108" /></a></p>
<p align="justify">
<p align="justify">Hat euch dieses einfache Tutorial gefallen oder geholfen? Ich denke nun sollte jeder die Grundlage von REST verstanden haben und ist in der Lage die vielen Details und Möglichkeiten von REST zu erforschen. In meinen Augen ist der schwierigste Teil der Arbeit im Entwurf eines WebServices mit REST. Den die verwendeten URIs sollten möglichst lange gültig sein und alle gewünschten Anforderungen abdecken. Werden neue Funktionen gewünscht, kommen meist schnell Ressourcen hinzu weil die begrenzte Anzahl der HTTP Methoden nicht viel Spielraum pro Ressource lässt. Also investiert in den Entwurf und Definition der Ressourcen möglichst viel Zeit um eine spätere Änderung wenn möglich zu vermeiden.</p>
<p align="justify">Und nun wünsche ich viel Spaß beim Entwickeln von Anwendungen mit REST WebService.</p>
<p align="justify">
<p align="justify">Links:</p>
<ul>
<li>
<div><a href="http://java.dzone.com/articles/putting-java-rest" title="http://java.dzone.com/articles/putting-java-rest" class="liexternal">http://java.dzone.com/articles/putting-java-rest</a></div>
</li>
<li>
<div></div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.smash-it.de/blog/2008/12/23/rest-mit-eclipse-und-tomcat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/


Served from: www.smash-it.de @ 2012-02-05 04:55:04 -->
