The recommended way to deploy for a production environment is to precompile jsps and place <servlet> definitions for them into web.xml. You can use a tool like the jetty-jspc-maven-plugin to do that for you: see
https://www.eclipse.org/jetty/documentation/current/jetty-jspc-maven-plugin.html. You could also use an ant task to do the compilation, see
https://tomcat.apache.org/tomcat-8.5-doc/jasper-howto.html#Production_Configuration. This way, page accesses are fast as there is no on-the-fly compilation and thus no need for a full jdk on the production machine.
When NOT using precompiled jsps defined as <servlets>, when a jsp page is requested, the jsp engine uses the scratch dir to look for a class matching the jsp. It does so iff development==true or the page is being requested for the first time. The page will be (re)compiled iff: the class does not exist, or the modification date on the jsp page is more recent than the date on the class file.
As Joakim suggests, you should try and produce more debug logs to determine the difference between your test and production environments. But ideally, you would instead use the proper pre-compilation procedure for your production environment.