There are several different methods for doing this, but if you have a mixed set of printers (older and newer) and you plan to stay within the local network, then TCP Sockets are your best option. We have .NET and Java based SDKs for server/pc to support this. They are not necessary, but helpful.
The other main option is - If the printers are mostly newer models, you can use Websockets (HTTPS). This will allow your app to go cloud based if you wanted and still have direct access to the printers. The SDK supports this in Java.
You could use things like HTTP Post or Browser Print for this, but I would not recommend it for your use case. Post won't allow you to get status. Browser Print could work, but it's cumbersome in my opinion for your use case. Sockets would be faster and more robust.
I would definitely recommend looking at our Best Practices document.