eclipse 项目中嵌入jetty
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eclipse 项目中嵌入jetty相关的知识,希望对你有一定的参考价值。
Jetty是一个提供HHTP服务器、HTTP客户端和javax.servlet容器的开源项目,Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler。
最近工作中需要在项目中集成jetty,由于之前从来没有用过jeety,所以耗费了我多半天的时间去学习,基本实现了jetty嵌入集成,我自己搭建了一个简单的springMvc框架,简单实现了controller请求跳转jsp页面的小功能,这里springMvc的创建就不在这里叙述了。不会的可以去网上上查找资料。项目结构如下:
首先在项目中导入相应的jar包,如下:
jetty-all-8.1.17.v20150415.jar
servlet-api.jar
ant-1.6.5.jar
core-3.1.1.jar
jsp-2.1.jar
jsp-api-2.1.jar
ant-xmltask.jar
jetty-util-6.1.9.jar
其次创建一个入口方法用于启动 jetty,代码如下:
/** * 以内置Jetty模式启动Web应用 * 提示:请以debug as java application的方式启动 */ public class AOS { /** * 启动内置服务器 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { AOSServer aosServer = new AOSServer(); aosServer.setWebContext("/testjetty"); //项目启动的上下文名称 aosServer.setPort(10010); //服务的端口号 aosServer.start(); //启动服务 } }
最后编写具体的jetty启动方法,代码如下:
/** * <b>基于Jetty的嵌入式Servlet容器</b> * * @author atom.wu * @date 2008-06-06 * @since 1.0 */ public class AOSServer { private static Logger log = LoggerFactory.getLogger(AOSServer.class); /** * 监听端口, 缺省为80 */ private int port = 80; /** * 应用上下文, 缺省为/(无上下文) */ private String webContext = "/"; public AOSServer() { } /** * 构造Server实例 * * @param pWebContext * @param pPort */ public AOSServer(String pWebContext, int pPort) { setWebContext(pWebContext); setPort(pPort); } public int getPort() { return port; } /** * 监听端口, 缺省为80 * * @param port */ public void setPort(int port) { this.port = port; } public String getWebContext() { return webContext; } /** * 应用上下文, 缺省为/(无上下文) * * @param webContext */ public void setWebContext(String webContext) { this.webContext = webContext; } /** * 启动Jetty容器 */ public void start() throws Exception { long start = System.currentTimeMillis(); final String webRoot = System.getProperty("user.dir") + "/WebContent"; //工程路径 Server server = new Server(); // 设置在JVM退出时关闭Jetty的钩子。 server.setStopAtShutdown(true); SelectChannelConnector connector = new SelectChannelConnector(); //disable nio cache to unlock the css and js file when running connector.setUseDirectBuffers(false); // 解决Windows下重复启动Jetty居然不报告端口冲突的问题. connector.setReuseAddress(false); connector.setPort(port); server.setConnectors(new Connector[]{connector}); WebAppContext context = new WebAppContext(); context.setResourceBase("WebContent"); context.setContextPath(webContext); //设置表单提交大小 (缺省值:200000) context.setMaxFormContentSize(10000000); context.setParentLoaderPriority(true); //针对jetty使用jstl的特殊设置,扫描tld文件。指定哪些jar中可能含有tld。 context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/.*jsp-api-[^/]*\\\\.jar$|.*/.*jsp-[^/]*\\\\.jar$|.*/.*taglibs[^/]*\\\\.jar$|.*/.*jstl[^/]*\\\\.jar$"); server.setHandler(context); boolean isSuccess = true; try { server.start(); } catch (BindException e) { isSuccess = false; } catch (Exception e) { isSuccess = false; } finally{ String msg = "sa-web启动成功"; String supportMsg = " "; if ( !isSuccess) { msg = "sa-web启动失败"; log.error(msg); msg = msg + supportMsg; System.out.println(msg); System.exit(0); }else { Toolkit toolkit = Toolkit.getDefaultToolkit(); Clipboard clipboard = toolkit.getSystemClipboard(); webContext = webContext.equals("/") ? "" : webContext; String webUrl = "http://localhost"; if (port == 80) { webUrl = webUrl + webContext; }else { webUrl = webUrl + ":" + port + webContext; } StringSelection stringSel = new StringSelection(webUrl); clipboard.setContents(stringSel, null); long alltime = System.currentTimeMillis() - start; msg = msg + "[" + alltime + "毫秒]" + " >> " + webUrl + supportMsg; System.out.println(msg); server.join(); //线程阻塞 } } }
启动jetty 服务。
浏览器打开地址:
以上是关于eclipse 项目中嵌入jetty的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse RCP 插件 + 嵌入式 Jetty + JSF