Just sharing few thoughts on above :
1] It is preferred to use servlet resolution by resource type[sling.servlet.resourceTypes] than by path[which you have implemented].
2] For pagination[probably another way without servlet would be to] use the result provided by the querbuilder "searchResult = query.getResult();" in the model where querybuilder is used and get the pagination to work.
3] To get the query parameter in model class,
private SlingHttpServletRequest request;
searchTerm = request.getParameter("q"); should work.