AEM Servlet未执行

时间:2019-02-21 12:31:55

标签: servlets annotations osgi aem

我有一个带有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"}

如果需要其他配置,请告诉我。

2 个答案:

答案 0 :(得分:3)

您得到的信息是Default JSON Servlet

的答案

请阅读:Servlets and Scripts

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

  

sling.servlet.paths :绝对路径的列表,在该绝对路径下可以将Servlet作为资源进行访问。该属性值必须是单个字符串,字符串数组...

这意味着,只有在您请求相同的确切路径(在这种情况下为“ / example / search” )时,才会触发servlet,如下所示:

GET /example/search

我建议您在Servlet中使用属性“ resourceTypes”和“选择器”,而不要使用“路径”。例如,更好的配置可能是:

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

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

GET /corcoran/search.searchselector.json

答案 1 :(得分:1)

我和你有类似的问题。

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

就我而言,有一条日志说,“不会在 (我的请求路径) 处查找 servlet,因为它不在允许的路径列表中 ”。

所以我转到“配置管理器”页面(在 http://localhost:4502/system/console/configMgr),并搜索“Apache Sling Servlet/Script Resolver 和错误处理程序”。

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

将我的路径加入列表后,问题解决。