Java cq5可以';不创建servlet资源

Java cq5可以';不创建servlet资源,java,servlets,osgi,aem,sling,Java,Servlets,Osgi,Aem,Sling,我在CQ5应用程序中创建了一个servlet: import java.io.IOException; import javax.servlet.ServletException; import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServlet

我在CQ5应用程序中创建了一个servlet:

import java.io.IOException;

import javax.servlet.ServletException;

import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;

@SlingServlet(
        label = "Example Servlet",
        paths = {"/bin/project/signin"},
        methods = {"GET"},
        extensions = {"html"},
        metatype = false
)
public class SignInServlet extends SlingAllMethodsServlet  {

    private static final long serialVersionUID = 796802690004962223L;

    @Override
    protected void doGet(SlingHttpServletRequest request,
            SlingHttpServletResponse response) throws ServletException,
            IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(SlingHttpServletRequest request,
            SlingHttpServletResponse response) throws ServletException,
            IOException {
        response.setContentType("text/plain");
        response.getOutputStream().print("Sigin Servlet");
    }
}
我尝试通过rest客户端调用它,但它返回:

No resource found for url: http://localhost:4502/bin/project/signin
我还打开Felix端的Sling资源解析器来测试它是否可用。但我收到:

NonExistingResource, path=/bin/project/signin

/bin/
已经在Apache Sling Servlet/Script解析器和错误处理程序中进行了配置,Fellix

@SlingServlet
注释中,您已经声明此Servlet只支持扩展名为
.html
的请求,因此您应该点击以下URL:

http://localhost:4502/bin/project/signin.html

如果不想使用扩展名,请从servlet注释中删除相应的参数。

@SlingServlet
注释中,您已声明此servlet仅支持扩展名为
.html
的请求,因此应点击以下URL:

http://localhost:4502/bin/project/signin.html

如果不想使用扩展,请从servlet注释中删除相应的参数。

有两种方法可以帮助调试这种情况-

  • 将允许您检查给定GET或POST请求将针对哪个Servlet进行解析
  • 如果您在选项卡中找到生成404的请求,则在尝试解决该请求时,它应该准确地告诉您Sling发现了哪些属性 例如,在您的情况下,我认为404提供了如下信息:

    LOG Resource Path Info: SlingRequestPathInfo: \
    path='/bin/project/signin', \
    selectorString='null', \
    extension='null', \
    suffix='null'
    

    将其与注释中的设置相比较,这里有一个扩展='null',与您的servlet不匹配-正如上面正确指出的那样,它只针对'html'扩展进行绑定。

    有两种方法可以帮助调试这种情况-

  • 将允许您检查给定GET或POST请求将针对哪个Servlet进行解析
  • 如果您在选项卡中找到生成404的请求,则在尝试解决该请求时,它应该准确地告诉您Sling发现了哪些属性 例如,在您的情况下,我认为404提供了如下信息:

    LOG Resource Path Info: SlingRequestPathInfo: \
    path='/bin/project/signin', \
    selectorString='null', \
    extension='null', \
    suffix='null'
    
    将其与注释中的设置相比较,这里有一个扩展='null',它与您的servlet不匹配-正如上面正确地说,它只绑定到'html'扩展