【问题标题】:AEM Servlet not getting executedAEM Servlet 未执行
【发布时间】:2019-07-15 08:55:19
【问题描述】:

我有一个带有 OSGI 注释的 servlet,如下所示

    @Component( immediate = true, service = Servlet.class, property = { "sling.servlet.extensions=json",
        "sling.servlet.paths=/example/search", "sling.servlet.methods=get" } )
    public class SearchSevrlet
        extends SlingSafeMethodsServlet {
      @Override
        protected void doGet( final SlingHttpServletRequest req, final SlingHttpServletResponse resp )
            throws ServletException, IOException {
      log.info("This is not getting called ");
    }
}

但是当我尝试使用 JQuery 访问 servlet 时

$.get( "/example/search.json", function( data ) {
      $( ".result" ).html( data );
      alert( "Load was performed." );
    });

我得到的是以下信息,而不是 servlet 被执行。

{"sling:resourceSuperType":"sling/bundle/resource","servletClass":"com.group.aem.example.servlet.SearchSevrlet","sling:resourceType":"/example/search.servlet","servletName":"com.group.aem.example.servlet.SearchSevrlet"}

如果我需要进行任何其他配置,请告诉我。

【问题讨论】:

    标签: servlets annotations osgi aem


    【解决方案1】:

    你得到的信息是Default JSON Servlet的答案

    请阅读:Servlets and Scripts

    您正在使用属性“sling.servlet.paths”注册“SearchServlet”。该属性定义为:

    sling.servlet.paths:servlet 可作为资源访问的绝对路径列表。属性值必须是单个字符串、字符串数组...

    这意味着只有当您请求相同的确切路径时才会触发您的 servlet,在本例中为 "/example/search",如下所示:

    GET /example/search
    

    我建议您在 Servlet 中使用属性“resourceTypes”和“selectors”而不是“paths”。例如,更好的配置可能是:

        property = { 
            "sling.servlet.resourceTypes=/example/search.servlet",
            "sling.servlet.selectors=searchselector",
            "sling.servlet.extensions=json",
            "sling.servlet.methods=GET" 
        }
    

    使用此配置,您的 SearchServlet 应该通过对具有 resourceType="/example/search.servlet" 的资源的 GET 请求和选择器 触发>“searchselector” 和扩展名 “json”。例如:

    GET /corcoran/search.searchselector.json
    

    【讨论】:

      【解决方案2】:

      你的问题我也遇到过。

      为了找出问题所在,我查看了“Recent Requests”页面。 (在 http://localhost:4502/system/console/requests。)

      在我的例子中,有一个日志说,“不会在 (我的请求路径) 寻找 servlet,因为它不在允许的路径列表中 ”。

      所以我转到“Config Manager”页面(位于 http://localhost:4502/system/console/configMgr),并搜索“Apache Sling Servlet/Script Resolver and错误处理程序”。

      它有一个名为“Execution Paths”的列表,我将我的请求路径添加到列表中。

      将我的路径添加到列表后,问题就解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-18
        • 2022-12-21
        • 2021-10-31
        • 1970-01-01
        • 2020-06-29
        • 1970-01-01
        • 2012-10-22
        • 2016-09-21
        相关资源
        最近更新 更多