... a web application framework that provides a more unified way of handling client-side and server-side programming
At the extreme, what you are looking for are 'tierless web frameworks' or 'multitier web frameworks' or 'isomorphic web frameworks' (i.e. frameworks that completely blur the line between server-side code and client-side code).
Completely tierless web frameworks that handle both the server side and the client side (i.e. you never have to write a single line of JavaScript for the entire web app):
- Aida/Web (Smalltalk)
- Nitrogen (Erlang)
- Ocsigen (OCaml) - Claims that it is used at Facebook.
- Vaadin (Java)
- WebSharper (F#) - Appears to have some major enterprise users.
If you prefer JavaScript, see: Tierless web framework with Javascript?
In addition, you may be interested in these (most of them are research projects with little uptake):
Alternative abstractions
As you may have noticed, tierless frameworks like Ocsigen are not popular, and not well supported. Depending on your use cases, you might want to look into better-supported abstractions instead:
Component-based web frameworks
Component-based frameworks are usually contrasted with conventional action (request) based frameworks. With these component based frameworks, pages are built out of standalone components (e.g. date picker component, video player component, login form component, etc.), and these components can encapsulate Javascript. That way, when actually using the components, you don't have to think about Javascript.
In component based frameworks, the lines between client and server are not necessarily blurred, but I mention them here because they may be good choice if you are looking to abstract away the Javascript.
Component based frameworks for Java have been around for nearly two decades, and have seen a reasonable amount of uptake. Among them are:
- JavaServer Faces - Part of Java EE (Jakarta EE). Has many libraries that provide AJAX-enabled components.
- Apache Wicket
- Apache Tapestry
Client-side frameworks
Listed below are non-JavaScript frameworks/tools for the client-side only. These open the door for writing the entire web app using one language only (although the integration between server and client side will not be as good as when using completely tierless frameworks):