JETTY嵌入式Web容器的开发(一)---基础开发
JETTY嵌入式Web容器体积小,启动速度快,性能好,免费开源,是一款很适合开发调试和简单演示的轻量级Web容器.
而且它的嵌入式的特点,使得开发者可以直接将容器的操作包含在程序逻辑里,得以摆脱TOMCAT,JBOSS等独立容器带来的安装,维护,部署等一系列令人头疼的问题.
JETTY嵌入式开发步骤
- 下载
本文采用的是2012年最新版本的JETTY8 (8.1.4版)
jetty-hightide-8.1.4.v20120524.zip
- ECLIPSE建立一个普通JAVA项目testjetty
注意:
是JAVA APPLICATION项目,不是WAR项目.
JDK要1.6
在项目里建立jetty目录 目录下再建立etc目录 将jetty-hightide-8.1.4.v20120524.zip包中etc目录下的jetty.xml和webdefault.xml文件拷贝入新建的 /jetty/etc目录下 |
将jetty-hightide-8.1.4.v20120524.zip文件中lib/目录下的所有jar文件和lib/jsp子目录下的所有jar文件都加入项目的buildPath (很多讨论JETTY开发的文章总是在最小JAR包数上做文章,我觉得初学者还是应该将所有JAR包都加入,因为作为一款Web 容器,JETTY的JAR容纳了大量的细节功能. 有的JAR包你没有加入,也许测HELLOWORLD这类功能能够通过,但在真正的商用页面里,就会针对各种HTTP元素出问题) |
在项目里建webRoot目录 webRoot目录下建立WEB-INF目录,以后web.xml就放在这里 |
建成的项目的结构如下:
- 修改/jetty/etc/jetty.xml
我做了下面两处修改(红字),以利于测试
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <Set name="ThreadPool"> <!-- Default queued blocking threadpool --> <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <Set name="minThreads">30</Set> <Set name="maxThreads">200</Set> <Set name="detailedDump">false</Set> </New> </Set>
<Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><Property name="jetty.host" /></Set> <Set name="port"><Property name="jetty.port" default="8088"/></Set> <Set name="maxIdleTime">300000</Set> <Set name="Acceptors">2</Set> <Set name="statsOn">false</Set> <Set name="confidentialPort">8443</Set> <Set name="lowResourcesConnections">20000</Set> <Set name="lowResourcesMaxIdleTime">5000</Set> </New> </Arg> </Call>
|
- JETTY Service类
package org.jetty.demo;
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.xml.XmlConfiguration; import org.xml.sax.SAXException;
public class JettyCustomServer extends Server {
private String xmlConfigPath;
private String contextPath;
private String warPath;
private String resourceBase = "./webRoot";
private String webXmlPath = "./webRoot/WEB-INF/web.xml";
public JettyCustomServer(String xmlConfigPath,String contextPath,String resourceBase,String webXmlPath) { this(xmlConfigPath,contextPath,resourceBase,webXmlPath,null); }
public JettyCustomServer(String xmlConfigPath,String contextPath) { this(xmlConfigPath,contextPath,null,null,null); }
public JettyCustomServer(String xmlConfigPath,String contextPath,String warPath) { this(xmlConfigPath,contextPath,null,null,warPath); }
public JettyCustomServer(String xmlConfigPath,String contextPath,String resourceBase,String webXmlPath,String warPath) { super(); if(StringUtils.isNotBlank(xmlConfigPath)){ this.xmlConfigPath = xmlConfigPath; readXmlConfig(); }
if(StringUtils.isNotBlank(warPath)){ this.warPath = warPath; if(StringUtils.isNotBlank(contextPath)){ this.contextPath = contextPath; applyHandle(true); } }else{ if(StringUtils.isNotBlank(resourceBase)) this.resourceBase = resourceBase; if(StringUtils.isNotBlank(webXmlPath)) this.webXmlPath = webXmlPath; if(StringUtils.isNotBlank(contextPath)){ this.contextPath = contextPath; applyHandle(false); } }
}
private void readXmlConfig(){ try { XmlConfiguration configuration = new XmlConfiguration(new FileInputStream(this.xmlConfigPath)); configuration.configure(this); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (SAXException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
public void applyHandle(Boolean warDeployFlag){
ContextHandlerCollection handler = new ContextHandlerCollection();
WebAppContext webapp = new WebAppContext(); webapp.setContextPath(contextPath); webapp.setDefaultsDescriptor("./jetty/etc/webdefault.xml");
if(!warDeployFlag){ webapp.setResourceBase(resourceBase); webapp.setDescriptor(webXmlPath); }else{ webapp.setWar(warPath); }
handler.addHandler(webapp);
super.setHandler(handler); }
public void startServer(){ try { super.start(); System.out.println("current thread:"+super.getThreadPool().getThreads()+"| idle thread:"+super.getThreadPool().getIdleThreads()); super.join(); } catch (Exception e) { e.printStackTrace(); }
}
public String getXmlConfigPath() { return xmlConfigPath; }
public void setXmlConfigPath(String xmlConfigPath) { this.xmlConfigPath = xmlConfigPath; }
public String getContextPath() { return contextPath; }
public void setContextPath(String contextPath) { this.contextPath = contextPath; }
public String getResourceBase() { return resourceBase; }
public void setResourceBase(String resourceBase) { this.resourceBase = resourceBase; }
public String getWebXmlPath() { return webXmlPath; }
public void setWebXmlPath(String webXmlPath) { this.webXmlPath = webXmlPath; }
public String getWarPath() { return warPath; }
public void setWarPath(String warPath) { this.warPath = warPath; }
} |
- 做一个简单的可执行的服务启动类
package org.jetty.demo;
public class JettyServerStart {
public static void main(String[] args) { JettyCustomServer server = newJettyCustomServer("./jetty/etc/jetty.xml","/testContext"); server.startServer();
} } |
- /webRoot/目录下做一个JSP测试页面
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>Insert title here</title> </head> <body> hello jetty! 中国! </body> </html> |
- 做一个测试Servlet
package org.jetty.demo;
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet{
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet"); resp.getWriter().write("hello world!"); resp.getWriter().close(); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost"); super.doPost(req, resp); }
} |
- /webRoot/WEB-INF目录下建立一个web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name>
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>org.jetty.demo.HelloWorldServlet</servlet-class> </servlet>
<servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/servlet/HelloWorldServlet</url-pattern> </servlet-mapping>
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> |
- 启动服务
执行JettyServerStart |
CONSOLE日志: 2012-06-27 15:49:35.250:INFO:oejs.Server:jetty-8.1.4.v20120524 2012-06-27 15:49:35.484:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/testContext,file:/D:/RND/javaathome/eclipsehelio/testjetty/webRoot/} 2012-06-27 15:49:35.484:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/testContext,file:/D:/RND/javaathome/eclipsehelio/testjetty/webRoot/} 2012-06-27 15:49:35.703:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8088 current thread:30| idle thread:26
看红字部分,记得我们在./jetty/etc/jetty.xml文件中做的修改么? |
测试
测试访问JSP页面
http://localhost:8088/testContext/index.jsp
测试访问SERVLET
相关推荐
jetty嵌入式web容器jar包 示例: public static void main(String[] args) { // 服务器的监听端口 Server server = new Server(6666); // 关联一个已经存在的上下文 WebAppContext context = new WebAppContext...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器直接嵌入到他们的应用中,从而提供了极大的灵活性和控制权。Jetty被广泛应用于各种项目,从小型微服务到大型分布式系统,都有其...
3. **使用Jetty作为Web容器** - 首先,需要在项目中添加Jetty的依赖,可以通过Maven或Gradle来管理。 - 创建一个`Server`实例,并配置监听端口。 - 添加`Handler`,如`ServletContextHandler`,来处理HTTP请求。 ...
Embedded Jetty和Embedded Tomcat是两个常用的嵌入式Web容器,它们提供了不同的功能和配置方式。 Embedded Jetty: Embedded Jetty是Spring Boot提供的一种嵌入式Web容器,提供了便捷的配置和使用方式。Embedded ...
Maven是一个项目管理工具,它可以帮助开发者管理和构建Java项目,而Jetty则是一个轻量级的嵌入式Servlet容器,常用于快速开发、测试以及部署Web应用。本文将详细讨论如何将Jetty与Maven进行集成,并介绍关键的`maven...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,与Tomcat相似,它为开发和部署Web应用程序提供了一种高效的选择。Jetty在设计上注重灵活性和可扩展性,使得它在处理HTTP协议、WebSocket协议以及部署各种...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,从微型服务器到大型企业级应用。标题中的"jetty.project-jetty-9.4.35.v20201120.rar"指的是Jetty项目的9.4.35版本,发布...
Jetty服务器是一款轻量级、高性能的开源HTTP服务器和Servlet容器,它被广泛用于Web应用程序的部署和开发。Jetty 7.3.0.v20110203是该服务器的一个版本,发布于2011年2月3日。这个版本包含了Jetty服务器的核心组件...
此外,`jetty嵌入式服务.rar`可能包含示例代码、配置文件以及如何部署和管理Web应用程序的文档。可能还涵盖了以下主题: - 配置线程池:Jetty允许自定义线程池以优化性能和资源使用。 - SSL/TLS支持:如何启用HTTPS...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,因其开源、小巧且易于集成的特点,被广泛应用于各种项目中。本实例大全将全面解析Jetty在不同场景下的使用,帮助你深入理解和掌握Jetty的特性。 1. **...
在Java Web开发中,Spring框架和Jetty服务器的整合提供了轻量级且高效的应用部署解决方案。这个例程展示了如何利用Spring来启动和管理Jetty服务器,以构建和运行Web应用程序。下面将详细介绍这一过程中的关键知识点...
本文将深入探讨"java web开发部署神器--jetty插件",带你领略Jetty在Java Web开发中的魅力。 Jetty是由Mortbay公司开发的一款高性能、小巧的HTTP服务器和Servlet容器。它以其高效的内存管理和快速的响应能力而著称...
总之,Jetty作为一个强大的Web服务器和Servlet容器,因其灵活性和易用性在开发界占有一席之地。选择并下载合适的Jetty版本,可以帮助你构建高效、稳定的Web应用。无论你是新手还是经验丰富的开发者,Jetty都能提供一...
Jetty 7.4.2 是一个开源的、基于Java的Web服务器和Servlet容器,它在2011年5月26日发布。Jetty以其轻量级、高效和可嵌入性而闻名,被广泛用于开发和部署Web应用程序。这个版本(7.4.2)是Jetty 7系列的一个维护版本...
总的来说,Jetty 9 Servlet容器以其轻量级、高效和灵活的特性,成为了Java Web开发中一个值得信赖的选择。无论是小型项目还是大型企业级应用,都能从中受益。通过深入理解和熟练掌握Jetty 9,开发者可以构建出更强大...
Jetty是一款轻量级、高性能的开源HTTP服务器和Servlet容器,它被广泛应用于各种Java Web应用的部署。作为一款嵌入式服务器,Jetty可以直接在应用程序中运行,无需单独的Web服务器进程,这使得它在分布式系统、微服务...
Jetty 6是一款轻量级、高性能的Java Web服务器和Servlet容器,因其可嵌入式使用而备受开发者青睐。在Eclipse这样的集成开发环境中,你可以直接通过Starter类快速启动和运行Jetty服务,大大简化了Web应用的部署流程。...
Jetty是一个轻量级、高性能且开源的Java Web服务器和HTTP服务器库,广泛用于开发、测试和部署Web应用程序。在此次讨论中,我们关注的是Jetty的特定版本——"jetty-distribution-9.2.2.v20140723.zip"。这个压缩包...
Jetty是一款轻量级、高性能且开源的Java Web服务器和servlet容器,广泛应用于各种规模的项目中。标题中的"jetty-distribution-9.4.28.v20200408.zip"表明这是一个Jetty的发行版,版本号为9.4.28,发布日期为2020年4...
Jetty 9.4.6 是一个开源的HTTP服务器和Java Servlet容器,它在Java社区中广泛使用,尤其适用于轻量级、嵌入式和快速开发的场景。这个版本是Jetty项目的一个稳定版本,发布于2017年5月31日,集成了当时的最新技术和...