Inleiding
Het binden van servlets door wegen heeft verscheidene nadelen wanneer vergeleken bij het binden door middeltypes, namelijk:
- De verbindende servers van de weg kunnen niet worden gecontroleerd gebruikend standaardJCR bewaarplaats ACLs
- Padgebonden servlets kunnen slechts aan een weg en niet een middeltype worden geregistreerd (d.w.z. geen achtervoegselbehandeling)
- Als een verbindende servlet niet actief is, bijvoorbeeld als de bundel ontbreekt of niet begonnen is, zou een POST in onverwachte resultaten kunnen resulteren. meestal een knooppunt bij
/bin/xyz
maken dat vervolgens de padbinding van de servlets bedekt
de toewijzing is niet transparant voor een ontwikkelaar die alleen naar de opslagplaats kijkt
Gezien deze nadelen wordt het sterk geadviseerd om servers aan middeltypes eerder dan wegen te binden
Servlet maken
Start je aem-banking project in IntelliJ. Maak een servlet met de naam GetFieldChoices onder de servlets-map, zoals hieronder in de schermafbeelding wordt weergegeven.
Sample Servlet
De volgende servlet is verbindend aan het het Verspreiden middeltype: azure/fetchchoice
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Session;
import javax.servlet.Servlet;
import java.io.IOException;
import java.io.Serializable;
@Component(
service={Servlet.class }
)
@SlingServletResourceTypes(
resourceTypes="azure/fetchchoices",
methods= "GET",
extensions="json"
)
public class GetFieldChoices extends SlingAllMethodsServlet implements Serializable {
private static final long serialVersionUID = 1L;
private final transient Logger log = LoggerFactory.getLogger(this.getClass());
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
log.debug("The form path I got was "+request.getParameter("formPath"));
}
}
Bronnen maken in CRX
- Meld u aan bij de lokale AEM SDK.
- Maak een bron met de naam
fetchchoices
(u kunt dit knooppunt desgewenst een naam geven) van het typecq:Page
onder het inhoudsknooppunt. - Uw wijzigingen opslaan
- Maak een knooppunt met de naam
jcr:content
typecq:PageContent
en sla de wijzigingen op - Voeg de volgende eigenschappen toe aan het knooppunt
jcr:content
azure/fetchchoices
De sling:resourceType
waarde moet resourceTypes="azure/fetchchoice aanpassen gespecificeerd in servlet.
U kunt nu uw servlet aanroepen door de bron met sling:resourceType
= azure/fetchchoices
aan te vragen bij het volledige pad, met alle kiezers of extensies die zijn geregistreerd in het Sling-servlet.
http://localhost:4502/content/fetchchoices/jcr:content.json?formPath=/content/forms/af/forrahul/jcr:content/guideContainer
Het pad /content/fetchchoices/jcr:content
is het pad van de bron en de extensie .json
is wat is opgegeven in de servlet
Uw AEM synchroniseren
- Open het AEM project in uw favoriete redacteur. Daar heb ik intelliJ voor gebruikt.
- Een map maken met de naam
fetchchoices
onder\aem-banking-application\ui.content\src\main\content\jcr_root\content
- Klik met de rechtermuisknop op de map
fetchchoices
en selecteerrepo | Get Command
(Dit menu-item is ingesteld in een vorig hoofdstuk van deze zelfstudie).
Dit knooppunt moet worden gesynchroniseerd van AEM naar uw lokale AEM.
Uw AEM projectstructuur moet er als volgt uitzien
Filter.xml bijwerken in de map aem-banking-application\ui.content\src\main\content\META-INF\vault met de volgende vermelding
<filter root="/content/fetchchoices" mode="merge"/>
U kunt nu met Cloud Manager uw wijzigingen in een AEM as a Cloud Service-omgeving doorvoeren.