====== Setting up a simple Java Jetty Server ====== Java web programming includes a servlet architecture for making server applications in java and having the nitty gritty of managing the web server part of the application to a web server that functions as a servlet container. One popular embedded server for Java projects is [[https://www.eclipse.org/jetty/ |Jetty]]. You can create a java server project that embeds Jetty and run it on [[metaarray|the MetaArray]] on your [[meta_port_allocation|assigned port]]. Below is a very simple example on how to get started with that. It doesn't use any IDE, so it's a bit manual. You can find more detailed directions at the external project links below. There are lots of different java web frameworks that center around using the [[https://www.eclipse.org/jetty/ |Jetty]] server, including a few microframeworks. This page is going to go through an example using [[https://javalin.io | Javalin]], which is a microframework that has a lighter footprint and is easier to configure than Spring Boot and other more mainline frameworks. It has a simple tutorial that was used and modified a bit here to show you how to set up a Java Jetty server. To make things quick to set up, we'll use Maven (''mvn''). ===== Create Project Space ===== First, let's create your maven-style project folder. - Go to an appropriate project folder that you want to work in - make the java source folder in the maven style * ''mkdir -p src/main/java/myproject'' ===== Create Project Object Model ===== Next, let's set up the POM file, which maven will use to pull all the dependencies for our framework and let us build it. - Create a new file in "myproject", call it ''pom.xml'' * ''nano pom.xml'' - Paste in the following: 4.0.0 myproject.helloWorld helloWorld 1.0.0-SNAPSHOT UTF-8 1.8 io.javalin javalin 4.3.0 org.slf4j slf4j-simple 1.7.31 maven-compiler-plugin 3.6.0 1.8 1.8 -Xlint:unchecked -Xlint:all -Xlint:-serial org.apache.maven.plugins maven-surefire-plugin 2.19.1 src/main/resources/logging.properties org.codehaus.mojo exec-maven-plugin 3.0.0 java myproject.helloWorld - Save the file ===== Add Your Java Code ===== - Using an editor again, create your hello world class file, in its proper folder for maven: - ''nano src/main/java/myproject/helloWorld.java'' - paste in the following: package myproject; import io.javalin.Javalin; public class helloWorld { private static int MY_JETTY_PORT= 8388; //replace 8388 with your port as explained in the wiki public static void main(String[] args){ Javalin app = Javalin.create().start(MY_JETTY_PORT); app.get("/", ctx -> ctx.result("Hello World, this is my Java App on Jetty!")); } } - move the cursor up and change the value of MY_JETTY_PORT to be your [[meta_port_allocation|Port on the MetaArray]] (that is, replace 8388 with your UID number). - save the file ===== Build Your Project ===== Here we go. Back at the command line, type mvn package You will see a bunch of log info scroll by, but at the end, you should see something like this: [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.537 s [INFO] Finished at: 2022-01-20T21:04:04Z [INFO] ------------------------------------------------------------------------ ===== Run Your Server ===== Now, let's run the server. We've set up an "exec goal" in the POM so we can run the resulting project from maven, like so: mvn exec:java You should see something like this (hopefully any warnings you get are ignorable): WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release [INFO] Scanning for projects... [INFO] [INFO] ------------------< myproject.helloWorld:helloWorld >------------------- [INFO] Building helloWorld 1.0.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ helloWorld --- [myproject.helloWorld.main()] INFO io.javalin.Javalin - __ __ _ __ __ / /____ _ _ __ ____ _ / /(_)____ / // / __ / // __ `/| | / // __ `// // // __ \ / // /_ / /_/ // /_/ / | |/ // /_/ // // // / / / /__ __/ \____/ \__,_/ |___/ \__,_//_//_//_/ /_/ /_/ https://javalin.io/documentation [myproject.helloWorld.main()] INFO org.eclipse.jetty.util.log - Logging initialized @2496ms to org.eclipse.jetty.util.log.Slf4jLog [myproject.helloWorld.main()] INFO io.javalin.Javalin - Starting Javalin ... [myproject.helloWorld.main()] INFO io.javalin.Javalin - You are running Javalin 4.3.0 (released January 13, 2022). [myproject.helloWorld.main()] INFO io.javalin.Javalin - Listening on http://localhost:32056/ [myproject.helloWorld.main()] INFO io.javalin.Javalin - Javalin started in 263ms \o/ If you get here, then your server is running! Now try it out: point your web browser to //http://yourusername.yourSDFmetarraydomain.org:yourMetaArrayPort // and see it if works! Press ''ctl-c'' to stop the server. The rest is up to your imagination!