All a stock JDK lacks to handle this out of the box is a JDBC driver (which it has innate support for), and a template engine.
It has a built in HTTP server which has recently been improved. It’s also getting, in preview now, a string formatting subsystem which is not quite a template language, but it’s interesting. And, to be fair, out of the box the JDK does have a template system: XML and XSLT 1.0 support.
The HTTP server is usable, but could use some sugar. Same for the logging system, usable but could use some sugar as well.
It has TLS built in as well.
It does not have JSON built in. In todays world, that along with persistence are probably two true must haves. Mind, the JDK used to ship with JavaDB, which was a version of the Apache Derby database.
It is trivial to add the SQLite jar to a project. You wouldn’t even need a connection pool with that.
Anyway, the point being that the JDK is almost there just by itself to be capable of serving a lot of use cases if you’re willing to put in a little bit of work to make your particular work flows a bit easier to use.