JAVA里使用Jetty作为轻量级嵌入式的Web容器
2017-06-20 10:14
471 查看
JAVA里使用Jetty作为轻量级嵌入式的Web容器
时间 2014-07-09 18:10:31 三劫散仙原文 http://qindongliang1922.iteye.com/blog/2090085
主题 Jetty 嵌入式
有时候,我们可能使用一个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 { @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<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(); } @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); } }
在另外一个机器上访问请求的代码:
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包打包上传,用的到的朋友可以测一下!
相关文章推荐
- 使用jetty作为嵌入式web容器(部署war文件)
- (转)使用jetty作为嵌入式web容器(部署war文件)
- Java使用Jetty实现嵌入式Web服务器及Servlet容器
- main方法启动jetty java嵌入式web服务器jetty的使用
- java 嵌入式的Web服务器jetty使用例子
- Google AppEngine 使用 Jetty 作为 Java 应用引擎
- 使用Jetty作为嵌入式服务器
- Spring Boot 使用 jetty 作为默认的Web容器
- Java使用Jetty实现嵌入式Web服务器及Servlet容器
- Java Web 学习笔记之八:嵌入式web服务器Jetty的基本使用
- Java使用Jetty实现嵌入式的Servlet容器
- Java使用Jetty实现嵌入式Web服务器及Servlet容器
- java使用jetty作为内嵌服务器启动项目
- 使用Jetty作为嵌入式服务器
- 面向 Java 开发人员的 Ajax: 使用 Jetty 和 Direct Web Remoting 编写可扩展的 Comet 应用程序
- 作为java的一个库来使用wvtool
- 嵌入式jetty的使用
- Java写的手机计费系统(作为学习参考的实例:关键是Java类库里面的date和Calendar的使用和相互转换,以及一些日期的实际问题)
- JAVA使用XML作为持久存储介质
- 在java程序中,使用sAMAccountName作为登录名通过LDAP目录库验证