gpt4 book ai didi

java - CQ5.3 Servlet 不可用(和 Servlet 解析器路径配置 (5.3 v 5.6))

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:36 24 4
gpt4 key购买 nike

从历史上看,我只使用过 CQ 5.6,但现在我正在使用 5.3 开发一个项目,但未能注册和访问 servlet。当我尝试访问 servlet(有和没有扩展名)时,我在错误日志中得到以下 INFO 行:

GET /bin/TestServlet.json HTTP/1.1] org.apache.sling.engine.impl.SlingMainServlet service: Resource /bin/TestServlet.json not found

我可以构建包含 servlet 的包,使用 maven-sling-plugin 部署它,包最终在控制台中显示为“Activity ”,但 servlet 不可用。我在我的类文件中使用以下内容来定义 servlet:

@SlingServlet(paths = {"/bin/TestServlet"}, methods = {"GET"}, extensions = {"json"}, metatype = true)
@Properties({
@Property(name = "service.name", value = "com.something.servlets.TestServlet", propertyPrivate = true),
@Property(name = "service.description", value= "Test servlet I am trying to geet working", propertyPrivate = true),
@Property(name = "service.vendor", value = "something", propertyPrivate = true)
})

请注意,我还尝试了使用 @Component(......)@Service(value=Servlet.class) 注释的替代方法

查看问题是否基于配置(认为/bin 被阻止)我回到 5.6.1 比较配置并注意到 Apache Sling Servlet/Script Resolver 和 Error Handler 的配置 在 5.3 和 5.6 之间有所不同。

在 5.6 中,您可以配置 servletresolver.paths(如果我理解正确的话)打开执行路径,但这在 5.3 中不存在

所以:

  1. servletresolver.paths 的配置是否存在于 5.3 中?
  2. 我什至可以在 5.3 中注册这样的 servlet 吗?
  3. 如果对 2 的回答是“否”,您能否指出一个示例/教程,说明如何在 5.3 中执行此操作(此版本的文档和教程很少)?

提前致谢

编辑(分辨率):这似乎取决于 POM 中的版本(以及可能插件配置)。可能只有一个罪魁祸首,但我根本没有时间尝试所有排列。如果我有时间尝试,我会添加一个编辑。

成功版本:maven-bundle-plugin - v2.4.0maven-scr-插件-v1.13.0maven-sling-plugin - v2.1.0

最佳答案

在 CQ5.3 中,您可以使用“JCR 解析器”来检查 servlet 映射。前往

http://localhost:4502/system/console/jcrresolver

然后在“配置测试”中输入您的 servlet 的路径。例如

http://localhost:4502/bin/TestServlet

解析结果应该映射到你的servlet例如

ServletResource, servlet=com.test.impl.HelloJSONServlet, path=/bin/TestServlet

还有在 CQ5.3 中工作的代码片段

@Component(immediate = true, metatype = false, label = "Hello JSON Servlet")
@Service(serviceFactory = false, value = javax.servlet.Servlet.class)
@Properties(value = {
@org.apache.felix.scr.annotations.Property(name = "sling.servlet.methods", value = { "GET" }),
@org.apache.felix.scr.annotations.Property(name = "sling.servlet.extensions", value = { "json" }),
@org.apache.felix.scr.annotations.Property(name = "sling.servlet.paths", value = {"/bin/TestServlet"})

})
public class HelloJSONServlet extends SlingAllMethodsServlet {

protected void doGet(SlingHttpServletRequest request,
SlingHttpServletResponse response) throws ServletException,
IOException {
String username = request.getParameter("username");
response.setContentType("application/json");
response.getWriter().write("{ \"hello\" : \""+username+"\" }");
}
}

关于java - CQ5.3 Servlet 不可用(和 Servlet 解析器路径配置 (5.3 v 5.6)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25378001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com