Introducción
Los servlets de enlace por rutas tienen varias desventajas en comparación con los enlaces por tipos de recursos, concretamente:
- Los servlets enlazados a rutas no pueden controlar el acceso mediante las ACL de repositorio JCR predeterminadas
- Los servlets enlazados a rutas solo se pueden registrar en una ruta y no en un tipo de recurso (es decir, sin control de sufijos)
- Si un servlet enlazado a una ruta no está activo, por ejemplo, si el paquete falta o no se inicia, un POST puede dar como resultado resultados inesperados. normalmente se crea un nodo en
/bin/xyz
que posteriormente se superpone al enlace de ruta de los servlets
la asignación no es transparente para un desarrollador que solo busque en el repositorio
Dados estos inconvenientes, se recomienda enfáticamente enlazar los servlets a tipos de recursos en lugar de rutas
Crear servlet
Inicie el proyecto de banca aem en IntelliJ. Cree un servlet denominado GetFieldChoices en la carpeta de servlets como se muestra en la captura de pantalla siguiente.
Servlet de ejemplo
El siguiente servlet está enlazado al tipo de recurso Sling: azure/fetchchoices
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"));
}
}
Creación de recursos en CRX
- AEM Inicie sesión en el SDK local de la.
- Cree un recurso con el nombre
fetchchoices
(puede asignar el nombre a este nodo de todos modos que desee) del tipocq:Page
en el nodo de contenido. - Guarde los cambios
- Cree un nodo denominado
jcr:content
de tipocq:PageContent
y guarde los cambios - Agregue las siguientes propiedades al nodo
jcr:content
azure/fetchchoices
El valor sling:resourceType
debe coincidir con resourceTypes="azure/fetchchoices especificado en el servlet.
Ahora puede invocar el servlet solicitando el recurso con sling:resourceType
= azure/fetchchoices
en su ruta completa, con cualquier selector o extensión registrado en el servlet Sling.
http://localhost:4502/content/fetchchoices/jcr:content.json?formPath=/content/forms/af/forrahul/jcr:content/guideContainer
La ruta de acceso /content/fetchchoices/jcr:content
es la ruta de acceso del recurso y la extensión .json
es la especificada en el servlet
AEM Sincronizar el proyecto de
- AEM Abra el proyecto de en su editor favorito. He usado intelliJ para esto.
- Cree una carpeta llamada
fetchchoices
en\aem-banking-application\ui.content\src\main\content\jcr_root\content
- Haga clic con el botón derecho en la carpeta
fetchchoices
y seleccionerepo | Get Command
(este elemento de menú está configurado en un capítulo anterior de este tutorial).
AEM AEM Esto debe sincronizar este nodo desde el al proyecto local de la.
AEM La estructura del proyecto de la aplicación debería tener este aspecto
Actualice el archivo filter.xml en la carpeta aem-banking-application\ui.content\src\main\content\META-INF\vault con la siguiente entrada
<filter root="/content/fetchchoices" mode="merge"/>
Ahora puede insertar los cambios en un entorno de AEM as a Cloud Service con Cloud Manager.