====== 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.0myproject.helloWorldhelloWorld1.0.0-SNAPSHOTUTF-81.8io.javalinjavalin4.3.0org.slf4jslf4j-simple1.7.31maven-compiler-plugin3.6.01.8-Xlint:unchecked-Xlint:all-Xlint:-serialorg.apache.maven.pluginsmaven-surefire-plugin2.19.1src/main/resources/logging.propertiesorg.codehaus.mojoexec-maven-plugin3.0.0javamyproject.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!