Thomas
Thomas

Reputation: 301

Overriding Sling DefaultGetServlet.java

I'm working on a servlet to perform some logic specific to a resourceType in sling and set information to the request to be accessible via the jsp then handing off the request to the jsp similarly to the first solution provided in this answer.

Here's some example code to represent my situation:

@SlingServlet(
  resourceTypes="myapp/components/mycomponent",
  methods="GET",
  extensions={"html"}
)
...
  @Reference
  private ServletResolver serlvetResolver;

  protected void doGet(....) {
    setPropertiesToRequest();
    Servlet servlet = servletResolver.resolveServlet(resource, "....jsp");
    servlet.service(slingRequest, slingResponse);
    clearPropertiesFromRequest();
  }

Because of this, I've noticed that I've lost sling's selector handling (I've had to roll my own simpler version to determine which jsp to render. Full featured sling selector handling is described in more detail here). I wanted to reach out to the stack overflow community and ask what else I may be missing out on by depriving the default get handler of the request. I've scanned through the source code but I think there may be more going on.

Secondly, I'd be interested in thoughts on how and where this approach may impact performance of the request resolution.

Thanks, Thomas

Upvotes: 0

Views: 709

Answers (2)

Bertrand Delacretaz
Bertrand Delacretaz

Reputation: 6100

Processing the business logic in Java and delegating to scripts for rendering sounds like a job for the recently released Sling Models. Using that should remove the need to implement your own handling of selectors, as those won't affect the model selection, only the rendering scripts.

Upvotes: 1

Thomas
Thomas

Reputation: 7078

Not sure what you are trying to achieve here, but the main problem seems to me that your SlingServlet handles the html extension and by itself does not have selectors to filter a bit more. Thus it of course intercepts all the requests to your component. Then you have to take care of the selectors again to be able to choose the correct JSP. The question is, why do you use a SlingServlet for it when you anyway do the rendering by JSP? Can't you implement your logic in the JSP or better in a bean referenced in the JSP?

In our company we use our custom tag that takes care of this, but there are public frameworks available from other Adobe Partner:

https://github.com/Cognifide/Slice

http://neba.io/index.html

Upvotes: 1

Related Questions