eclipse 项目中嵌入jetty

来源:互联网 发布:mhx配装器 java怎么用 编辑:程序博客网 时间:2024/06/05 08:48

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 服务。

 

 浏览器打开地址: