Servlet服务可怜的Servlet

时间:2013-11-27 13:36:45

标签: java servlets osgi cq5

ServletServicePoorServlet之间有什么区别?何时仅使用servlet以及何时将servlet定义为OSGI服务?

PoorServlet

public class PoorServlet extends SlingAllMethodsServlet
{
    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
    {
        //Do something fun here
    }
}

ServiceServlet

@Properties({
        @Property(name="service.pid", value="mycompany.ServiceServlet",propertyPrivate=false),
        @Property(name="service.description",value="Service servlet", propertyPrivate=false),
        @Property(name="service.vendor",value="mycompany", propertyPrivate=false)
})
public class ServiceServlet extends SlingAllMethodsServlet
{
    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
    {
        //Do something fun here
    }

}

1 个答案:

答案 0 :(得分:3)

PoorServlet不是OSGi服务,因此不会在Sling servlet引擎中注册。因此,它不会在任何路径下可用。这是一个简单的POJO,Sling对此一无所知。

您的示例中的

ServiceServlet也不是真正的OSGi组件。为了使其成为OSGi组件,您应该使用添加@Component@Service注释。然后,您可以添加应包含servlet路径的sling.servlet.paths属性。完成这些修改后,您可以在适当的路径下访问您的servlet。

还有一些有用的@SlingServlet注释可用于代替@Component@Service以及所有与servlet相关的属性:

@SlingServlet(paths="/bin/my/path")
public class ServiceServlet extends SlingAllMethodsServlet {
...

请在Sling documentation

中找到更多信息