首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AEM Servlet未被执行

AEM Servlet未被执行
EN

Stack Overflow用户
提问于 2019-02-21 12:31:55
回答 2查看 2.2K关注 0票数 1

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

代码语言:javascript
运行
复制
    @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时

代码语言:javascript
运行
复制
$.get( "/example/search.json", function( data ) {
      $( ".result" ).html( data );
      alert( "Load was performed." );
    });

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

代码语言:javascript
运行
复制
{"sling:resourceSuperType":"sling/bundle/resource","servletClass":"com.group.aem.example.servlet.SearchSevrlet","sling:resourceType":"/example/search.servlet","servletName":"com.group.aem.example.servlet.SearchSevrlet"}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-21 13:17:25

您所得到的信息是默认JSON Servlet的答案。

请阅读此:Servlet和脚本

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

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

这意味着只有当您请求相同的路径时,servlet才会被触发,在本例中是这样的"/example/search",:

代码语言:javascript
运行
复制
GET /example/search

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

代码语言:javascript
运行
复制
    property = { 
        "sling.servlet.resourceTypes=/example/search.servlet",
        "sling.servlet.selectors=searchselector",
        "sling.servlet.extensions=json",
        "sling.servlet.methods=GET" 
    }

使用此配置,您的SearchServlet应该通过一个GET请求来触发,该请求带有带有选择器"searchselector"和扩展"json"的资源。例如:

代码语言:javascript
运行
复制
GET /corcoran/search.searchselector.json
票数 4
EN

Stack Overflow用户

发布于 2021-06-24 05:07:00

我和你的也有类似的问题。

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

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

因此,我移到"Config Manager“页面(在http://localhost:4502/system/console/configMgr上),并搜索"Apache /Script和Error Handler”。

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

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

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

https://stackoverflow.com/questions/54807159

复制
相关文章

相似问题

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