1. Jetty简介

  Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接

2. 项目工作中的使用

近期项目中需要同步业务方的相关数据,因此打算使用Jetty完成此目标,具体的代码信息如下:

(1) 封装Jetty的服务类

public class JettyServerController {

    private Server jettyServer;
private int jettyServerPort = 1999;
private String contextPathString;
private String startPageString;
private boolean jettyDirectoryListed = false;
private HashMap<String, Servlet> servletInstanceHashMap = new HashMap<String, Servlet>(); /**
* Creates an instance of the jettyServer on the portJettyServer
*
* @param jettyServerPort
*/
public JettyServerController( int jettyServerPort, String startPageString, String contextPathString, boolean jettyDirectoryListed )
{
// set the start page string
if (startPageString != null)
this.startPageString = startPageString; // set the context path string
if (contextPathString != null)
this.contextPathString = contextPathString; // set the directory listing property
this.jettyDirectoryListed = jettyDirectoryListed; // set the jetty operating port
this.jettyServerPort = jettyServerPort; // bounds check and assign the input port
if ( jettyServerPort < 65536 && jettyServerPort > 1000) {
this.jettyServerPort = jettyServerPort;
} // create a new jetty server instance
jettyServer = new Server(); // Set up a channel selector object
SelectChannelConnector connector = new SelectChannelConnector(); // set the port number
connector.setPort( this.jettyServerPort ); // add the connector to the server
jettyServer.addConnector( connector ); } public void setHandler(ContextHandlerCollection contexts) {
jettyServer.setHandler(contexts);
} public void startAndLaunchBrowser() throws Exception {
// Create the resource handler
ResourceHandler resource_handler = new ResourceHandler(); // disallow directory listing
resource_handler.setDirectoriesListed( this.jettyDirectoryListed ); // Set the initial load file
resource_handler.setWelcomeFiles(new String[] { this.startPageString }); // point to the local directory
resource_handler.setResourceBase("."); // use sessions
ServletContextHandler servletContextHandler = new ServletContextHandler(
ServletContextHandler.SESSIONS); // set /web as the default path
servletContextHandler.setContextPath( this.contextPathString ); // add the handler
jettyServer.setHandler( servletContextHandler ); // get the servlets
for (String servletPath : servletInstanceHashMap.keySet()) {
// add a servlet
servletContextHandler.addServlet(new ServletHolder(
servletInstanceHashMap.get( servletPath )), servletPath);
} // create a handler list
HandlerList handlers = new HandlerList(); // add three handlers
handlers.setHandlers( new Handler[] { servletContextHandler,
resource_handler, new DefaultHandler() }); // pass the handlers to the server
jettyServer.setHandler(handlers); // start the session
jettyServer.start();
} public void stop() throws Exception {
jettyServer.stop();
jettyServer.join();
} public void join() throws InterruptedException{
jettyServer.join();
} public boolean isStarted() {
return jettyServer.isStarted();
} public boolean isStopped() {
return jettyServer.isStopped();
} public void addServlet( String servletPath, Servlet servlet )
{
servletInstanceHashMap.put( servletPath, servlet);
} public void removeServlet ( String servletPath )
{
servletInstanceHashMap.remove( servletPath );
} }

(2) 插入Servlet组件

public class ServletHelper {
private static final Logger logger = LoggerFactory.getLogger(ServletHelper.class); public static void main(String[] args) throws Exception {
initJetty(8080);
} public static void initJetty(int port) throws Exception {
// Create a new JettyServerController
JettyServerController controller = new JettyServerController(port,"/query","/",true);
controller.addServlet("/test", new TestServlet()); // start the session and launch the default page
controller.startAndLaunchBrowser();
System.in.read(); controller.stop();// stop the local Jetty ajax services
}
}

(3) Servlet业务功能

接收业务方POST请求发送的数据,并存储至数据库

public class TestServlet extends HttpServlet{

    private static final long serialVersionUID = -2385860009337093194L;

    private static final int SUCCESS = 0;
private static final int FAILED = -1; @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
resp.setContentType("application/json; charset=utf-8");
PrintWriter out = resp.getWriter(); int resultCode = -1;
String info = "";
// 获取参数
String para = "";
try {
para = req.getParameter("para");
} catch (Exception e) {
}
if(para.trim().length() == 0){
resultCode = FAILED;
}else{
byte[] buffer = getRequestPostBytes(req);
if(buffer == null || buffer.length == 0){
resultCode = FAILED;
}else{
String charEncoding = req.getCharacterEncoding();
if(charEncoding == null) charEncoding = "UTF-8";
info = new String(buffer,charEncoding);
// 将获取的信息更新至数据库
......
}
} JSONObject result = new JSONObject();
result.put("resultCode",resultCode);
result.put("content",info); resp.addHeader("resultCode",""+resultCode);
out.print(result.toString()); LogUtil.info(result.toString()); } byte[] getRequestPostBytes(HttpServletRequest request) throws IOException{
int length = request.getContentLength();
if(length == 0){
return null;
} byte buffer[] = new byte[length];
for(int i = 0; i < length;){
int readLen = request.getInputStream().read(buffer, i, length-i);
if(readLen == -1) break;
i += readLen;
}
return buffer;
}
}

Jetty数据同步使用的更多相关文章

  1. solr 简单搭建 数据库数据同步(待续)

    原来在别的公司负责过文档检索模块的维护(意思就是不是俺开发的啦). 所以就略微接触和研究了下文档检索. 文档检索事实上是全文检索.是通过一种技术把N多文档进行一定规律的分割归类,然后创建易于搜索的索引 ...

  2. 增量数据同步中间件DataLink分享(已开源)

    项目介绍 名称: DataLink['deitə liŋk]译意: 数据链路,数据(自动)传输器语言: 纯java开发(JDK1.8+)定位: 满足各种异构数据源之间的实时增量同步,一个分布式.可扩展 ...

  3. 大数据实践-数据同步篇tungsten-relicator(mysql->mongo)

    // mongo)";digg_bgcolor = "#FFFFFF";digg_skin = "normal"; // ]]> // [导读] ...

  4. postman使用之二:数据同步和创建测试集

    数据同步 启动postman 后在右上角可以登录账号,登录后就可以同步自己的api测试脚本,连上网在办公区在家都可以同步. 创建测试集 1.点击collections,点击add folder 2.c ...

  5. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 能支撑10万以上客户端的数据同步下载问题

    庞大的业务系统,特别是需要有离线作业操作支持的核心业务系统,需要有强大的基础数据同步功能,基础数据有在增加.有在变动.有在失效,同时有大量的客户端全天侯的在连接服务器.不间断的在处理核心数据. 经过2 ...

  6. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决

    作为一个完整的整体信息化解决方案需要有足够强大的各种功能,这些功能相对独立,又互相依存.当有需要这样的功能时可以随时拿出来用,适当修改一下就可以满足要求.只有这样才能快速开发各种信息化系统,才能满足各 ...

  7. rsync数据同步备份

    一.rsync简介 (1)rsync是什么? rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具. (2)rsync作用比较 远程拷贝:有点类似ssh的scp ...

  8. Windows远程数据同步工具cwRsync

    1. cwRsync简介cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件.cwRsync主要用于Windows上的远程文 ...

  9. 怎么通过 Mysql 实现数据同步呢?

    怎么使 mysql 数据同步先假设有主机 A 和 B ( linux 系统),主机 A 的 IP 分别是 1.2.3.4 (当然,也可以是动态的),主机 B 的 IP 是 5.6.7.8 .两个主机都 ...

随机推荐

  1. .NET 实体转换辅助类

    /// <summary> /// 实体转换辅助类 /// </summary> public class ModelConvertHelper<T> where ...

  2. DP【洛谷P2134】 百日旅行

    [洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...

  3. Jenkins+Git+Maven+Nexus+Tomcat

    https://www.jianshu.com/p/d24e64559440 https://blog.csdn.net/u013322876/article/details/72637854 htt ...

  4. Java内存区域与内存溢出异常---对象的创建

    对象的创建   在语言层面,创建一个对象通常仅仅是一个new关键字而已.在虚拟机层面,虚拟机遇到一个new指令时,首先回去检查这个指令的参数是能在常量池中定位到一个类的符号引用,并检查这个符号引用代表 ...

  5. excel测试数据导入

    需求背景:测试数据的导入一般在dataprovider中写入对应的测试数据,当参数较多,组合测试或者接口参数测试的测试数据都需要逐一写数据驱动类,数据准备消耗了大量时间.前一篇博客中介绍了对偶测试的小 ...

  6. pandas关于其他merge用法(df1的的列索引和df2的行索引对应时候的)

  7. 6.过滤器(Filter)

    ---恢复内容开始--- 1.过滤器简介: 过滤器是一个用于拦截在数据源和数据目的地之间消息的一个对象. 过滤器 功能: 分析请求,将请求发送给指定的资源或自己创建一个响应返回:在请求到达服务器端前处 ...

  8. hdu 6288(二分法加精度处理问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6288 题意:给出a,b,k,n可满足(n^a)*(⌈log2n⌉)^b<=k ,求最大的n值三个 ...

  9. Object与String

    Object转为String的几种形式 在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString ...

  10. c++ primer 中讲的顶层const 和 底层 const 理解

    c++ primer 中讲的    顶层const 和 底层 const   以前没搞懂的顶层const和底层const,这次看了后感觉明白了. 首先,const是一个限定符,被它修饰的变量的值不能改 ...