嵌入式Jetty开发之代码启动Jetty
来源:互联网 发布:java 多线程 回调函数 编辑:程序博客网 时间:2024/06/14 09:56
,# 嵌入式Jetty开发之代码启动Jetty
目前正在做嵌入式Jetty开发,把遇到的问题写出来,希望可以帮到有同样问题的小伙伴,也方便自己下次遇到同样问题时查看
背景:之前项目用Tomcat,然后老大说新项目采用Jetty代码启动,让我先进行调研和使用
最开始看Jetty的官方文档,配合某位大牛的中文翻译文档,然后遇到各种问题各种查网上的资料
最后修改主要这两个文件:
- POM配置文件
- 主类代码
POM配置文件
之前加了太多相关的配置文件,然后生产模式war包运行各种出错,然后删掉了一些依赖就好了,想必是画蛇添足,造成了类的冲突,这是修改后的文件:
<properties> <spring.version>4.3.6.RELEASE</spring.version> <jetty.version>9.3.21.v20170918</jetty.version> </properties> <dependencies> <!-- jetty --> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>${jetty.version}</version> <scope>provided</scope> <!-- 开发模式去掉这个 --> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>${jetty.version}</version> <scope>provided</scope><!-- 开发模式去掉这个 --> </dependency> </dependencies> <build> <finalName>文件名称</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <archive> <manifest> <mainClass>com.my.example.JettyLauncher</mainClass> </manifest> </archive> <warName>${project.artifactId}-standalone</warName> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>main-class-placement</id> <phase>prepare-package</phase> <configuration> <target> <move todir="${project.build.directory}/${project.artifactId}/"> <fileset dir="${project.build.directory}/classes/"> <include name="**/*/JettyLauncher.class" /> </fileset> </move> </target> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.5.1</version> <executions> <execution> <id>jetty-classpath</id> <phase>prepare-package</phase> <goals> <goal>unpack-dependencies</goal> </goals> <configuration> <includeGroupIds>org.eclipse.jetty, org.eclipse.jetty.orbit, javax.servlet</includeGroupIds> <includeScope>provided</includeScope> <!-- remove some files in order to decrease size --> <excludes>*, about_files/*, META-INF/*</excludes> <!-- <excludeArtifactIds>jsp-api,jstl</excludeArtifactIds> --> <outputDirectory> ${project.build.directory}/${project.artifactId} </outputDirectory> </configuration> </execution> </executions> </plugin> <!-- to support compilation in linux --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <target>1.6</target> <source>1.6</source> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
JettyLauncher
jetty启动的主类代码:
public class JettyLauncher { public static final int PORT = 8080; public static final String CONTEXT = "/test"; private static final String DEFAULT_WEBAPP_PATH = "src/main/webapp"; /** * 创建用于生产环境的Jetty Server */ public static Server createProdServer(int port, String contextPath) { Server server = new Server(port); server.setStopAtShutdown(true); ProtectionDomain protectionDomain = JettyLauncher.class.getProtectionDomain(); URL location = protectionDomain.getCodeSource().getLocation(); String warFile = location.toExternalForm(); System.out.println("war file path:"+warFile); WebAppContext context = new WebAppContext(warFile, contextPath); context.setServer(server); // 设置work dir,war包将解压到该目录,jsp编译后的文件也将放入其中。 String currentDir = new File(location.getPath()).getParent(); File workDir = new File(currentDir, "work"); context.setTempDirectory(workDir); server.setHandler(context); return server; } /** * 创建用于开发运行调试的Jetty Server, 以src/main/webapp为Web应用目录. */ public static Server createDevServer(int port, String contextPath) { Server server = new Server(); // 设置在JVM退出时关闭Jetty的钩子。 server.setStopAtShutdown(true); //这是http的连接器 ServerConnector connector = new ServerConnector(server); connector.setPort(port); // 解决Windows下重复启动Jetty居然不报告端口冲突的问题. connector.setReuseAddress(false); server.setConnectors(new Connector[] { connector }); WebAppContext webContext = new WebAppContext(DEFAULT_WEBAPP_PATH, contextPath); //webContext.setContextPath("/"); webContext.setDescriptor("src/main/webapp/WEB-INF/web.xml"); // 设置webapp的位置 webContext.setResourceBase(DEFAULT_WEBAPP_PATH); webContext.setClassLoader(Thread.currentThread().getContextClassLoader()); server.setHandler(webContext); return server; } /** * 启动jetty服务 * * @param port * @param context */ public void startJetty(int port, String context, String env) { Server server = null; if ("dev".equals(env)) { server= JettyLauncher.createDevServer(port, context); }else { server= JettyLauncher.createProdServer(port, context); } try { server.stop(); server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } } public static void main(String[] args) { new JettyLauncher().startJetty(8080, "/test,"dev");//dev为开发模式 }}
开发模式:去掉依赖中的<scope>provide<scope>以及main函数参数为dev,然后运行主类即可生产模式: 打包: mvn package cd target java -jar xx.war
主要参考:
[1]:嵌入式Jetty Web开发
阅读全文
0 0
- 嵌入式Jetty开发之代码启动Jetty
- jetty之嵌入式运行jetty
- 启动嵌入式Jetty服务器
- 嵌入式 jetty 启动应用
- Jetty嵌入式开发
- Jetty 9嵌入式开发
- Jetty 嵌入式开发
- Jetty 9嵌入式开发
- jetty启动以及嵌入式启动
- Jetty实战之 嵌入式运行Jetty
- Jetty实战之 嵌入式Jetty运行Servlet
- Jetty实战之 嵌入式Jetty运行Servlet
- Jetty实战之 嵌入式Jetty运行Servlet
- Jetty实战之 嵌入式运行Jetty
- Jetty实战之 嵌入式Jetty运行Servlet
- Jetty实战之 嵌入式Jetty运行Servlet
- Jetty实战之 嵌入式Jetty运行Servlet
- Jetty实战之 嵌入式运行Jetty
- 配置文件,配置块存储文件,块大小可在配置文件中设置,将3个文件存储在块中
- 做一个简单的mvc封装
- Spring--8.aop
- Microsoft Excel 中 ROMAN 函数介绍
- php 自动加载
- 嵌入式Jetty开发之代码启动Jetty
- 在CakePHP中实现文件下载
- linux 下 tar 命令
- 转码
- typedef知识点 和 void* test(void*)这个函数作为参数的知识点
- sql脚本注释问题
- 系统虚拟机管理--镜像/快照安装,脚本修复
- java Annotation
- Android 7.0 GMS认证(一)