`
wandejun1012
  • 浏览: 2730327 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JETTY嵌入式Web容器的开发(一)---基础开发

    博客分类:
  • java
 
阅读更多

 

qiuJETTY嵌入式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嵌入式Web容器的开发(一)---基础开发

  • 修改/jetty/etc/jetty.xml

我做了下面两处修改(粗体),以利于测试

"1.0"?>

 

"Server" class="org.eclipse.jetty.server.Server">

"ThreadPool">

 

"org.eclipse.jetty.util.thread.QueuedThreadPool">

"minThreads">30

"maxThreads">200

"detailedDump">false

 

 

"addConnector">

 

"org.eclipse.jetty.server.nio.SelectChannelConnector">

"host">"jetty.host" />

"port">"jetty.port" default="8088"/>

"maxIdleTime">300000

"Acceptors">2

"statsOn">false

"confidentialPort">8443

"lowResourcesConnections">20000

"lowResourcesMaxIdleTime">5000

 

 

 

  • 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"%>

 

 

 

"Content-Type" content="text/html; charset=GBK">

Insert title here

 

 

hello jetty! 中国!

 

 

  • 做一个测试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

"1.0" encoding="UTF-8"?>

"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">

 

 

This is the description of my J2EE component

This is the display name of my J2EE component

HelloWorldServlet

org.jetty.demo.HelloWorldServlet

 

 

HelloWorldServlet

/servlet/HelloWorldServlet

 

 

index.jsp

 

 

JETTY嵌入式Web容器的开发(一)---基础开发

  • 启动服务

执行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

JETTY嵌入式Web容器的开发(一)---基础开发

测试访问SERVLET

http://localhost:8088/testContext/servlet/HelloWorldServlet

JETTY嵌入式Web容器的开发(一)---基础开发

 

refurl:http://my.oschina.net/u/989066/blog/157073

分享到:
评论

相关推荐

    jetty嵌入式web容器jar包

    jetty嵌入式web容器jar包 示例: public static void main(String[] args) { // 服务器的监听端口 Server server = new Server(6666); // 关联一个已经存在的上下文 WebAppContext context = new WebAppContext...

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

    3. **使用Jetty作为Web容器** - 首先,需要在项目中添加Jetty的依赖,可以通过Maven或Gradle来管理。 - 创建一个`Server`实例,并配置监听端口。 - 添加`Handler`,如`ServletContextHandler`,来处理HTTP请求。 ...

    jetty 嵌入式开发源码

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器直接嵌入到他们的应用中,从而提供了极大的灵活性和控制权。Jetty被广泛应用于各种项目,从小型微服务到大型分布式系统,都有其...

    maven集成jetty所需jar包maven-jetty-plugin,多版本

    Maven是一个项目管理工具,它可以帮助开发者管理和构建Java项目,而Jetty则是一个轻量级的嵌入式Servlet容器,常用于快速开发、测试以及部署Web应用。本文将详细讨论如何将Jetty与Maven进行集成,并介绍关键的`maven...

    [课堂课件讲解]Java微服务实践-Spring Boot嵌入式Web容器.pptx

    Embedded Jetty是Spring Boot提供的一种嵌入式Web容器,提供了便捷的配置和使用方式。Embedded Jetty支持异步HTTP服务器、基于标准的Servlet容器、WebSocket服务器等功能。 Embedded Tomcat: Embedded Tomcat是...

    java web开发部署神器--jetty插件

    在这种情况下,Jetty作为一个轻量级、快速且高度可配置的Web服务器和Servlet容器,成为了开发者们的另一种优秀选择。本文将深入探讨"java web开发部署神器--jetty插件",带你领略Jetty在Java Web开发中的魅力。 ...

    jetty-6.1.26.zip

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,与Tomcat相似,它为开发和部署Web应用程序提供了一种高效的选择。Jetty在设计上注重灵活性和可扩展性,使得它在处理HTTP协议、WebSocket协议以及部署各种...

    jetty.project-jetty-9.4.35.v20201120.rar

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,从微型服务器到大型企业级应用。标题中的"jetty.project-jetty-9.4.35.v20201120.rar"指的是Jetty项目的9.4.35版本,发布...

    jetty各个版本下载

    总之,Jetty作为一个强大的Web服务器和Servlet容器,因其灵活性和易用性在开发界占有一席之地。选择并下载合适的Jetty版本,可以帮助你构建高效、稳定的Web应用。无论你是新手还是经验丰富的开发者,Jetty都能提供一...

    jetty嵌入式服务.rar

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器功能直接嵌入到他们的应用程序中,无需外部服务器。这个“jetty嵌入式服务.rar”文件很可能包含了关于如何在Java应用中集成和使用...

    Spring整合Jetty开发web应用的例程

    在Java Web开发中,Spring框架和Jetty服务器的整合提供了轻量级且高效的应用部署解决方案。这个例程展示了如何利用Spring来启动和管理Jetty服务器,以构建和运行Web应用程序。下面将详细介绍这一过程中的关键知识点...

    jetty嵌入式服务器实例大全

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,因其开源、小巧且易于集成的特点,被广泛应用于各种项目中。本实例大全将全面解析Jetty在不同场景下的使用,帮助你深入理解和掌握Jetty的特性。 1. **...

    jetty嵌入式Httpserver

    Jetty是一款轻量级、高性能的开源HTTP服务器和Servlet容器,它被广泛应用于各种Java Web应用的部署。作为一款嵌入式服务器,Jetty可以直接在应用程序中运行,无需单独的Web服务器进程,这使得它在分布式系统、微服务...

    jetty6 嵌入式使用

    Jetty 6是一款轻量级、高性能的Java Web服务器和Servlet容器,因其可嵌入式使用而备受开发者青睐。在Eclipse这样的集成开发环境中,你可以直接通过Starter类快速启动和运行Jetty服务,大大简化了Web应用的部署流程。...

    Jetty 9 Servlet容器

    总的来说,Jetty 9 Servlet容器以其轻量级、高效和灵活的特性,成为了Java Web开发中一个值得信赖的选择。无论是小型项目还是大型企业级应用,都能从中受益。通过深入理解和熟练掌握Jetty 9,开发者可以构建出更强大...

    jetty嵌入式实例

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,特别是作为嵌入式服务器使用。嵌入式Jetty允许开发者直接在应用程序中启动和管理Web服务器,无需单独部署或运行独立的...

    基于jetty嵌入式容器的java性能分析工具,内嵌H2 database,以图表形式直观展.zip

    Jetty是一个轻量级、高效的嵌入式Java HTTP服务器和Servlet容器,它被广泛用于各种项目,从简单的HTTP服务到复杂的Web应用。本工具利用Jetty作为基础,提供了一种对Java应用性能进行深入洞察的方式。 该工具的核心...

    利用Jetty服务器开发web应用例程

    总结一下,Jetty作为一个强大的Servlet容器,提供了轻量级、快速和灵活的Web应用开发环境。通过学习如何配置和运行Jetty服务器,以及如何注册和管理Servlet,你可以为你的Java Web应用打下坚实的基础。不断探索Jetty...

    jetty 8及依赖包

    Jetty 8是一款轻量级、高性能的Java Web服务器和HTTP服务器容器,广泛用于开发、测试和部署Web应用程序。这个压缩包包含Jetty 8版本的实现及其依赖库,是学习和理解Jetty工作原理,尤其是NIO(非阻塞I/O)和Servlet...

    容器jetty

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它在开源社区中广受欢迎,尤其适用于嵌入式系统和分布式应用程序。标题中的"jetty-distribution-9.3.5.v20151012"指的是Jetty的一个发行版本,具体为9.3.5...

Global site tag (gtag.js) - Google Analytics