JAVA里使用Jetty作为轻量级嵌入式的Web容器

来源:互联网 发布:bms核心算法 编辑:程序博客网 时间:2024/05/17 14:27

JAVA里使用Jetty作为轻量级嵌入式的Web容器

有时候,我们可能使用一个SOA服务,传递一些数据,但是我们又不想使用一些WebService服务,或者EJB重量级的JAVA EE框架,包括部署一个简单的Tomcat的Web服务,我们都不想去做,这时我们该用什么? jetty作为一个比tomcat还轻量级的servlet容器,可以以非常轻小的姿态,集成在我们的应用程序里面,甚至可以作为一个嵌入式的web容器来满足我们的一些需求,非常的方便。

下面散仙模拟一个,在一个机器上起了一个jetty服务,然后再另一个机器上通过使用jsoup访问http请求,得到测试数据,当然我们可以基于这个例子,改造出一些类似异构平台通信的服务,通过json或xml格式的数据,就可以使PHP,Python,Ruby,C#来访问JAVA处理完的数据,类似于轻量级的rest风格。

测试代码如下:

package com.qin.test;import java.util.concurrent.Executors;import org.eclipse.jetty.server.Connector;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.server.handler.ContextHandler;import org.eclipse.jetty.server.handler.HandlerList;import org.eclipse.jetty.server.handler.ResourceHandler;import org.eclipse.jetty.server.nio.SelectChannelConnector;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;import org.eclipse.jetty.util.thread.ExecutorThreadPool;import org.eclipse.jetty.util.thread.ThreadPool; import com.qin.servlet.MyTestServlet;/** * @author qindongliang *  * 启动jetty测试服务 *  *  * **/public class StartupServer {public static void main(String[] args)throws Exception {ResourceHandler resourceHandler = new ResourceHandler(); resourceHandler.setDirectoriesListed(true);resourceHandler.setResourceBase("data");resourceHandler.setStylesheet("");ContextHandler staticContextHandler = new ContextHandler();staticContextHandler.setContextPath("/data");//staticContextHandler.setContextPath("/files");staticContextHandler.setHandler(resourceHandler);  //添加servlet支持ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);servletContextHandler.setContextPath("/"); /**可在下面依次添加多个servlet**/servletContextHandler.addServlet(new ServletHolder(new MyTestServlet()), "/show");//servletContextHandler.addServlet(new ServletHolder(new SpuSimilarityServlet()), "/spu");//servletContextHandler.addServlet(new ServletHolder(new SpuResultServlet()), "/search");  //servletContextHandler.addServlet(new ServletHolder(new AdminServlet()), "/db");HandlerList handlers = new HandlerList();handlers.addHandler(servletContextHandler);handlers.addHandler(staticContextHandler);int hosts=9999;//端口号Server server = new Server(hosts);// 设置线程池     ThreadPool  threadPool = new ExecutorThreadPool(Executors.newFixedThreadPool(5));server.setThreadPool(threadPool);  // 设置连接参数     Connector connector = new SelectChannelConnector();     // 设置监听端口     connector.setPort(hosts);     // 为服务设置连接器     server.setConnectors(new Connector[] { connector }); server.setHandler(handlers);server.start();server.join(); }}

Servlet处代码

package com.qin.servlet;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.google.gson.Gson;@WebServlet("/show")public class MyTestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {List<String> list = new ArrayList<String>();list.add("A");list.add("中国");list.add("外国");Gson g = new Gson();//resp.setContentType("charset=utf-8");ServletOutputStream out = resp.getOutputStream();String json = g.toJson(list);out.write(json.getBytes());out.flush();out.close();}@Overrideprotected void doDelete(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {super.doDelete(req, resp);}@Overrideprotected void doPut(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {super.doPut(req, resp);}}

在另外一个机器上访问请求的代码:

package com.get.jetty;import org.jsoup.Connection;import org.jsoup.Connection.Method;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;/** *  * @author qindongliang * 获取json数据 *  * **/public class GetJettyData {public static void main(String[] args)throws Exception {//使用jsoup获取jetty连接Connection con=Jsoup.connect("http://localhost:9999/show").timeout(80000);con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");Document doc=con.post();System.out.println(doc.text()); }}

打印的结果如下:

["A","中国","外国"]

至此,一个关于jetty API使用的小例子就完成了,使用的jar包截图如下:

最后,散仙把jar包打包上传,用的到的朋友可以测一下!

原创粉丝点击