设为首页 收藏本站
查看: 895|回复: 0

[经验分享] JAVA里使用Jetty作为轻量级嵌入式的Web容器

[复制链接]

尚未签到

发表于 2017-2-27 10:21:44 | 显示全部楼层 |阅读模式
有时候,我们可能使用一个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包截图如下:
DSC0000.jpg

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347811-1-1.html 上篇帖子: jetty启动出现A full JDK (not just JRE) is required 下篇帖子: 使用Cactus进行容器内测试三---(集成jetty进行容器内测试)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表