Making HTTP POSTs is fine in CQ. You just need to ensure that the request is being sent to the correct servlet (which it doesn't sound like it is).
With the POST, we are forwaring the request to a URL that contains our JSP template that will generate HTML. However CQ thinks that it needs to modify the URL of the servlet.
So you need to make sure, that your template is able to handle the POST request. The easiest way would be to add a "POST.jsp" to your page component.
When I do that CQ tries to modify the URL of the servlet - I get a ConstrainViolationException. What I need is to be able to return the HTML generated from the JSP page.
If you create a POST.jsp in your template/component and make it simple with only an Hello World and stop. Does it render correctly? Do you see the hello world?
Otherwise your POST.jsp is not being triggered on your post.
1 person found this helpful
There is a second part to this problem. Even if you use a POST JSP or a POST Servlet, when you want to forward to another page, you can't just do a normal dispatcher forward. You have to either do a response redirect and pass data in the session (might not be preferable) or you need to pass in some custom HttpServletRequest whose getMethod() returns "GET". This is what the mechanism used by CQ5's FormHandlingServlet.
Thanks @sarwarbhuiyan for understanding the problem. In our situation it is not feasable to do a response redirect or use the session.
Our company did a POC with Adobe on this very problem, however the implementation is not appropriate.
I am looking for an answer of how our company can use Adobe CQ on this problem without having to do anything fancy with an HttpServletRequest object.
Have you had a look at how the CQ5 form components are developed? see 
Basic steps are:
1. Make a form component which has method="POST" and action="<%=currentPage.getPath()%>
2. Make an action component where the sling:resourceType property is set to foundation/components/form/action
3. In the form component, set an input field (type hidden) with name :formstart (notice the : before the name) and set the value to a content node (somewhere accessible). Create that node, set sling:resourceType to foundation/components/form/start and actionType to the resourceType of the action you made in 2 (e.g. myapp/components/actions/myaction)
4. In the action component, put a post.POST.jsp in there. This will be your POST handler. In here, call any java logic or send your data form post data to an OSGi service to do whatever processing is required. Then at the end of the forward.jsp you have a choice or where to redirect. Or you can choose to display something here. Your choice.
Or the alternative in step 4 is instead of post.POST.jsp, put a forward.jsp and put in a FormHelper.setForwardPath(request, path) where path is a URL which is backed by another script (servlet or component jsp) that does the processing. It will be a GET request though I believe.
Have a look at the /libs/foundation/components/forms folder and a few others which shows examples of these.
Hope this helps.