Hi @aaron_dempwolff ,
I suppose that you store products information somewhere in the repository, but I am all listing possible solutions below.
Based on your requirements I see the following options to solve it:
Option 1: Product as an asset
You can create Content Fragment model that will map product model from the JSON object that you receive. Every time when you receive JSON of products in the servlet, you can create Content Fragment. After creating the CF for product, you can create a page by product template and add CF component to the page with a link to your product CF.
Option 2: Page per each product
Every time when you receive JSON of products in the servlet, you can create page using PageManager API (https://developer.adobe.com/experience-manager/reference-materials/6-5/javadoc/index.html?com/day/cq/wcm/api/PageManager.html). Product JSON you can store either as nodes and properties or as just as a String property.
I would suggest to expose some long-running operations like creating N pages to a Sling Job and don't block servlet thread. The Sling Job guarantees processing: https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html.
These solutions will work only for new products. However, if you want to create pages for existing products, you can create workflow or Groovy script that will process them in bulk.