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

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

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

测试代码如下:
[/size][/color]
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();


}

}


[b][color=olive][size=large]Servlet处代码[/size][/color][/b]
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);
}

}



[b][size=large][color=olive]在另外一个机器上访问请求的代码:[/color][/size][/b]
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());


}

}

[b][color=olive][size=large]打印的结果如下:[/size][/color][/b]
["A","中国","外国"]


[b][color=olive][size=large]至此,一个关于jetty API使用的小例子就完成了,使用的jar包截图如下:[/size][/color][/b]

[img]http://dl2.iteye.com/upload/attachment/0098/9430/ddbe8c0f-18a1-35f1-9a54-708e29d100ea.jpg[/img]


[img]http://dl2.iteye.com/upload/attachment/0098/9434/ffe96139-fddb-3c80-8eec-dcec72a6491c.jpg[/img]

[b][color=green][size=large]最后,散仙把jar包打包上传,用的到的朋友可以测一下![/size][/color][/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值