首先jetty是啥呢?Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。——百度百科
说白了,jetty可以像Tomcat一样让运行web应用。
有什么好处呢?jetty可以很方便的设置项目名和访问端口,在你需要启动多个项目的时候就很方便了。
怎么使用呢?接下来说说怎么在项目中嵌入jetty
首先是pom文件中需要添加:
org.eclipse.jetty jetty-server 9.2.10.v20150310 log4j log4j org.eclipse.jetty jetty-webapp 9.2.10.v20150310 log4j log4j
其次是jetty的启动类:
/** * *@description *@auther panmingshuai *@time 2018年4月7日下午3:41:18 * */public class JettyServer { private static final Logger LOGGER = Logger.getLogger(JettyServer.class); private int port; private String contextPath; private String webappPath; private Server server; private WebAppContext webapp; /** * 创建用于开发运行调试的Jetty Server, 以src/main/webapp为Web应用目录. */ public static void main(String[] args) { JettyServer jettyServer = new JettyServer("/ps", "src/main/webapp", 81); jettyServer.start(); } public JettyServer(String contextPath, String webappPath, int port) { if (StringUtils.isBlank(contextPath)) { this.contextPath = ""; } else { this.contextPath = contextPath; } if (StringUtils.isBlank(webappPath)) { throw new IllegalArgumentException("webappPath is required"); } else { this.webappPath = webappPath; } this.port = port; } public void start() { if (null == server || server.isStopped()) { doStart(); } else { throw new IllegalStateException("JettyServer already started."); } } private void doStart() { if (!checkServerPortAvailable()) { throw new IllegalStateException("Server port already in use: " + port); } 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 }); webapp = new WebAppContext(webappPath, contextPath); server.setHandler(webapp); try { long st = System.currentTimeMillis(); server.start(); long sp = System.currentTimeMillis() - st; System.out.println("JettyServer " + Jetty.VERSION + " started: " + String.format("%.2f sec", sp / 1000D) + ",the port is ===" + port + ""); server.join(); } catch (Exception e) { e.printStackTrace(); LOGGER.error("JettyServer started failed!"); } } private boolean checkServerPortAvailable() { if (0 < port) { ServerSocket ss = null; try { ss = new ServerSocket(port, 0, null); } catch (Exception e) { LOGGER.error("check serverPort failed", e); return false; } finally { if (null != ss) { try { ss.close(); } catch (IOException e) { LOGGER.error("close ServerSocket failed", e); } } } } else { throw new IllegalArgumentException("Invalid port " + port); } return true; }}
需要注意的是:JettyServer jettyServer = new JettyServer("/ps", "src/main/webapp", 81);这个方法中ps是你访问的项目名,81是访问端口,即你要访问项目的地址是:localhost:81/ps