|
Page Edited :
SLINGxSITE :
Discover Sling in 15 minutes
Discover Sling in 15 minutes has been edited by Bertrand Delacretaz (Apr 23, 2009). Change summary: curl -X PUT does not work anymore to upload files with current trunk Discover Sling in 15 minutes - the Sling Launchpad
The Sling Launchpad is a ready-to-run Sling configuration, providing an embedded JCR content repository and web server, a selection of Sling components, and documentation and examples. The Launchpad makes it easy to get started with Sling and to develop script-based applications. This page will help you in getting started with the Launchpad. Fifteen minutes should be enough to get an overview of what Sling does. While simple to run and understand, the Launchpad is a full-featured instance of Sling, an example configuration that we have created with the most common modules and configurations. The full functionality of Sling is available by loading additional Sling (or custom) OSGi modules as needed, using the Launchpad's web-based OSGi management console. See AlsoExample applications and mini-applications for Sling can be found under http://svn.apache.org/repos/asf/incubator/sling/trunk/samples/ PrerequisitesIf using the self-runnable jar from the Sling distribution, you only need a Java 5 JDK. If using the war file from the Sling distribution, you need a suitable servlet container (all recent versions of Jetty or Tomcat should work), running under a Java 5 JDK. If building Sling yourself (which is the best way to get the latest and greatest), you'll need:
And in all cases you'll need cURL A WebDAV client makes editing server-side scripts much more convenient, but to make our examples easy to reproduce, we're using cURL below to create and update files in the JCR repository, via the Sling WebDAV server. Get the LaunchpadSee Getting and Building Sling - you can either use a released version (if it is current enough), or build it yourself. Start the LaunchpadIf using the self-runnable jar from the Sling distribution, start it by double-clicking or with java -jar .... If using the war file from the Sling distribution, install it in your servlet container and start that. If you built Sling yourself, change to the launchpad/webapp directory under the top-level sling directory, and run mvn jetty:run To start the launchpad. The examples below assume that Sling is running on port 8888, which is the default for the launchpad/webapp module. If your setup is different you'll need to adjust the port number accordingly.
Create some contentUntil we have ready-to-test forms, you can create content with cURL, or you can create an HTML form that posts to the specified URL. To create a content node (nodes are a JCR curl -F"sling:resourceType=foo/bar" -F"title=some title" http://admin:ad...@localhost:8888/content/mynode The resulting node can be seen at http://localhost:8888/content/mynode Render your content using server-side _javascript_ (ESP)Sling uses scripts or servlets to render and process content. Several scripting languages are available as additional Sling modules (packaged as OSGi bundles that can be installed via the Sling management console), but the launchpad currently only includes the ESP (server-side ECMAscript) and JSP (Java Server Pages) languages modules by default. To select a script, Sling uses the node's sling:resourceType property, if it is set. That's the case in our example, so the following script will be used by Sling to render the node in HTML, if the script is found at /apps/foo/bar/html.esp in the repository. html.esp <html>
<body>
<h1><%= currentNode.title %></h1>
</body>
</html>
To select the script, Sling looks under /apps, appends the sling:resourceType value of our node, which is foo/bar, and appends html.esp as the extension if our URL is html and the language of our script is esp. Store this script under apps/foo/bar/html.esp, either using a WebDAV client (connected to http://admin:ad...@localhost:8888/ curl -X MKCOL http://admin:ad...@localhost:8888/apps curl -X MKCOL http://admin:ad...@localhost:8888/apps/foo curl -X MKCOL http://admin:ad...@localhost:8888/apps/foo/bar curl -T html.esp http://admin:ad...@localhost:8888/apps/foo/bar/html.esp The HTML rendering of your node, at http://localhost:8888/content/mynode.html A script named POST.esp instead of html.esp would be called for a POST request, DELETE.esp for DELETE, xml.esp for a GET request with a .xml extension, etc. See URL to Script Resolution Servlets can also be easily "wired" to handle specific resource types, extensions, etc., in the simplest case by using SCR annotations in the servlet source code. Servlets and scripts are interchangeable when it comes to processing Sling requests. What next?These simple examples show how Sling uses scripts to work with JCR data, based on sling:resourceType or node types. There's much more to Sling of course - you'll find some additional simple examples below, and above in the see also section. We are working on debugging features to help trace the way Sling processes requests. Have a look at SLING-3 Additional examplesLet Sling generate the path of a newly created node.To create a node with a unique path at a given location, end the URL of the POST request with /*. In this case, the Sling response redirects to the URL of the created node. Start by creating a new /blog folder: curl -X POST "http://admin:ad...@localhost:8888/content/blog" And create a node with a Sling-generated name under it: curl -D - -F"title=Adventures with Sling" "http://admin:ad...@localhost:8888/content/blog/*" Using cURL's -D option shows the full HTTP response, which includes a Location header to indicate where the new node was created: Location: http://localhost:8888/content/blog/adventures_with_slin_0 The actual node name might not be adventures_with_slin_0 - depending on existing content in your repository, Sling will find a unique name for this new node, based on several well-know property values like title, description, etc. which are used for this if provided. So, in our case, our new node can be displayed in HTML via the http://localhost:8888/content/blog/adventures_with_slin_0.html Note that we didn't set a sling:resourceType property on our node, so if you want to render that node with a script, you'll have to store the script under /apps/nt/unstructured/html.esp. Add a page header with sling.includeThe sling.include function can be called from scripts to include the rendered result of another node. In this example, we create a node at /content/header, rendered with a logo using an html.esp script, and use that header at the top of the html.esp script that we previously created for the foo/bar resource type. Start by checking that http://localhost:8888/content/mynode.html Create this script and name it header.esp: header.esp <div> <p style="color:blue;"> <img src="" class="code-quote">"/images/sling.jpg" align="right"/> <%= currentNode.headline %> </p> </div> Upload it so that it is used to render resources having sling:resourceType=foo/header: curl -X MKCOL http://admin:ad...@localhost:8888/apps/foo/header/ curl -T header.esp http://admin:ad...@localhost:8888/apps/foo/header/html.esp Create the header node: curl -F"sling:resourceType=foo/header" -F"headline=Hello, Sling world" http://admin:ad...@localhost:8888/content/header Upload the logo that the script uses (using some sling.jpg or other logo in the current directory): curl -X MKCOL http://admin:ad...@localhost:8888/images/ curl -T sling.jpg http://admin:ad...@localhost:8888/images/sling.jpg And check that the header is rendered with the logo at http://localhost:8888/content/header.html Now, update the html.esp script that we created for our first example above, to include the header: html.esp <html>
<body>
<div id="header">
<% sling.include("/content/header"); %>
</div>
<h1><%= currentNode.title %></h1>
</body>
</html>
And re-upload it to replace the previous version: curl -T html.esp http://admin:ad...@localhost:8888/apps/foo/bar/html.esp The http://localhost:8888/content/mynode.html |
Unsubscribe or edit your notifications preferences
