博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将Jetty做为内嵌的服务器使用
阅读量:6704 次
发布时间:2019-06-25

本文共 3767 字,大约阅读时间需要 12 分钟。

hot3.png

将Jetty做为内嵌的服务器使用 博客分类: java

 Jetty的优良特点在于,它可以嵌入到任意的java程序中。并且使用jetty可以快速的开发自己的应用服务器。

1、准备开发嵌入式的jetty服务器jar

//以下这些包,在jetty_home\lib目录下都可以找到:

jetty-continuation-7.6.2.v20120308.jar

jetty-http-7.6.2.v20120308.jar

jetty-io-7.6.2.v20120308.jar

jetty-security-7.6.2.v20120308.jar

jetty-server-7.6.2.v20120308.jar

jetty-servlet-7.6.2.v20120308.jar

jetty-util-7.6.2.v20120308.jar

jetty-webapp-7.6.2.v20120308.jar

jetty-xml-7.6.2.v20120308.jar

//以下是Servlet项目所需要的包,在tomcat_home\lib的安装目录下都可以找到

servlet-api-2.5.jar

jsp-api.jar

jasper.jar

jasper-el.jar

el-api.jar

ecj-3.7.1.jar   (此包非常重要是在Eclipse环境下编译JSP文件、Servlet文件用的)

//以下在tomcat_home\bin目录下可以找到,虽然它是以tomcat命名,但它是一个公共包,主要是用于服务器的日志输出

tomcat-juli.jar

2、书写第一个jetty服务器

    以下代码,创建了一个jetty服务器,并发布了一两个Servlet。且设置支持Session

import org.eclipse.jetty.server.Server;   //此类是jetty的服务器类用于指定绑定的服务器和端口。

import org.eclipse.jetty.server.SessionManager;  //此类用于管理服务器的Session

import org.eclipse.jetty.server.session.HashSessionManager;  //此类是SessionManager的子类,用hash算法生成Session

import org.eclipse.jetty.server.session.SessionHandler; //此类用于将SessionManager注册到服务器

import org.eclipse.jetty.servlet.ServletContextHandler; //此类用于管理Servlet,可以管理多个Servlet.

import org.eclipse.jetty.servlet.ServletHolder;  //此类用于将Servlet注册到服务器

import org.eclipse.jetty.webapp.WebAppContext;   //此类,可以用于加载任意一个JavaEE项目。后面会用到

以下是访问内部的代码,类名请你自己添加:

    public void jettyServer2() throws Exception{

       Server server = new Server(9090);//声明服务器

        ServletContextHandler hand = new ServletContextHandler();//声明ServletContextHandler

        hand.addServlet(new ServletHolder(new HttpServlet() {    //分别添加两个Servlet

        public void doGet(HttpServletRequest req,

                HttpServletResponse response) throws ServletException,

                IOException {

                response.setContentType("text/html;charset=utf-8"); 

               response.setStatus(HttpServletResponse.SC_OK);  

               response.getWriter().println("<h1>Hello World第二个</h1>"); 

               HttpSession s = req.getSession();

               String name = (String) s.getAttribute("name");

               response.getWriter().println("<h1>Session is:</h1>"+s+","+name); 

               response.getWriter().print("<br/>"+this.getServletContext().getRealPath("/"));

              

        }

       }), "/a");

        hand.addServlet(new ServletHolder(new HttpServlet() {

        public void doGet(HttpServletRequest req,

                HttpServletResponse response) throws ServletException,

                IOException {

            response.setContentType("text/html;charset=utf-8"); 

               response.setStatus(HttpServletResponse.SC_OK);  

               response.getWriter().println("<h1>Hello World第一个</h1>");

               HttpSession s = req.getSession();

               s.setAttribute("name""Jack");

               response.getWriter().print("<br/><a href='a'>去第二个</a>");

        }

       }), "/");

        //设置内嵌的jetty支持session.默认情况下不支持session

        SessionManager sm = new HashSessionManager();

        hand.setSessionHandler(new SessionHandler(sm));

       server.setHandler(hand);//设置

       server.start();//启动

       server.join();

    }

3、使用jetty的管理器管理一个完整的JavaEE应用

       Jetty可以非常方便的管理一个JavaEE应用程序。关键点就在于使用WebAppContext来发布一个JavaEE应用:

/**

     * 指定一个现有的项目发布,方式一。

     * 以下情况下,默认支持容器的所有对象如:

     * request,session,application,

     */

    public static void main(String[] args) throws Exception {

       String webapp = "D:\\programfiles\\MyEclipse10\\wk3\\day04\\WebRoot";//声明项目所在的目录

       Server server = new Server(80);                                //声明端口

       WebAppContext context = new WebAppContext();                   //声明上下文对象

       context.setDescriptor(webapp + "/WEB-INF/web.xml");                //指定web.xml文件,可选

       context.setResourceBase(webapp);                               //设置项目路径

       context.setContextPath("/");                                   //设置上下文根,可以任意的值

       server.setHandler(context);                                    //设置句柄

       server.start();                                                //启动

       server.join();

    }

       也可以使用以下方式发布:

    /**

     * 指定一个现有的项目发布,方式二

     *   Exception

     */

    

    public void jettyServer() throws Exception{

       String webapp = "D:\\programfiles\\MyEclipse10\\wk3\\day04\\WebRoot";

       Server server = new Server(80);

       WebAppContext context = new WebAppContext(webapp,"/abc");

       server.setHandler(context);

       server.start();

       server.join();

    }

 

http://www.genshuixue.com/i-cxy/p/11578496

转载于:https://my.oschina.net/xiaominmin/blog/1598674

你可能感兴趣的文章
Atitti.java android反编译解决方案-----虚拟机方案
查看>>
Java 装饰模式 (Decorator)
查看>>
JAVA虚拟机垃圾回收算法原理
查看>>
PHP开启curl_init
查看>>
动态规划法求背包问题
查看>>
【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
查看>>
Mybatis-mapper-xml-基础
查看>>
如何在Visual Studio VS中定义多项目模板
查看>>
tcpip学习
查看>>
yii2权限控制rbac之菜单menu最详细教程
查看>>
国内四大炒股软件APP 全面技术解析
查看>>
C++ STL--queue 的使用方法
查看>>
[svc]visio绘制模具
查看>>
springmvc入门基础之注解和参数传递
查看>>
absolute绝对定位的非绝对定位用法
查看>>
小白全栈
查看>>
glib 散列表
查看>>
获取GridView TemplateField的数据
查看>>
Ecshop的lbi库文件中嵌套调用另一个lbi库文件
查看>>
Spring XmlBeanFactory例子[转]
查看>>