首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AEM 6.3 :在resourceType中注册的Sling Servlet

AEM 6.3 :在resourceType中注册的Sling Servlet
EN

Stack Overflow用户
提问于 2017-10-23 10:59:39
回答 1查看 2.2K关注 0票数 0

我已经创建了一个使用AJAX调用的Sling servlet。下面是servlet代码:

代码语言:javascript
复制
package com.aem.sites.servlets;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletException;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.metatype.annotations.Designate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aem.sites.interfaces.SearchConfiguration;


@Component(
immediate = true,
service = Servlet.class,
configurationPid = "com.aem.sites.servlets.SearchServlet",
property = {
        "sling.servlet.methods=get", 
        "sling.servlet.selectors=search",
        "sling.servlet.resourceTypes=aemsite-project/components/structure/page",
        "sling.servlet.extensions=html"     
}
        )
@Designate(ocd=SearchConfiguration.class)
public class SearchServlet extends SlingSafeMethodsServlet  {

     /**
     * 
     */
    private static final long serialVersionUID = 1L;

    /** The Constant logger. */
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    protected void doGet(final SlingHttpServletRequest req,
                final SlingHttpServletResponse resp) throws ServletException, IOException {
        logger.info("********************************inside search servlet:::do get*****************************************");
    }

    @Activate
    @Modified
    protected void Activate(SearchConfiguration config) {
        logger.info("********************************inside search servlet*****************************************");
    }

}


package com.aem.sites.interfaces;

import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;

@ObjectClassDefinition(name="Search Configuration")
public @interface SearchConfiguration {

    @AttributeDefinition(
            name = "Enable",
            description = "Sample boolean property"
        )
        boolean enabled() default false;

}

这是js文件:

代码语言:javascript
复制
$('#search-input input').keydown(function(event) {
    var keyCode = (event.keyCode ? event.keyCode :event.which);
    if(keyCode == 13) {
        console.log('inside key event');
        var searchterm = $("#search-input input").val();
        console.log('value of search term is '+searchterm);
        //$("searchForm").submit();
        $.ajax({
            type: "GET",
            url: "/content/aemsite/en/results.search.html?q="+searchterm,
            success: function(data) {
            }
        });
    }

});

由于某些原因,servlet没有被调用。我遵循了这些示例:

https://github.com/nateyolles/aem-osgi-annotation-demo/blob/master/core/src/main/java/com/nateyolles/aem/osgiannotationdemo/core/servlets/SampleOsgiServlet.java

http://www.aemcq5tutorials.com/tutorials/sling-servlet-in-aem/

我不确定我在这里遗漏了什么。

EN

回答 1

Stack Overflow用户

发布于 2018-01-13 19:56:38

这会导致DS实现为区分大小写的“sling.servlet.method”的值。您可以通过将"sling.servlet.methods=GET“更新为"sling.servlet.methods=get”来解析它。

代码语言:javascript
复制
package com.aem63.features.core.components.search;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Modified;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.IOException;

/**
 * Ref: https://stackoverflow.com/questions/46881339/aem-6-3-sling-servlet-registered-with-resourcetype
 */

@Component(service = Servlet.class,
        immediate = true,
        configurationPid = "com.aem63.features.core.components.search.SearchServlet",
        property = {
                Constants.SERVICE_DESCRIPTION + "=Simple Demo Servlet",
                "sling.servlet.methods=" + HttpConstants.METHOD_GET,
                "sling.servlet.resourceTypes=" + "sling/servlet/default",
                "sling.servlet.selectors=" + "search",
                "sling.servlet.extensions=" + "data"

        })
public class SearchServlet extends SlingSafeMethodsServlet {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    /**
     * The Constant logger.
     */
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    protected void doGet(final SlingHttpServletRequest req,
                         final SlingHttpServletResponse resp) throws ServletException, IOException {
        logger.info("********************************inside search servlet:::do get*****************************************");
    }

    @Activate
    @Modified
    protected void Activate(SearchConfiguration config) {
        logger.info("********************************inside search servlet*****************************************");
    }

}

演示页面:http://localhost:4502/content/aem63-features/en/jcr:content/.en.txt

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46881339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档