DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Related

  • Realistic Test Data Generation for Java Apps
  • Visually Designing Views for Java Web Apps
  • Open Source Tools Options in Web Application Development
  • How Spring and Hibernate Simplify Web and Database Management

Trending

  • System Coexistence: Bridging Legacy and Modern Architecture
  • Introduction to Retrieval Augmented Generation (RAG)
  • Proactive Security in Distributed Systems: A Developer’s Approach
  • Software Delivery at Scale: Centralized Jenkins Pipeline for Optimal Efficiency
  1. DZone
  2. Coding
  3. Java
  4. Learn How To Implement Web GUIs in Java

Learn How To Implement Web GUIs in Java

There's no need to use JavaScript and HTML to build web UIs if you know Java

By 
Alejandro Duarte user avatar
Alejandro Duarte
DZone Core CORE ·
Sep. 06, 21 · Analysis
Likes (5)
Comment
Save
Tweet
Share
23.2K Views

Join the DZone community and get the full member experience.

Join For Free

The world of JavaScript offers useful and fun-to-use web frameworks, there's no doubt about it. For Java developers, there's an interesting alternative—the open-source Vaadin framework. With it, you can easily implement a Graphical User Interface (GUI) for the web using only the Java programming language and nothing else. No need to write a line of HTML or JavaScript. A picture is worth a thousand words:

Vaadin

How Does Vaadin Work?

In the previous screenshot, you can see a Java class on the left. This code runs on the server, for example, Apache Tomcat, Eclipse Jetty, or any other servlet container.

You can use the API provided by the framework to create User Interfaces (UI) components such as text fields, combo boxes, data grids, date pickers, upload fields, and many others. You can combine these components to build a view (also known as page or UI) using layouts to place the UI components vertically, horizontally, or in any custom way using CSS.

In the previous example, we created a TextField and a Button both added into a VerticalLayout. Once the view is ready, you can expose it through a URL using the @Route annotation. In the example, we made it available at http://localhost:8080/hello by using @Route("hello").

A Vaadin application is a Java web application. The framework provides an Servlet implementation (VaadinServlet) that handles HTTP requests and responses for you. This servlet scans the Java classes marked with the @Route annotation to show the correct view in the browser. The first time a Vaadin application is requested, Vaadin responds with a lightweight JavaScript file that serves as a client-side engine. This engine takes care of handling the events in the browser and sending them to the server in the form of JSON messages. The VaadinServlet handles the requests and similarly returns JSON responses to the client-side engine. The engine then takes this message to update the elements in the page that need to be updated, if any. If the client-server communication was a conversation, it'd look something like this:

(The user clicks a button in the browser)

Client-side Engine: Hey VaadinServlet, the user clicked the button with ID 5.

VaadinServlet: Sure. Let me check if there are any click listeners on that button... Yeah, there's one, let's execute the listener... Done. Alright Client-side Engine, it seems the listener wants to add a notification with the text "Thanks for clicking".

Client-side Engine: Cool, I'll use the DOM here in the browser to add that notification to the page.

This, of course, is a simplification, but you get the idea.

Behind the scenes, Vaadin uses the HTTP session to store a component tree. This contains the state of the UI. Things such as which components form the view and what are their states (enabled/disabled, caption, value, etc). This offers a layer of security worth mentioning. Since the UI logic resides in the server, it's not exposed to attackers. Validations are performed on the server. For example, if a Button is disabled (using setEnabled(false)), this is not just a cosmetic feature in the browser—the server won't run any logic in click listeners added to a button that is not enabled, preventing attackers to use the developer tools in the browser to change the enabled state or to call the VaadinServlet to simulate a click event.

Is Vaadin Free To Use?

Yes. Vaadin is an open-source framework published under the Apache License 2.0. You don't have to buy anything to build full-blown web applications with it.

There are commercial components that boost productivity, but they are optional. For example, there's a visual designer and a CRUD component that help you to build views even faster. You can try these components for free before getting a subscription.

Is Vaadin a Replacement for JSP and JSF?

Yes. It could be used as a replacement for JSP, JSF, and even JavaScript frameworks like Angular. Many Vaadin customers have successfully migrated from these technologies to Vaadin.

Does Vaadin Support Spring and Jakarta EE?

Yes. Vaadin has official integrations with Spring and Jakarta EE (formerly Java EE). You can add Vaadin as a dependency when you create a new Spring Boot project using the Spring Initializr. For Jakarta EE, you can download a simple Hello, World example that uses Jakarta EE. At the time of writing this, only Jakarta EE version 8 is supported.

Who Uses Vaadin?

Many Fortune 500 companies use Vaadin as well as successful startups. This sums up to more than 200.000 developers worldwide and this number grows every week. The online community is active.

Follow the quick start tutorial and then try the in-depth course. 

Java (programming language) Vaadin Spring Framework Open source

Opinions expressed by DZone contributors are their own.

Related

  • Realistic Test Data Generation for Java Apps
  • Visually Designing Views for Java Web Apps
  • Open Source Tools Options in Web Application Development
  • How Spring and Hibernate Simplify Web and Database Management

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!