From 31225572d7f7986273179d71ac19fd0642530b76 Mon Sep 17 00:00:00 2001 From: Andy Damevin Date: Mon, 8 Apr 2024 17:19:58 +0200 Subject: [PATCH 1/4] Introduce Quarkus for the Web documentation --- docs/src/main/asciidoc/http-reference.adoc | 31 ++ .../asciidoc/images/web-bundle-transition.png | Bin 0 -> 105564 bytes docs/src/main/asciidoc/qute.adoc | 51 ++-- docs/src/main/asciidoc/web.adoc | 273 ++++++++++++++++++ 4 files changed, 330 insertions(+), 25 deletions(-) create mode 100644 docs/src/main/asciidoc/images/web-bundle-transition.png create mode 100644 docs/src/main/asciidoc/web.adoc diff --git a/docs/src/main/asciidoc/http-reference.adoc b/docs/src/main/asciidoc/http-reference.adoc index 6f90ed502831c..e23ac5ec0b3cd 100644 --- a/docs/src/main/asciidoc/http-reference.adoc +++ b/docs/src/main/asciidoc/http-reference.adoc @@ -23,6 +23,8 @@ In its absence, RESTEasy operates directly on Vert.x without involving Servlets. == Serving Static Resources +If you are looking to use Quarkus for your Web Application, you might want to check the xref:web.adoc[Quarkus for the Web] guide. + === From the application jar To serve static resources from the application jar, you must place them in the `META-INF/resources` directory of your application. This location @@ -30,6 +32,35 @@ was chosen as it is the standard location for resources in `jar` files as define Quarkus can be used without Servlet, following this convention allows existing code that places its resources in this location to function correctly. +[[from-mvnpm]] +=== From MVNPM + +If you are using https://mvnpm.org/[mvnpm.org], like the following JQuery one: + +[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"] +.pom.xml +---- + + org.mvnpm + jquery + 3.7.1 + +---- + +[source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"] +.build.gradle +---- +implementation("org.mvnpm:jquery:3.7.1") +---- + +You can use it in your html like this: +[source,html] +---- + +---- + + +[[from-webjars]] === From WebJars If you are using webjars, like the following JQuery one: diff --git a/docs/src/main/asciidoc/images/web-bundle-transition.png b/docs/src/main/asciidoc/images/web-bundle-transition.png new file mode 100644 index 0000000000000000000000000000000000000000..def6da4167c26b3661ee99e0e55c5525f2d1a2fe GIT binary patch literal 105564 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⪙N4h0 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 m&7D$on+NDrHRE=}j - io.quarkus - quarkus-rest-qute + io.quarkiverse.qute.web + quarkus-qute-web ---- + [source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"] .build.gradle ---- -implementation("io.quarkus:quarkus-rest-qute") +implementation("io.quarkiverse.qute.web:quarkus-qute-web") ---- -* or `quarkus-resteasy-qute` if you are using RESTEasy Classic: -+ -[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"] -.pom.xml ----- - - io.quarkus - quarkus-resteasy-qute - ----- -+ -[source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"] -.build.gradle +All files located in the `src/main/resources/templates` directory and its subdirectories are registered as templates. Templates are validated during startup and watched for changes in the development mode. + +Now, let's start with a Hello World html template: + +.src/main/resources/templates/pub/hello.html +[source] ---- -implementation("io.quarkus:quarkus-resteasy-qute") +

Hello {http:param('name', 'Quarkus')}!

<1> ---- +<1> `{http:param('name', 'Quarkus')}` is an expression that is evaluated when the template is rendered (Quarkus is the default value). -We'll start with a very simple template: +NOTE: Templates located in the `pub` directory are served via HTTP. Automatically, no controllers needed. For example, the template src/main/resource/templates/pub/foo.html will be served from the paths /foo and /foo.html by default. + +If your application is running, you can open your browser and hit: http://localhost:8080/hello?name=Martin + +For more information about Qute Web, see the https://docs.quarkiverse.io/quarkus-qute-web/dev/index.html[Qute Web guide]. + +[[hello-qute-rest]] +== Hello World with Jakarta REST + +If you want to use Qute in your Jakarta REST application, you still need to add the Qute Web extension first (see <>) and make sure you have the Quarkus REST (formerly RESTEasy Reactive) extension. + +Here is a very simple text template: .hello.txt [source] @@ -73,8 +76,6 @@ Hello {name}! <1> ---- <1> `{name}` is a value expression that is evaluated when the template is rendered. -NOTE: By default, all files located in the `src/main/resources/templates` directory and its subdirectories are registered as templates. Templates are validated during startup and watched for changes in the development mode. - Now let's inject the "compiled" template in the resource class. .HelloResource.java diff --git a/docs/src/main/asciidoc/web.adoc b/docs/src/main/asciidoc/web.adoc new file mode 100644 index 0000000000000..2402552005e2d --- /dev/null +++ b/docs/src/main/asciidoc/web.adoc @@ -0,0 +1,273 @@ +//// +This guide is maintained in the main Quarkus repository +and pull requests should be submitted there: +https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc +//// += Quarkus for the Web +include::_attributes.adoc[] +:categories: web +:summary: Learn more about creating all kinds of Web applications with Quarkus. +:numbered: +:sectnums: +:sectnumlevels: 3 +:topics: http,web,renarde,full-stack,qute,quinoa,web-bundler,mvc,ssr,nodejs,npm,javascript,css,jsf +:extensions: o.quarkiverse.qute.web:quarkus-qute-web,io.quarkiverse.renarde:quarkus-renarde,io.quarkiverse.web-bundler:quarkus-web-bundler,io.quarkiverse.quinoa:quarkus-quinoa + +Quarkus provides different extensions to create web applications, this document aims to provide directions on which extension to use for different use cases. + +== The basics + +=== Serving Static Resources + +Let's assume you have a Quarkus backend, and you want to serve static files. This is the most basic case, it is supported out of the box with all our Vert.x based extensions, you must place them in the `META-INF/resources` directory of your application. + +You can find more information in xref:http-reference#serving-static-resources[The HTTP Reference]. + +=== Serving Scripts, Styles, and web libraries + +However, if you want to insert scripts, styles, and libraries in your web pages, you have 3 options: + +a. Consume libraries from public CDNs such as cdnjs, unpkg, jsDelivr and more, or copy them to your `META-INF/resources` directory. +b. Use runtime web dependencies such as mvnpm.org or webjars, when added to your pom.xml or build.gradle they can be directly xref:http-reference#from-mvnpm[accessed from your web pages]. +c. Package your scripts (js, ts), styles (css, scss), and web dependencies together using a bundler (see xref:#bundling[below]). + +NOTE: *We recommend using a bundler for production* as it offers better control, consistency, security, and performance. The good news is that Quarkus makes it really easy and fast with the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Quarkus Web Bundler extension]. + +[[bundling]] +=== Bundling Scripts, Styles, and Libraries + +There are two ways to bundle your web assets: + +a. Using https://docs.quarkiverse.io/quarkus-web-bundler/dev/[the Quarkus Web Bundler extension], which is the recommended way. Without any configuration, it puts everything together in an instant, and follows good practices such as dead-code elimination, minification, caching, and more. +b. Using a custom bundler such as Webpack, Parcel, Rollup, etc. This can be easily integrated with Quarkus using the https://quarkiverse.github.io/quarkiverse-docs/quarkus-quinoa/dev/[Quarkus Quinoa extension]. + +image::web-bundle-transition.png[Web Bundle Transition] + +== Server-side rendering (SSR) + +For templating and server-side rendering with Quarkus, there are different engines available such as xref:qute.adoc[Qute] or https://docs.quarkiverse.io/quarkus-freemarker/dev/[Freemarker] and others. + +=== Qute Web + +Qute is designed specifically to meet the Quarkus needs, and help you deal with templates, snippets, and partials and render the data from your storage. It is inspired by the most famous template engines, it is fast, type-safe, works in native, and has a lot of nice features. + +To install Qute Web, follow xref:qute.adoc[the instructions]. + +Here is a simple example of a Qute template: + +.src/main/resources/templates/pub/index.html +[source,html] +---- + + + + + Qute Page + {#bundle /} <1> + + +

Hello {http:param('name', 'Quarkus')}

<2> +
    + {#for item in cdi:Product.items} <3> +
  • {item.name} {#if item.active}{item.price}{/if}
  • <4> + {/for} +
+ + +---- + +<1> With the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Web Bundler extension], this expression will be replaced by the bundled scripts and styles. +<2> You can directly use the HTTP parameters in your templates. +<3> This expression is validated. Try to change the expression to `cdi:Product.notHere` and the build should fail. +<4> If you install xref:ide-tooling.adoc[Quarkus IDEs plugins], you will have autocompletion, link to implementation and validation. + +=== Model-View-Controller (MVC) + +The MVC approach is also made very easy with Quarkus thanks to https://docs.quarkiverse.io/quarkus-renarde/dev/index.html[the Renarde extension], a Rails-like framework using Qute. + +Associated with the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Web Bundler extension], the road is open to build modern web applications for all you needs. Here is what a simple Renarde controller looks like: + +.src/main/java/rest/Todos.java +[source,java] +---- +package rest; + +[...] + +public class Todos extends Controller { + + @CheckedTemplate + static class Templates { + public static native TemplateInstance index(List todos); + } + + public TemplateInstance index() { + // list every todo + List todos = Todo.listAll(); + // render the index template + return Templates.index(todos); + } + + @POST + public void add(@NotBlank @RestForm String task) { + // check if there are validation issues + if(validationFailed()) { + // go back to the index page + index(); + } + // create a new Todo + Todo todo = new Todo(); + todo.task = task; + todo.persist(); + // send loving message + flash("message", "Task added"); + // redirect to index page + index(); + } + + @POST + public void delete(@RestPath Long id) { + // find the Todo + Todo todo = Todo.findById(id); + notFoundIfNull(todo); + // delete it + todo.delete(); + // send loving message + flash("message", "Task deleted"); + // redirect to index page + index(); + } + + @POST + public void done(@RestPath Long id) { + // find the Todo + Todo todo = Todo.findById(id); + notFoundIfNull(todo); + // switch its done state + todo.done = !todo.done; + if(todo.done) + todo.doneDate = new Date(); + // send loving message + flash("message", "Task updated"); + // redirect to index page + index(); + } +} +---- + +== Single Page Applications + +Quarkus provides very solid tools for creating or integrating Single Page Applications to Quarkus (React, Angular, Vue, …), here are 3 options: + +* https://quarkiverse.github.io/quarkiverse-docs/quarkus-quinoa/dev/[Quarkus Quinoa] bridges your npm-compatible web application and Quarkus for both dev and prod. No need to install Node.js or configure your framework, it will detect it and use sensible defaults. +* The https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Quarkus Web Bundler] is also a good approach, it is closer to the Java ecosystem and removes a lot of boilerplate and configuration, it is fast and efficient. For examples of such SPAs, see https://github.com/quarkusio/code.quarkus.io[code.quarkus.io] and https://github.com/mvnpm/mvnpm[mvnpm.org]. +* Your automation using the https://github.com/eirslett/frontend-maven-plugin[maven-frontend-plugin] or similar tools. + +== Full-stack microservices (Micro-frontends) + +Quarkus is an excellent choice for both full-stack web components and full-stack microservices aka Micro-frontends. By utilizing the Web Bundler or Quinoa, you can significantly reduce boilerplate code and manage multiple services efficiently without much configuration duplication. + +For example the https://github.com/quarkusio/search.quarkus.io[Guide search] on https://quarkus.io[quarkus.io] uses the Web Bundler to create a full-stack web-component. With Lit Element for the web-component and OpenSearch for the indexation it is a nice way to enhance the static web-site experience in a dynamic way. + +More content about this is coming soon... +// Blog article in prep: https://github.com/quarkusio/quarkusio.github.io/issues/1934 + +== Other ways + +We described Quarkus most common ways to create web applications but there are other options: + +* Vaadin Flow is a unique framework that lets you build web apps directly from Java code without writing HTML or JavaScript +* JavaServer Faces is a specification for building component-based web apps in Java. There are 3 extensions to help with JSF in Quarkus: MyFaces, OmniFaces, PrimeFaces. +// 👆 Blog article in prep https://github.com/quarkusio/quarkusio.github.io/issues/1935 +* Create xref:building-my-first-extension.adoc[a new extension] for your favorite web framework + +== Testing your web applications + +For testing web applications, https://docs.quarkiverse.io/quarkus-playwright/dev/[Quarkus Playwright] is very easy to use. You can create effective cross-browser end-to-end tests mimicking user interaction and making sure your web application is working as a whole. The big advantage is that it benefits from all dev-services and Quarkus mocking features. + +[source,java] +---- +@QuarkusTest +@WithPlaywright +public class WebApplicationTest { + + @InjectPlaywright + BrowserContext context; + + @TestHTTPResource("/") + URL index; + + @Test + public void testIndex() { + final Page page = context.newPage(); + Response response = page.navigate(index.toString()); + Assertions.assertEquals("OK", response.statusText()); + + page.waitForLoadState(); + + String title = page.title(); + Assertions.assertEquals("My Awesome App", title); + + // Make sure the web app is loaded and hits the backend + final ElementHandle quinoaEl = page.waitForSelector(".toast-body.received"); + String greeting = quinoaEl.innerText(); + Assertions.assertEquals("Hello from REST", greeting); + } +} +---- + +== Q&A + +=== Why is Quarkus a very good option for Web Applications compared to other frameworks? + +Quarkus is well known for its backend extensions ecosystem and developer experience, if you combine it with great extensions for frontend, then it is a perfect mix! All the testing and dev-mode features are now available for both frontend and backend. + +=== What are the advantages of SSR (Server Side Rendering) over SPA (Single Page App)? +Here are the benefits of performing rendering work on the server: + +*Data Retrieval:* Fetching data on the server, closer to the data source. This enhances performance by reducing the time needed to retrieve data for rendering and minimizes client requests. + +*Enhanced Security:* Storage of sensitive data and logic is happening on the server, such as tokens and API keys, without exposing them to client-side risks. + +*Caching Efficiency:* Server-side rendering allows for result caching, which can be reused across users and subsequent requests. This optimizes performance and lowers costs by reducing rendering and data fetching per request. + +*Improved Initial Page Load and First Contentful Paint (FCP):* Generating HTML on the server enables users to view the page immediately, eliminating the need to wait for client-side JavaScript to download, parse, and execute for rendering. + +*Search Engine Optimization (SEO) and Social Media Shareability:* The rendered HTML aids search engine indexing and social network previews, enhancing discoverability and shareability. + + +=== I am hesitating between Quinoa and the Web Bundler, how should I make my decision? + +You have to think that the bundled output is essentially the same with both solutions. Also, switching from one to the other is not a big deal, the choice is about the developer experience and finding the best fit for your team. + +Some guidelines: + +*Go for Quinoa:* + +* You have an existing frontend configured with a npm-compatible build tool, Quinoa is the most direct option. +* You have a dedicated frontend team familiar with tools such as NPM, Yarn and other for building Single Page Apps. +* If you want to write Javascript unit tests (such as Jest, Jasmine, ..), it is not possible with the Web Bundler. However, you could publish a components library on NPM and consume it from the Web Bundler. +* If you use very specific bundling options or specific tools in your build process +* If you love package.json and configurations tweaking + +*Go for Web Bundler:* + +* For simple web applications, the Web Bundler is the easiest and fastest way to get started +* If you prefer to stay close to the Maven/Gradle ecosystem +(Node.js is not needed), it uses an extremely fast bundler for the web (esbuild) +* If you want to reduce boilerplate and configuration + + +=== How do I scale a Quarkus Web Application? + +Serving a few static pages and scripts from an existing Quarkus backend is not a big overhead, so scaling the full app is usually the simplest option. +You could also split it in two services: one for the backend and one for the frontend. However, in most cases, this approach wouldn’t yield substantial benefits compared to the initial method. + +If your application involves a substantial number of static resources, consider using a CDN. Both the Web-Bundler and Quinoa can be configured to work seamlessly with a CDN, providing improved performance and distribution of assets. + +It would be nice to have a blog article and benchmark about this topic, please open an issue if you are interested in writing it. + + + + + From ef0592b95282e170890f815fe20f3ce9d3e6c5d7 Mon Sep 17 00:00:00 2001 From: Andy Damevin Date: Tue, 9 Apr 2024 14:59:30 +0200 Subject: [PATCH 2/4] Apply suggestions from code review Co-authored-by: Guillaume Smet --- docs/src/main/asciidoc/http-reference.adoc | 19 +++++----- docs/src/main/asciidoc/web.adoc | 41 +++++++++++----------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/src/main/asciidoc/http-reference.adoc b/docs/src/main/asciidoc/http-reference.adoc index e23ac5ec0b3cd..5201ebbc4df5e 100644 --- a/docs/src/main/asciidoc/http-reference.adoc +++ b/docs/src/main/asciidoc/http-reference.adoc @@ -21,9 +21,9 @@ For Servlet support, Quarkus employs a customized Undertow version that operates When Undertow is present, RESTEasy functions as a Servlet filter. In its absence, RESTEasy operates directly on Vert.x without involving Servlets. -== Serving Static Resources +== Serving static resources -If you are looking to use Quarkus for your Web Application, you might want to check the xref:web.adoc[Quarkus for the Web] guide. +If you are looking to use Quarkus for a web application, look at the xref:web.adoc[Quarkus for the Web] guide. === From the application jar @@ -33,30 +33,31 @@ Quarkus can be used without Servlet, following this convention allows existing c location to function correctly. [[from-mvnpm]] -=== From MVNPM +=== From mvnpm -If you are using https://mvnpm.org/[mvnpm.org], like the following JQuery one: +If you are using https://mvnpm.org/[mvnpm], as for the following JQuery dependency: [source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"] .pom.xml ---- org.mvnpm - jquery - 3.7.1 + bootstrap + 5.3.3 + runtime ---- [source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"] .build.gradle ---- -implementation("org.mvnpm:jquery:3.7.1") +runtimeOnly("org.mvnpm:bootstrap:5.3.3") ---- -You can use it in your html like this: +You can import it in your HTML like this: [source,html] ---- - + ---- diff --git a/docs/src/main/asciidoc/web.adoc b/docs/src/main/asciidoc/web.adoc index 2402552005e2d..c3ecc9b68ed2a 100644 --- a/docs/src/main/asciidoc/web.adoc +++ b/docs/src/main/asciidoc/web.adoc @@ -10,20 +10,20 @@ include::_attributes.adoc[] :numbered: :sectnums: :sectnumlevels: 3 -:topics: http,web,renarde,full-stack,qute,quinoa,web-bundler,mvc,ssr,nodejs,npm,javascript,css,jsf -:extensions: o.quarkiverse.qute.web:quarkus-qute-web,io.quarkiverse.renarde:quarkus-renarde,io.quarkiverse.web-bundler:quarkus-web-bundler,io.quarkiverse.quinoa:quarkus-quinoa +:topics: http,web,renarde,full-stack,qute,quinoa,web-bundler,mvc,ssr,nodejs,npm,javascript,css,jsf,faces +:extensions: io.quarkiverse.qute.web:quarkus-qute-web,io.quarkiverse.renarde:quarkus-renarde,io.quarkiverse.web-bundler:quarkus-web-bundler,io.quarkiverse.quinoa:quarkus-quinoa -Quarkus provides different extensions to create web applications, this document aims to provide directions on which extension to use for different use cases. +Quarkus provides several extensions to create web applications, this document aims to provide directions on which extension to use for different use cases. == The basics -=== Serving Static Resources +=== Serving static resources Let's assume you have a Quarkus backend, and you want to serve static files. This is the most basic case, it is supported out of the box with all our Vert.x based extensions, you must place them in the `META-INF/resources` directory of your application. -You can find more information in xref:http-reference#serving-static-resources[The HTTP Reference]. +You can find more information in the xref:http-reference#serving-static-resources[HTTP reference guide]. -=== Serving Scripts, Styles, and web libraries +=== Serving scripts, styles, and web libraries However, if you want to insert scripts, styles, and libraries in your web pages, you have 3 options: @@ -34,7 +34,7 @@ c. Package your scripts (js, ts), styles (css, scss), and web dependencies toget NOTE: *We recommend using a bundler for production* as it offers better control, consistency, security, and performance. The good news is that Quarkus makes it really easy and fast with the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Quarkus Web Bundler extension]. [[bundling]] -=== Bundling Scripts, Styles, and Libraries +=== Bundling scripts, styles, and libraries There are two ways to bundle your web assets: @@ -78,14 +78,14 @@ Here is a simple example of a Qute template: <1> With the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Web Bundler extension], this expression will be replaced by the bundled scripts and styles. <2> You can directly use the HTTP parameters in your templates. -<3> This expression is validated. Try to change the expression to `cdi:Product.notHere` and the build should fail. +<3> This expression is validated. Try to change the expression to `cdi:Product.notHere` and the build will fail. <4> If you install xref:ide-tooling.adoc[Quarkus IDEs plugins], you will have autocompletion, link to implementation and validation. === Model-View-Controller (MVC) The MVC approach is also made very easy with Quarkus thanks to https://docs.quarkiverse.io/quarkus-renarde/dev/index.html[the Renarde extension], a Rails-like framework using Qute. -Associated with the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Web Bundler extension], the road is open to build modern web applications for all you needs. Here is what a simple Renarde controller looks like: +Associated with the https://docs.quarkiverse.io/quarkus-web-bundler/dev/[Web Bundler extension], the road is open to build modern web applications for all your needs. Here is what a simple Renarde controller looks like: .src/main/java/rest/Todos.java [source,java] @@ -167,7 +167,7 @@ Quarkus provides very solid tools for creating or integrating Single Page Applic Quarkus is an excellent choice for both full-stack web components and full-stack microservices aka Micro-frontends. By utilizing the Web Bundler or Quinoa, you can significantly reduce boilerplate code and manage multiple services efficiently without much configuration duplication. -For example the https://github.com/quarkusio/search.quarkus.io[Guide search] on https://quarkus.io[quarkus.io] uses the Web Bundler to create a full-stack web-component. With Lit Element for the web-component and OpenSearch for the indexation it is a nice way to enhance the static web-site experience in a dynamic way. +For example the https://github.com/quarkusio/search.quarkus.io[Quarkus documentation search engine] on https://quarkus.io[quarkus.io] uses the Web Bundler to create a full-stack web-component. With Lit Element for the web-component and OpenSearch for the indexation it is a nice way to enhance the static web-site experience in a dynamic way. More content about this is coming soon... // Blog article in prep: https://github.com/quarkusio/quarkusio.github.io/issues/1934 @@ -176,10 +176,9 @@ More content about this is coming soon... We described Quarkus most common ways to create web applications but there are other options: -* Vaadin Flow is a unique framework that lets you build web apps directly from Java code without writing HTML or JavaScript -* JavaServer Faces is a specification for building component-based web apps in Java. There are 3 extensions to help with JSF in Quarkus: MyFaces, OmniFaces, PrimeFaces. -// 👆 Blog article in prep https://github.com/quarkusio/quarkusio.github.io/issues/1935 -* Create xref:building-my-first-extension.adoc[a new extension] for your favorite web framework +* https://quarkus.io/extensions/com.vaadin/vaadin-quarkus-extension/[Vaadin Flow extension], for this unique framework that lets you build web apps directly from Java code without writing HTML or JavaScript. +* JavaServer Faces (jsf) is a specification for building component-based web apps in Java. It available in Quarkus, the https://quarkus.io/extensions/org.apache.myfaces.core.extensions.quarkus/myfaces-quarkus/[MyFaces] extension is an implementation of Faces for Quarkus. https://quarkus.io/extensions/io.quarkiverse.primefaces/quarkus-primefaces/[PrimeFaces] is a Faces components suite, and https://quarkus.io/extensions/io.quarkiverse.omnifaces/quarkus-omnifaces/[OmniFaces], a utility library. More information is available in https://www.melloware.com/quarkus-faces-using-jsf-with-quarkus/[this blog post]. +* Create xref:building-my-first-extension.adoc[a new extension] for your favorite web framework. == Testing your web applications @@ -246,16 +245,16 @@ Some guidelines: * You have an existing frontend configured with a npm-compatible build tool, Quinoa is the most direct option. * You have a dedicated frontend team familiar with tools such as NPM, Yarn and other for building Single Page Apps. -* If you want to write Javascript unit tests (such as Jest, Jasmine, ..), it is not possible with the Web Bundler. However, you could publish a components library on NPM and consume it from the Web Bundler. -* If you use very specific bundling options or specific tools in your build process -* If you love package.json and configurations tweaking +* You want to write Javascript unit tests (such as Jest, Jasmine, ..), it is not possible with the Web Bundler. However, you could publish a components library on NPM and consume it from the Web Bundler. +* You use very specific bundling options or specific tools in your build process +* You love package.json and configurations tweaking *Go for Web Bundler:* * For simple web applications, the Web Bundler is the easiest and fastest way to get started -* If you prefer to stay close to the Maven/Gradle ecosystem +* You prefer to stay close to the Maven/Gradle ecosystem (Node.js is not needed), it uses an extremely fast bundler for the web (esbuild) -* If you want to reduce boilerplate and configuration +* You want to reduce boilerplate and configuration === How do I scale a Quarkus Web Application? @@ -263,9 +262,9 @@ Some guidelines: Serving a few static pages and scripts from an existing Quarkus backend is not a big overhead, so scaling the full app is usually the simplest option. You could also split it in two services: one for the backend and one for the frontend. However, in most cases, this approach wouldn’t yield substantial benefits compared to the initial method. -If your application involves a substantial number of static resources, consider using a CDN. Both the Web-Bundler and Quinoa can be configured to work seamlessly with a CDN, providing improved performance and distribution of assets. +If your application involves a substantial number of static resources, consider using a CDN. Both the Web Bundler and Quinoa can be configured to work seamlessly with a CDN, providing improved performance and distribution of assets. -It would be nice to have a blog article and benchmark about this topic, please open an issue if you are interested in writing it. +// It would be nice to have a blog article and benchmark about this topic. From c80d8c52be4755e81e334e45b02ecfd08fec4b98 Mon Sep 17 00:00:00 2001 From: Andy Damevin Date: Mon, 15 Apr 2024 11:06:07 +0200 Subject: [PATCH 3/4] Make Qute doc more intuitive --- docs/src/main/asciidoc/qute.adoc | 42 ++++++++++++++++++++++++-------- docs/src/main/asciidoc/web.adoc | 2 +- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/docs/src/main/asciidoc/qute.adoc b/docs/src/main/asciidoc/qute.adoc index 8343262a59aae..d62aa854b9714 100644 --- a/docs/src/main/asciidoc/qute.adoc +++ b/docs/src/main/asciidoc/qute.adoc @@ -26,10 +26,14 @@ Clone the Git repository: `git clone {quickstarts-clone-url}`, or download an {q The solution is located in the `qute-quickstart` link:{quickstarts-tree-url}/qute-quickstart[directory]. -[[hello-qute-web]] -== Hello World with Qute Web +[[serving-templates]] +== Serving Qute templates via http + +If you want to serve your templates via http: + +1. The Qute Web extension allows you to directly serve via http templates located in `src/main/resource/templates/pub/`. In that case you don't need any Java code to "plug" the template, for example, the template `src/main/resource/templates/pub/foo.html` will be served from the paths `/foo` and `/foo.html` by default. +2. For finer control, you can combine it with Quarkus REST or Quarkus RESTEasy to control how your template will be served. All files located in the `src/main/resources/templates` directory and its subdirectories are registered as templates and can be injected in a REST resource. -If you want to use Qute in your Quarkus Web application, add the Qute Web extension first: [source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"] .pom.xml ---- @@ -38,16 +42,19 @@ If you want to use Qute in your Quarkus Web application, add the Qute Web extens quarkus-qute-web ---- -+ + [source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"] .build.gradle ---- implementation("io.quarkiverse.qute.web:quarkus-qute-web") ---- -All files located in the `src/main/resources/templates` directory and its subdirectories are registered as templates. Templates are validated during startup and watched for changes in the development mode. +NOTE: The Qute Web extension is still using the quarkiverse group-id, it is part of the Quarkus platform (so it's is included in the bom), we are working on moving it to Quarkus Core. + +[[hello-qute-web]] +=== Serving Hello World with Qute -Now, let's start with a Hello World html template: +Let's start with a Hello World template: .src/main/resources/templates/pub/hello.html [source] @@ -60,14 +67,29 @@ NOTE: Templates located in the `pub` directory are served via HTTP. Automaticall If your application is running, you can open your browser and hit: http://localhost:8080/hello?name=Martin -For more information about Qute Web, see the https://docs.quarkiverse.io/quarkus-qute-web/dev/index.html[Qute Web guide]. +For more information about Qute Web options, see the https://docs.quarkiverse.io/quarkus-qute-web/dev/index.html[Qute Web guide]. [[hello-qute-rest]] -== Hello World with Jakarta REST +=== Hello Qute and REST + +For finer control, you can combine Qute Web with Quarkus REST or Quarkus RESTEasy to control how your template will be served -If you want to use Qute in your Jakarta REST application, you still need to add the Qute Web extension first (see <>) and make sure you have the Quarkus REST (formerly RESTEasy Reactive) extension. +[source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"] +.pom.xml +---- + + io.quarkus + quarkus-rest + +---- + +[source,gradle,role="secondary asciidoc-tabs-target-sync-gradle"] +.build.gradle +---- +implementation("io.quarkus:quarkus-rest") +---- -Here is a very simple text template: +A very simple text template: .hello.txt [source] diff --git a/docs/src/main/asciidoc/web.adoc b/docs/src/main/asciidoc/web.adoc index c3ecc9b68ed2a..1f58a62ef29fb 100644 --- a/docs/src/main/asciidoc/web.adoc +++ b/docs/src/main/asciidoc/web.adoc @@ -51,7 +51,7 @@ For templating and server-side rendering with Quarkus, there are different engin Qute is designed specifically to meet the Quarkus needs, and help you deal with templates, snippets, and partials and render the data from your storage. It is inspired by the most famous template engines, it is fast, type-safe, works in native, and has a lot of nice features. -To install Qute Web, follow xref:qute.adoc[the instructions]. +To install Qute Web, follow xref:qute.adoc#serving-templates[the instructions]. Here is a simple example of a Qute template: From 6979a5a073de7607179156002c998aa829547dab Mon Sep 17 00:00:00 2001 From: Andy Damevin Date: Mon, 15 Apr 2024 14:36:29 +0200 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Max Rydahl Andersen --- docs/src/main/asciidoc/qute.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/main/asciidoc/qute.adoc b/docs/src/main/asciidoc/qute.adoc index d62aa854b9714..1a20c1d74f0fa 100644 --- a/docs/src/main/asciidoc/qute.adoc +++ b/docs/src/main/asciidoc/qute.adoc @@ -32,7 +32,7 @@ The solution is located in the `qute-quickstart` link:{quickstarts-tree-url}/qut If you want to serve your templates via http: 1. The Qute Web extension allows you to directly serve via http templates located in `src/main/resource/templates/pub/`. In that case you don't need any Java code to "plug" the template, for example, the template `src/main/resource/templates/pub/foo.html` will be served from the paths `/foo` and `/foo.html` by default. -2. For finer control, you can combine it with Quarkus REST or Quarkus RESTEasy to control how your template will be served. All files located in the `src/main/resources/templates` directory and its subdirectories are registered as templates and can be injected in a REST resource. +2. For finer control, you can combine it with Quarkus REST to control how your template will be served. All files located in the `src/main/resources/templates` directory and its subdirectories are registered as templates and can be injected in a REST resource. [source,xml,role="primary asciidoc-tabs-target-sync-cli asciidoc-tabs-target-sync-maven"] .pom.xml @@ -49,7 +49,7 @@ If you want to serve your templates via http: implementation("io.quarkiverse.qute.web:quarkus-qute-web") ---- -NOTE: The Qute Web extension is still using the quarkiverse group-id, it is part of the Quarkus platform (so it's is included in the bom), we are working on moving it to Quarkus Core. +NOTE: The Qute Web extension while using the quarkiverse group-id, it is still part of the Quarkus platform. [[hello-qute-web]] === Serving Hello World with Qute