├── .gitignore ├── src └── main │ ├── webapp │ ├── index.jsp │ └── WEB-INF │ │ ├── web.xml │ │ └── applicationContext.xml │ ├── assembly │ ├── bin │ │ ├── start.bat │ │ └── start.sh │ └── assembly.xml │ └── java │ └── com │ └── crazypig │ └── demo │ └── embededwebapp │ ├── controller │ └── IndexController.java │ └── Launcher.java ├── README.md └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .settings 2 | .project 3 | .classpath 4 | target/* 5 | /target/ 6 | -------------------------------------------------------------------------------- /src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Hello World!

4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Introduction : 2 | 3 | A demo jetty embeded web app project 4 | 5 | ## Usage : 6 | 7 | ``` 8 | mvn clean package 9 | ``` 10 | 11 | On Linux : 12 | 13 | ``` 14 | cd target 15 | unzip jetty-embeded-webapp-demo-standalone.zip 16 | cd jetty-embeded-webapp-demo/bin 17 | ./start.sh 18 | ``` 19 | 20 | On Windows : 21 | 22 | follow the same steps but finally run `start.bat` 23 | -------------------------------------------------------------------------------- /src/main/assembly/bin/start.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | set "JAVA_CMD=%JAVA_HOME%/bin/java" 3 | if "%JAVA_HOME%" == "" goto noJavaHome 4 | if exist "%JAVA_HOME%\bin\java.exe" goto mainEntry 5 | :noJavaHome 6 | echo --------------------------------------------------- 7 | echo WARN: JAVA_HOME environment variable is not set. 8 | echo --------------------------------------------------- 9 | set "JAVA_CMD=java" 10 | :mainEntry 11 | @echo on 12 | "%JAVA_CMD%" -jar ..\jetty-embeded-webapp-demo.war -------------------------------------------------------------------------------- /src/main/assembly/bin/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #check JAVA_HOME & java 4 | noJavaHome=false 5 | if [ -z "$JAVA_HOME" ] ; then 6 | noJavaHome=true 7 | fi 8 | if [ ! -e "$JAVA_HOME/bin/java" ] ; then 9 | noJavaHome=true 10 | fi 11 | if $noJavaHome ; then 12 | echo 13 | echo "Error: JAVA_HOME environment variable is not set." 14 | echo 15 | exit 1 16 | fi 17 | RUN_CMD="\"$JAVA_HOME/bin/java\"" 18 | RUN_CMD="$RUN_CMD -jar ../jetty-embeded-webapp-demo.war" 19 | #echo $RUN_CMD 20 | eval $RUN_CMD 21 | -------------------------------------------------------------------------------- /src/main/java/com/crazypig/demo/embededwebapp/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.crazypig.demo.embededwebapp.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.servlet.ModelAndView; 6 | 7 | @Controller 8 | public class IndexController { 9 | 10 | @RequestMapping({"/", "/index"}) 11 | public ModelAndView index() { 12 | 13 | return new ModelAndView("index"); 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | jetty embeded webapp demo 3 | 4 | 5 | index 6 | 7 | 8 | 9 | springmvc 10 | org.springframework.web.servlet.DispatcherServlet 11 | 12 | contextConfigLocation 13 | WEB-INF/applicationContext.xml 14 | 15 | 1 16 | 17 | 18 | 19 | springmvc 20 | /index 21 | 22 | 23 | springmvc 24 | / 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/main/assembly/assembly.xml: -------------------------------------------------------------------------------- 1 | 5 | standalone 6 | 7 | zip 8 | 9 | 10 | 11 | 12 | 13 | 14 | target/${project.artifactId}.war 15 | / 16 | 17 | 18 | 19 | 20 | src/main/resources 21 | /conf 22 | 24 | 25 | 26 | src/main/assembly/bin 27 | /bin 28 | 29 | start.sh 30 | 31 | 0755 32 | unix 33 | 34 | 35 | src/main/assembly/bin 36 | /bin 37 | 38 | start.bat 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/main/java/com/crazypig/demo/embededwebapp/Launcher.java: -------------------------------------------------------------------------------- 1 | package com.crazypig.demo.embededwebapp; 2 | 3 | import java.io.File; 4 | import java.net.URL; 5 | import java.security.ProtectionDomain; 6 | 7 | import org.eclipse.jetty.server.Connector; 8 | import org.eclipse.jetty.server.Server; 9 | import org.eclipse.jetty.server.ServerConnector; 10 | import org.eclipse.jetty.webapp.WebAppContext; 11 | 12 | /** 13 | * 14 | * web应用启动器 15 | * 16 | * @author CrazyPig 17 | * @since 2016-08-03 18 | * 19 | */ 20 | public class Launcher { 21 | 22 | public static final int DEFAULT_PORT = 8080; 23 | public static final String DEFAULT_CONTEXT_PATH = "/jetty-embeded-webapp"; 24 | private static final String DEFAULT_APP_CONTEXT_PATH = "src/main/webapp"; 25 | 26 | 27 | public static void main(String[] args) { 28 | 29 | runJettyServer(DEFAULT_PORT, DEFAULT_CONTEXT_PATH); 30 | 31 | } 32 | 33 | public static void runJettyServer(int port, String contextPath) { 34 | 35 | Server server = createJettyServer(port, contextPath); 36 | try { 37 | server.start(); 38 | server.join(); 39 | } catch (Exception e) { 40 | e.printStackTrace(); 41 | } finally { 42 | try { 43 | server.stop(); 44 | } catch (Exception e) { 45 | e.printStackTrace(); 46 | } 47 | } 48 | 49 | } 50 | 51 | public static Server createJettyServer(int port, String contextPath) { 52 | 53 | Server server = new Server(port); 54 | server.setStopAtShutdown(true); 55 | 56 | ProtectionDomain protectionDomain = Launcher.class.getProtectionDomain(); 57 | URL location = protectionDomain.getCodeSource().getLocation(); 58 | String warFile = location.toExternalForm(); 59 | 60 | WebAppContext context = new WebAppContext(warFile, contextPath); 61 | context.setServer(server); 62 | 63 | // 设置work dir,war包将解压到该目录,jsp编译后的文件也将放入其中。 64 | String currentDir = new File(location.getPath()).getParent(); 65 | File workDir = new File(currentDir, "work"); 66 | context.setTempDirectory(workDir); 67 | 68 | server.setHandler(context); 69 | return server; 70 | 71 | } 72 | 73 | public static Server createDevServer(int port, String contextPath) { 74 | 75 | Server server = new Server(); 76 | server.setStopAtShutdown(true); 77 | 78 | ServerConnector connector = new ServerConnector(server); 79 | // 设置服务端口 80 | connector.setPort(port); 81 | connector.setReuseAddress(false); 82 | server.setConnectors(new Connector[] {connector}); 83 | 84 | // 设置web资源根路径以及访问web的根路径 85 | WebAppContext webAppCtx = new WebAppContext(DEFAULT_APP_CONTEXT_PATH, contextPath); 86 | webAppCtx.setDescriptor(DEFAULT_APP_CONTEXT_PATH + "/WEB-INF/web.xml"); 87 | webAppCtx.setResourceBase(DEFAULT_APP_CONTEXT_PATH); 88 | webAppCtx.setClassLoader(Thread.currentThread().getContextClassLoader()); 89 | server.setHandler(webAppCtx); 90 | 91 | return server; 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 21 | 23 | 25 | 26 | 27 | 29 | 30 | 31 | text/html; charset=UTF-8 32 | application/json;charset=UTF-8 33 | 34 | 35 | 36 | 38 | 39 | 40 | text/html; charset=UTF-8 41 | application/json;charset=UTF-8 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 54 | 55 | 56 | 58 | 59 | 60 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.crazypig 5 | jetty-embeded-webapp-demo 6 | war 7 | 0.0.1-SNAPSHOT 8 | jetty-embeded-webapp-demo Maven Webapp 9 | http://maven.apache.org 10 | 11 | 12 | 13 | UTF-8 14 | 9.2.10.v20150310 15 | 4.1.6.RELEASE 16 | 2.8.1 17 | 1.2.17 18 | 19 | 20 | 21 | 22 | 23 | 24 | org.eclipse.jetty 25 | jetty-server 26 | ${jetty.version} 27 | 28 | 29 | 30 | 31 | org.eclipse.jetty 32 | jetty-webapp 33 | ${jetty.version} 34 | 35 | 36 | 37 | org.eclipse.jetty 38 | jetty-jsp 39 | ${jetty.version} 40 | 41 | 42 | 43 | 44 | 45 | org.springframework 46 | spring-beans 47 | ${spring.version} 48 | 49 | 50 | 51 | org.springframework 52 | spring-context 53 | ${spring.version} 54 | 55 | 56 | 57 | org.springframework 58 | spring-webmvc 59 | ${spring.version} 60 | 61 | 62 | 63 | org.springframework 64 | spring-web 65 | ${spring.version} 66 | 67 | 68 | 69 | 70 | 71 | com.fasterxml.jackson.core 72 | jackson-core 73 | ${jackson.version} 74 | 75 | 76 | 77 | com.fasterxml.jackson.core 78 | jackson-annotations 79 | ${jackson.version} 80 | 81 | 82 | 83 | com.fasterxml.jackson.core 84 | jackson-databind 85 | ${jackson.version} 86 | 87 | 88 | 89 | junit 90 | junit 91 | 3.8.1 92 | test 93 | 94 | 95 | 96 | 97 | 98 | jetty-embeded-webapp-demo 99 | 100 | 101 | org.apache.maven.plugins 102 | maven-compiler-plugin 103 | 2.5.1 104 | 105 | 1.7 106 | 1.7 107 | UTF-8 108 | 109 | 110 | 111 | 112 | org.apache.maven.plugins 113 | maven-antrun-plugin 114 | 1.7 115 | 116 | 117 | main-class-placement 118 | prepare-package 119 | 120 | 121 | 123 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | run 132 | 133 | 134 | 135 | 136 | 137 | 138 | org.apache.maven.plugins 139 | maven-shade-plugin 140 | 2.1 141 | 142 | 143 | package 144 | 145 | shade 146 | 147 | 148 | false 149 | 150 | 152 | com.crazypig.demo.embededwebapp.Launcher 153 | 154 | 155 | 156 | 157 | org.eclipse.jetty:* 158 | *:javax.servlet* 159 | org.glassfish:javax.el* 160 | 161 | 162 | 163 | 164 | *:* 165 | 166 | META-INF/*.SF 167 | META-INF/*.DSA 168 | META-INF/*.RSA 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | maven-assembly-plugin 178 | 179 | 180 | assembly 181 | package 182 | 183 | single 184 | 185 | 186 | 187 | src/main/assembly/assembly.xml 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | --------------------------------------------------------------------------------