欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jetty服务器--嵌入式环境使用 java应用服务器jetty

程序员文章站 2022-03-05 17:00:12
...
jetty服务器是十分优秀的java web应用服务器,支持的java的 jsp和 servlet标准,跟tomcat一样很受欢迎,,另外jetty更轻量一些,允许将jetty嵌入到程序中执行,在某些场景下十分有用。

jetty嵌入式环境的使用

内置jetty服务器
package com.gbcom.frame.jetty.demo;


import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;

/**
 * 创建服务器:
 * 启动服务,通过浏览器访问: http://localhost:8888/index 和 http://localhost:8888/hello
 * 
 * 
 * mvn 参考:2.0. 添加依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty.aggregate</groupId>
      <artifactId>jetty-all</artifactId>
      <version>7.6.9.v20130131</version>
    </dependency>

如果在应用中使用到jsp的话需要添加jetty-jsp依赖,在jetty-all中并为聚合jetty-jsp模块。

 * @author SYZ
 * @date 2016-2-23 上午09:54:01
 * @version 1.0.0
 * @see com.gbcom.frame.jetty.demo.EmbedJettyServer
 */
public class EmbedJettyServer {

  public static void main(String[] args) throws Exception {
    // 创建Server
    Server server = new Server();

    // 添加ThreadPool
    QueuedThreadPool queuedThreadPool = new QueuedThreadPool();
    queuedThreadPool.setName("queuedTreadPool");
    queuedThreadPool.setMinThreads(10);
    queuedThreadPool.setMaxThreads(200);

    server.setThreadPool(queuedThreadPool);

    // 添加Connector
    SelectChannelConnector connector = new SelectChannelConnector();
    connector.setPort(8888);
    connector.setAcceptors(4);
    connector.setMaxBuffers(2048);
    connector.setMaxIdleTime(10000);

    server.addConnector(connector);

    // 添加Handler
    ContextHandlerCollection context = new ContextHandlerCollection();
    ContextHandler contextHandler = context.addContext("/", "/");
    contextHandler.setHandler(new DispatchHandler());

    Handler defaults = new DefaultHandler();

    HandlerCollection collection = new HandlerCollection();
    collection.setHandlers(new Handler[] { context, defaults });

    server.setHandler(collection);

    // 启动服务
    server.start();
    while (server.isStarted()) {
      System.out.println("server starting...");
      break;
    }
    System.out.println("server stared...");
    System.out.println("ContextHandlerCollectio.getServer() = "
        + context.getServer().hashCode());
    System.out.println("Server:" + server.hashCode());
    server.join();
  }
}



分发器:DispatchHandler
package com.gbcom.frame.jetty.demo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
/**
 * 编写分发处理类DispatchHandler
 * 
 * @author SYZ
 * @date 2016-2-23 上午09:54:34
 * @version 1.0.0
 * @see com.gbcom.frame.jetty.demo.DispatchHandler
 */
public class DispatchHandler extends AbstractHandler {

  public void handle(String target, Request baseRequest,
      HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {

    /**
     * 这里将是根据不同的请求来分发给不同的Handler来处理
     */
    if (target.equals("/index")) {
      new IndexHandler().handle(target, baseRequest, request, response);
    } else {
      new HelloHandler().handle(target, baseRequest, request, response);
    }
  }
}


业务处理
package com.gbcom.frame.jetty.demo;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
/**
 * 编写相应的Handler(IndexHandler和HelloHandler)
 * 
 * @author SYZ
 * @date 2016-2-23 上午09:54:45
 * @version 1.0.0
 * @see com.gbcom.frame.jetty.demo.IndexHandler
 */
public class IndexHandler extends AbstractHandler {

	  @Override
	  public void handle(String target, Request baseRequest,
	      HttpServletRequest request, HttpServletResponse response)
	      throws IOException, ServletException {

	    response.setCharacterEncoding("UTF-8");
	    response.setContentType("text/html;charset=UTF-8");

	    PrintWriter out = response.getWriter();
	    out.write("<h3>Hello World Jetty!</h3>");
	    out.write(Calendar.getInstance().getTime().toString());
	    out.flush();
	    out.close();
	    
	    System.out.println("process http success!!!!");
	  }


	}


package com.gbcom.frame.jetty.demo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
/**
 * 编写相应的Handler(IndexHandler和HelloHandler)
 * @author SYZ
 * @date 2016-2-23 上午09:54:55
 * @version 1.0.0
 * @see com.gbcom.frame.jetty.demo.HelloHandler
 */
public class HelloHandler extends AbstractHandler {

	  public void handle(String target, Request baseRequest,
	      HttpServletRequest request, HttpServletResponse response)
	      throws IOException, ServletException {

	    response.setContentType("text/html;charset=UTF-8");
	    PrintWriter out = response.getWriter();
	    out.write("<h3>This is a HelloHandler and contextPath is '/hello'.</h3>");
	    out.flush();
	    out.close();
	  }
	}