浏览 2003 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-07-09
有时候,我们可能使用一个SOA服务,传递一些数据,但是我们又不想使用一些WebService服务,或者EJB重量级的JAVA EE框架,包括部署一个简单的Tomcat的Web服务,我们都不想去做,这时我们该用什么? jetty作为一个比tomcat还轻量级的servlet容器,可以以非常轻小的姿态,集成在我们的应用程序里面,甚至可以作为一个嵌入式的web容器来满足我们的一些需求,非常的方便。
下面散仙模拟一个,在一个机器上起了一个jetty服务,然后再另一个机器上通过使用jsoup访问http请求,得到测试数据,当然我们可以基于这个例子,改造出一些类似异构平台通信的服务,通过json或xml格式的数据,就可以使PHP,Python,Ruby,C#来访问JAVA处理完的数据,类似于轻量级的rest风格。 测试代码如下: <pre name="code" class="java">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(); } } </pre> Servlet处代码 <pre name="code" class="java">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 { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List&lt;String&gt; list = new ArrayList&lt;String&gt;(); 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(); } @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doDelete(req, resp); } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPut(req, resp); } } </pre> 在另外一个机器上访问请求的代码: <pre name="code" class="java">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()); } } </pre> 打印的结果如下: <pre name="code" class="java">["A","中国","外国"] </pre> 至此,一个关于jetty API使用的小例子就完成了,使用的jar包截图如下: 最后,散仙把jar包打包上传,用的到的朋友可以测一下! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |