2016-01-29 118 views
0

訪問的OSGi的servlet我試圖用http://localhost:4502/sling/test-services/planet.htmlCQ5通過網址

訪問下面的吊索的servlet但是,它給404錯誤,不知道我在做什麼錯在這裏。

@Component 
@Service(value=javax.servlet.Servlet.class) 
@Properties({ 
    @Property(name="service.description", value="HTML renderer for Planet resources"), 
    @Property(name="service.vendor", value="The Apache Software Foundation"), 
    @Property(name="sling.servlet.resourceTypes", value="sling/test-services/planet"), 
    @Property(name="sling.servlet.extensions", value="html"), 
    @Property(name="sling.servlet.methods", value="GET") 
}) 
@SuppressWarnings("serial") 
public class PlanetResourceRenderingServlet extends SlingSafeMethodsServlet { 

    @Override 
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     response.setCharacterEncoding("UTF-8"); 

     final ValueMap properties = request.getResource().adaptTo(ValueMap.class); 

     // TODO should escape output - good enough for our tests 
     final PrintWriter pw = response.getWriter(); 
     pw.println(String.format("<html><head><title>Planet at %s</title></head><body>", request.getResource().getPath())); 
     pw.println(String.format("<p>Name: %s</p>", properties.get("name"))); 
     pw.println(String.format("<p>Distance: %s</p>", properties.get("distance"))); 
     pw.println("</body></html>"); 
     pw.flush(); 
    } 

} 

是否有可能,我可以訪問沒有「.html」擴展名的servlet服務,如果我刪除擴展屬性?

我很感激任何幫助。

謝謝!

回答

4

當你想通過URL訪問一個servlet時,你需要設置sling.servlet.paths而不是sling.servlet.resourceTypes。類似的問題answered here.

如果您要設置sling.servlet.resourceTypes屬性,那麼您需要訪問sling:resourceTypesling/test-services/planet的資源。

註解應該是

@Component 
@Service(value=javax.servlet.Servlet.class) 
@Properties({ 
    @Property(name="service.description", value="HTML renderer for Planet resources"), 
    @Property(name="service.vendor", value="The Apache Software Foundation"), 
    @Property(name="sling.servlet.paths", value="/sling/test-services/planet"), 
    @Property(name="sling.servlet.extensions", value="html"), 
    @Property(name="sling.servlet.methods", value="GET") 
}) 

或者,這可以如下圖所示

@SlingServlet(paths="/sling/test-services/planet", methods="GET", extensions="html") 

確保您允許以下路徑是允許在提供Apache Sling Servlet/Script Resolver and Error Handler配置中進一步使用@SlingServlet註釋簡化OSGi控制檯。

+0

我會嘗試路徑。我看到很多servlet的智慧路徑「/ bin」,我是否需要將「/ bin/sling/test-services/planet」或「sling/test-services/planet」工作? – Sri

+2

默認情況下,腳本解析器配置中允許使用'/ bin'。因此,使用'/ bin/sling/test-services/planet'就不需要對配置進行任何修改。但是如果你使用'/ sling/test-services/planet',你可能需要明確地在腳本解析器中允許'/ sling /'。 – rakhi4110

+4

像往常一樣,讓我提醒大家,如果可以避免註冊Sling servlet,建議不要使用路徑,請參閱https://sling.apache.org/documentation/the-sling-sling中的「sling.servlets.path」部分。發動機/ servlets.html –