Introduction aux concepts de base d’Apache Sling [Eng]
Introduction aux concepts de base d’Apache Sling
....
Architecture générale
Demande de traitement
Décomposition d'URL
Envoi de demandes
Servlets et scripts
Les filtres
Ressources
Ressources
Fournisseur de ressources et résolveur de ressources
Cartographie de résolution de ressources
API Sling
Adaptateurs
API Sling
REST est synonyme de «transfert d'état représentatif»
“Style architectural pour la conception de systèmes distribués“
„Le Web tel qu'il était censé être“
C’est centré sur le transfert de
Représentations de Ressources Roy Fielding
Une ressource peut essentiellement être n'importe quoi!
Les ressources sont indépendantes de leur représentation
Une URL identifie une ressource
Les URL ont une hiérarchie implicite
Les méthodes effectuent des opérations sur les ressources
Les codes de statut HTTP sont utilisés pour indiquer le succès des résultats.
Les méthodes les plus courantes sont:
GET - Récupérer un élément ou une liste d'éléments
POST - Créer un article
PUT - Mettre à jour un élément
DELETE - Supprimer un élément
Des méthodes sûres ne doivent rien changer
Les méthodes idempotentes ne doivent rien changer au-delà de leur première exécution
Demande de traitement
Décomposition d'URL
Envoi de demandes
Servlets et scripts
Les filtres
Ressources
Ressources
Fournisseur de ressources et résolveur de ressources
Cartographie de résolution de ressources
API Sling
Adaptateurs
API Sling
Décomposer l'URL
Rechercher un fichier indiqué par l'URL
Résoudre la ressource (en utilisant le chemin de l'URL)
Résoudre le script de rendu / servlet Ne pas appeler les scripts directement dans Sling!
Source primaire: Type de ressource
Créer une chaîne de rendu
Filtres configurables (Servlet)
Servlet de rendu
Invoquer la chaîne de rendu
Chemin de ressources
La sous-chaîne de l'URL de la demande avant le premier point (.)
Peut-être l'URL complète s'il n'y a pas de point
Exemple: / un / chemin
Sélecteurs
Substring entre le premier point et le point en tête de l'extension
Utilisé pour d'autres méthodes de rendu du contenu
Plusieurs sélecteurs possibles
Optionnel
Exemple: /some/path.s1.s2.html
Extension
La chaîne entre le dernier point après le chemin de la ressource et la prochaine barre oblique
Spécifie le format du contenu
Optionnel
Exemple: /some/path.s1.s2.html
Chemin de suffixe
Chemin commençant par la barre oblique jusqu'à la fin de l'URL de la demande
Au moins un point doit être dans l'URL pour permettre à Sling de détecter le chemin du suffixe
Peut être utilisé pour fournir des informations supplémentaires pour le script de traitement
Exemple:
Chemin des suffixes d'extension
/ a / b / a / b null null null
/ a / b null html null
/ a / b s1 html null
/ a / b null html / c / d
Maintenant, Slings essaie de trouver la ressource adressée
Les mappages sont appliqués
Il est demandé aux fournisseurs de ressources inscrits de fournir une ressource avec le chemin résultant.
La plupart du temps, JcrResourceProvider par défaut finit par fournir la ressource en la recherchant dans le référentiel de sauvegarde.
Mais la ressource peut également être fournie par tout élément mappé dans l’arborescence par un
Fournisseur de ressources
Pour permettre différents traitements pour différents types de ressources, Sling a la notion de type de ressource.
Le type de ressource détermine le script utilisé pour traiter la ressource.
Déclaration du type de ressource avec sling: resourceType
Étant donné que les types de ressources sont traités comme un chemin dans le processus de sélection du script, vous devez utiliser des types de ressources délimitées par des barres obliques, telles que:
entreprise / page d'accueil
Fallback: conversion du type de noeud principal de la ressource en chemin (en remplaçant les deux points par des barres obliques) et en essayant celui-ci (par exemple, nt: fichier devient nt / fichier)
Une ressource peut non seulement définir son type de ressource, mais également un super type de ressource via le
sling: propriété resourceSuperType
Si un super-type de ressource est défini pour une ressource, la résolution de script se repliera sur ce super-type avant de revenir aux scripts par défaut.
Si un type de ressource n'a pas de super type de ressource explicite, le super type de ressource par défaut est supposé être
sling / servlet / default
Le super-type de ressource peut être déclaré sur le noeud de ressource lui-même ou pour son type de ressource.
Pour déterminer l'emplacement du script dans lequel traiter la ressource, Sling convertit le type de ressource en chemin.
Si ce chemin est absolu (c’est-à-dire qu’il commence par une barre oblique), il est utilisé tel quel.
Type de ressource: / apps / company / homepage Sites de recherche: / apps / company / homepage
Si le chemin est relatif, le ResourceResolver ajoute automatiquement chacun des chemins de recherche configurés et recherche les chemins résultants (dans leur ordre de configuration).
Chemin ["/ apps", "/ libs"]
Type de ressource: société / page d'accueil Lieux de recherche:
/ apps / company / homepage / libs / company / homepage
Selon que les sélecteurs de demandes sont pris en compte ou non, un nom de script peut prendre deux formes:
Sans sélecteurs:
{resourceTypeLabel}. {requestExtension}. {requestMethod}. {scriptExtension} Avec sélecteurs:
{selectorStringPath}. {requestExtension}. {{requestMethod}. {scriptExtension}
{resourceTypeLabel} - Dernier segment du chemin créé à partir du type de ressource. (optionnel).
{selectorStringPath} - La chaîne de sélecteur. (optionnel)
{requestExtension} - L'extension de la demande (HTML par défaut)
{requestMethod} - La méthode de la requête (par exemple, "GET" ou "POST")
{scriptExtension} - L'extension, par exemple “Esp” ou “jsp”, identifiant le langage de script.
Si plusieurs scripts s'appliquent à une demande donnée, le script avec la meilleure correspondance est sélectionné. Plus une correspondance est précise, mieux c'est.
La priorité des composants du nom de script est (du plus élevé au plus bas):
- Sélecteurs (plus le sélecteur correspond au meilleur)
- extension
- Etiquette de type de ressource
Considérons une demande d'accès à la ressource
avec le type de ressource
adaptto / sling / basics / stock
En supposant que nous ayons la liste de scripts suivante au bon endroit, l'ordre de préférence serait (7) - (6) - (4) - (4) - (3) - (2) - (1)
adaptTo () 2012
Inclure ou transférer une demande à une autre ressource:
forward () est comme une redirection côté serveur où le contrôle est complètement transféré à une autre ressource
include () est comme une inclusion côté serveur où la sortie de la ressource ciblée est incluse dans la réponse
SlingRequestDispatcher est l'implémentation spécifique à Sling de l'interface Servlet RequestDispatcher qui accepte un paramètre RequestDispatcherOptions supplémentaire. Ces options permettent de:
Forcer le traitement de la ressource ciblée avec un autre type de ressource
Ajouter des sélecteurs à la demande ou les remplacer complètement
Remplacer le chemin du suffixe
Sling prend en charge les scripts via JSR 223
Sling fournit les langages de script suivants:
JSP
Sensationnel
JavaScript
DefaultSlingScript agit comme une façade pour les servlets et les scripts
La classe DefaultSlingScript implémente SlingScript, Servlet, ServletConfig {
…
}
Certaines options disponibles en tant que contributions incluent:
Python
Rubis
Scala
Freemarker
Rapidité
Java (en tant que fichiers source .java)
Voir http: // localhost: 8080 / system / console / config dans l'onglet "Moteurs de script" pour connaître les moteurs de script disponibles.
Sling inclut une bibliothèque de balises pour simplifier le développement de JSP. Incluez-la dans votre JSP avec:
@taglib prefix = "sling"
Expose les objets de script régulièrement utilisés tels que:
demande
réponse
Ressource
en dehors
Inclut un rendu de ressource dans la page en cours
Enregistrement via le service HTTP OSGi
Méthode OSGi de base pour enregistrer les servlets, utilisée par le SlingMainServlet
Les servlets enregistrés via le service HTTP contournent le traitement de Sling
Inscription via le tableau blanc
SlingServletResolver écoute les services Servlet
Les services de servlet doivent au moins déclarer la propriété Sling.servlet.resourceType pour qu'elle soit prise en compte par Sling.
Sling enregistre les servlets en tant que ressources dans l'arborescence de ressources (virtuelle)
Les ressources de servlet sont adaptables à javax.servlet.Servlet
SlingMainServlet
Point d'entrée dans la gestion de la demande Sling après authentification
DefaultGetServlet
Fournit des moteurs de rendu par défaut pour les ressources (HTML, TXT, JSON, XML)
SlingPostServlet
Permet une manipulation étendue du contenu (création, suppression, mise à jour) via son API REST
DefaultErrorHandlerServlet
Servlet de gestionnaire d'erreurs par défaut enregistré à la fin du chemin de recherche global
Sling contient la classe de base SlingSafeMethodsServlet en tant qu'aide pour la mise en oeuvre de servlets en lecture seule.
Lors du remplacement de ses méthodes doXXX, il n’est pas nécessaire de transtyper les objets requête et réponse pour accéder aux méthodes spécifiques à Sling.
Type de ressource
Moyen principal et préféré de lier un script à une ressource.
Fournit une séparation entre une ressource et sa représentation.
Chemin
Découragé en écharpe!
Contourne le contrôle d'accès
Utilisez uniquement pour les servlets qui sont indépendamment de l'existence d'une ressource spécifique
Sélecteurs
Souvent utilisé pour une représentation différente d'une ressource (par exemple, une vue détaillée)
Extension
Utilisez cette option pour les représentations alternatives d'une ressource sous un autre type de fichier (PDF, PNG, JSON, etc.).
Méthode
Vous allez principalement l’utiliser pour implémenter un stockage de données spécifique en liant également une servlet à la méthode POST.
Utilisé pour l'authentification, le post-traitement du balisage, etc.
Les filtres dans Sling sont des services implémentant l'interface javax.servlet.Filter.
Deux propriétés de service sont pertinentes:
sling.filter.scope - Indique la chaîne de filtrage à laquelle le filtre doit appartenir. Champs obligatoires! Sling ne captera pas votre filtre s’il n’est pas réglé.
service.ranking - Indique la priorité du filtre dans la chaîne. Plus le nombre est élevé, plus le filtre sera appelé tôt.
La configuration actuelle du filtre peut être vérifiée dans l'onglet "Filtre de servlet Sling" à
Gère toutes les opérations POST sur une instance Sling par défaut
Créer, modifier, copier, déplacer, supprimer et importer des ressources
Peut être étendu avec des opérations POST supplémentaires / PostProcessor
SlingPostServlet est un bundle OSGi
………
Indique que la propriété "title" doit être définie sur "Some Value", à moins que la valeur du paramètre "title" ne soit pas vide.
Indique que la valeur de la propriété "vérifiée" doit être définie sur le nœud cible en tant que "Boolean".
Architecture générale
Demande de traitement
Décomposition d'URL
Envoi de demandes
Servlets et scripts
Les filtres
Ressources
Ressources
Fournisseur de ressources et résolveur de ressources
Cartographie de résolution de ressources
API Sling
Adaptateurs
API Sling
Qu'est-ce qu'une ressource?
- S'appuyant sur JCR's Everything is Content, Sling suppose que tout (ou presque) est une ressource. Ainsi, Sling gère un arbre virtuel de ressources, qui est une fusion du contenu réel du référentiel JCR et des ressources fournies par les fournisseurs de ressources.
Puisque Sling est construit sur JCR, ces ressources (basées sur JCR) sont les ressources par défaut et vous les rencontrerez le plus souvent.
Les ressources JCR sont fournies avec le fournisseur JcrResourceProvider par défaut.
JcrResourceProvider est toujours disponible et est toujours demandé en dernier.
Les ressources fournies par d'autres fournisseurs de ressources ne peuvent jamais être annulées par des ressources basées sur un référentiel.
Les ressources peuvent être fournies par des fichiers (resourceType = nt: fichier) et des répertoires (resourceType = nt: dossier) contenus dans un bundle OSGi.
BundleResourceProvider est chargé de mapper l’arborescence de répertoires dans l’arborescence de ressources.
Votre paquet doit déclarer les ressources qu'il fournit avec l'en-tête Sling-Bundle-Resources
C’est très pratique de l’ajouter en tant qu’instruction dans la configuration de maven-bundleplugin:
<Sling-Bundle-
Ressources> / ressource / arbre; chemin: = / bundle / arbre
FilesystemResourceProvider peut monter un répertoire du système de fichiers local dans l'arborescence des ressources.
Comme avec d’autres fournisseurs similaires, les fichiers utilisent le type de ressource nt: file et les répertoires le type de ressource nt: folder.
FilesystemResourceProvider peut être configuré via la console de configuration OSGi
Fournit un accès aux ressources de différents emplacements via un seul ResourceResolver
Inscrit dans un chemin de l’arborescence de ressources virtuelle, il est capable de fournir des ressources en dessous de cet emplacement.
ResourceResolver demande à ResourceProviders dans l'ordre de correspondance la plus longue du chemin racine (par exemple, R1 enregistré ci-dessous / content / a aura une priorité plus élevée que R2 inscrit ci-dessous / contenu).
JCR ResourceProvider est enregistré à la racine (/) de l'arborescence de ressources virtuelle
Envoyer des commentaires
Historique
Enregistré
Communauté
