Jetty嵌入式配置(一)
Jetty 的基本架构
下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于 Handler 容器工作的,它类似与 Tomcat 的 Container 容器,Jetty 与 Tomcat 的比较在后面详细介绍。Jetty 中另外一个比不可少的组件是 Connector,它负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。
图 1. Jetty 的基本架构
Jetty 中还有一些可有可无的组件,我们可以在它上做扩展。如 JMX,我们可以定义一些 Mbean 把它加到 Server 中,当 Server 启动的时候,这些 Bean 就会一起工作。
Jetty安装
<dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>7.6.11.v20130520</version> </dependency>
public static void main(String[] args) throws Exception { Server server = new Server(8080); server.start(); server.join();}
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");response.setStatus(HttpServletResponse.SC_OK);baseRequest.setHandled(true);response.getWriter().println("<h1>Hello World</h1>");}}
public static void main(String[] args) throws Exception { Server server = new Server(8080); server.setHandler(new HelloHandler()); server.start(); server.join();}
public static void main(String[] args) throws Exception { Server server = new Server(8080); QueuedThreadPool threadPool = new QueuedThreadPool(); threadPool.setMinThreads(10); threadPool.setMaxThreads(500); server.setThreadPool(threadPool); SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(8080); //每个请求被accept前允许等待的连接数 connector.setAcceptQueueSize(50); //同事监听read事件的线程数 connector.setAcceptors(2); //连接最大空闲时间,默认是200000,-1表示一直连接 connector.setMaxIdleTime(3000); server.addConnector(connector); server.setHandler(new HelloHandler()); server.start(); server.join();}
public static void main(String[] args) throws Exception { String rootDir = "./webapp";String contextPath = "/";System.setProperty("file.encoding", "utf-8");Server server = new Server();QueuedThreadPool threadPool = new QueuedThreadPool();threadPool.setMinThreads(10);threadPool.setMaxThreads(500);server.setThreadPool(threadPool);SelectChannelConnector connector = new SelectChannelConnector();connector.setPort(8080);// 每个请求被accept前允许等待的连接数connector.setAcceptQueueSize(50);// 同事监听read事件的线程数connector.setAcceptors(2);// 连接最大空闲时间,默认是200000,-1表示一直连接connector.setMaxIdleTime(3000);server.addConnector(connector);WebAppContext context = new WebAppContext(rootDir, contextPath);context.setOverrideDescriptors(Arrays.asList(new String[] { Jetty.class.getResource("/") + "web_override.xml" }));context.setParentLoaderPriority(true);server.setHandler(context);server.start();server.join();}