jetty启动以及嵌入式启动

[size=medium]首先得下载jetty http://dist.codehaus.org/jetty/

我下的是jetty-8.1.12

其实Jetty所谓的安装过程也就是将下载的文件解压到指定的目录,然后根据不同的操作系统来配置环境变量而已。

解压后进入D:\Program Files\jetty-8.1.12


[img]http://dl2.iteye.com/upload/attachment/0088/3398/b5d6187e-bb01-35d4-83b3-5096ab62df20.jpg[/img]


一、目录结构
从上图可以看到,主要有下面几个主要目录

1、bin目录

启动脚本的目录,也包括根路径下的start.jar,主要是用来起引导作用的,引导资源加载和服务的启动。

2、etc目录

配置文件的目录,也包括根路径下的start.ini,这份配置文件是用来指导start.jar的加载顺序和加载模块的,这个后面会有详解。

3、lib目录

库文件目录,如果需要调试jetty的话,可以下载源码加到eclipse中,客户端远程调试即可,命令: java -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8090 -DEOS_DEBUG=true -jar start.jar

4、webapps目录

应用部署目录,类似tomcat的webapps目录


二、配置文件

1、start.ini
指导jetty启动时需要加载的配置文件与顺序

[img]http://dl2.iteye.com/upload/attachment/0088/3469/536a66e9-ae90-32ed-826b-1cd497698bee.jpg[/img]
这些配置文件的顺序不能错,比如若是将jetty-deploy.xml置于最下面将导致jetty-webapps无法初始化的错误。简单介绍下几个配置的作用:
1)jmx.xml

去掉该注释,容器中的某些类便能在运行时受管理;比如:如果工程需要在不重启的情况下重新读取某配置文件,可以通过信号量的方式或者jmx的方式。这因为该功能管理着工程中需要被管理的类,因此置于最上方。

2)jetty.xml

这个就不解释了,该配制文件就对应了server类,管理着connection,thread pool,handler等。

3)deploy.xml

该配置文件对应于上篇博客描述的deployService,在jetty中就是deployManager,部署管理器,因此如果这玩意位置错了,下面的webapps.xml自然就报错了。

4)webapps.xml

war包的部署器,webappcontext便于基于此生产出来的。

5)contexts.xml

另一种部署器,主要是读取部署目录下的xml文件,不知道用在哪里,先略过。

2、jetty.xml

[img]http://dl2.iteye.com/upload/attachment/0088/3472/148011e1-9703-343e-b510-02395abdadef.jpg[/img]
可以看出默认的io为nio,hanler是server中比较核心的方法,Contexts是一个webappcontext的集合,请求进来的时候Contexts负责将请求分发给具体的app;而DefaultHandler即返回404错误页面,其实从这个handlers就可以看出来,请求会一次经过这个handler,一旦被hanlder即提交退出,直到不被handler走到了DefaultHandler里面返回404的页面。这里面其实自定义handler加载handlers的头部处理一些静态资源的访问,这样就直接绕过了应用webappcontext的访问了,加快了静态资源的处理速度。eg:RerourceHandler.

3、deploy.xml

[img]http://dl2.iteye.com/upload/attachment/0088/3474/8d181a33-2438-30c6-9784-a4b6d12391f0.jpg[/img]
调用addBean方法,Ref = contexts 即上面server中已经new出来的 ContextHandlerCollection,持有该contexts旨在注册所有由该类生产出来的一个个app(即WebAppContextHandler)。

4、webapps.xml

[img]http://dl2.iteye.com/upload/attachment/0088/3479/ed591a67-b59e-358d-9ccc-2c64e810352f.jpg[/img]


三、启动:
1、通过cmd命令启动

启动jetty命令:java -jar start.jar
start.jar 后面内容是传递给start.jar的参数,多个参数用空格隔开。

参数内容可以有以下几种:
--help 查看帮助信息
--stop 停止服务,下节中会讲到
--version 查看当前jetty版本信息
其他:作为Jetty服务配置文件

我们看到上条命令指定参数内容为etc/jetty.xml,它实际指向一个服务配置文件,该文件是用来设置jetty服务启动的系统配置信息。比如监听端口,发布某个目录下面的web应用,jndi的配置等等,这些将在后续章节详细描述。当然服务配置文件可以是多个,比如:

java -jar start.jar etc/jetty.xml etc/jetty-plus.xml

这条命令就指定了两个服务配置文件,etc/jetty.xml和etc/jetty-plus.xml。

在后续的章节中术语“服务配置文件”就是指的这些文件。

使用浏览器打开地址 http://localhost:8080/ ,你将会看到jetty的默认示例站点。

如果能访问http://localhost:8080 说明jetty启动成功。。



[img]http://dl2.iteye.com/upload/attachment/0088/3396/6a592496-2905-3bd4-821d-cb8009bf5534.jpg[/img]

2. 停止服务
在刚才启动jetty的终端窗口里面按住ctrl-c键即可。

不过你可以这样来启动

java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar

jetty启动后会在本地监听你指定的端口8009,并将在验证下次关闭命令的密码secret。现在再通过命令:

java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop

就可以在本机的另外一个终端窗口来停止jetty服务。在linux系统中,你可以先将jetty进程转移到后台执行,然后再通过命令行来停止Jetty服务。

哦,看了上面的介绍你或许以为jetty启动和关闭是如此麻烦,一点也不符合Jetty小巧玲珑的气质。其实Jetty为我们准备了各个操作系统中快捷的方式。不过记住不管何种方式最终都是通过start.jar来启动jetty服务的。


3、嵌入式启动

jetty安装

[img]http://dl2.iteye.com/upload/attachment/0088/4388/7878c394-1e64-3ff8-8c6e-c3d8add60809.jpg[/img]


创建Jetty 服务:

[img]http://dl2.iteye.com/upload/attachment/0088/4229/12ce726e-9ae9-3f01-8b1b-484244a00264.jpg[/img]

Server 是Jetty的核心类,运行此类就可以启动Jetty服务,访问服务地址:http://localhost:8080/
虽然服务正常启动,但是在服务中没有加入任何Handle,所以访问的时候会返回404 error.
如图

[img]http://dl2.iteye.com/upload/attachment/0088/4231/35ebd60c-0634-3612-921e-3a018a8fc093.jpg[/img]

创建handler


[img]http://dl2.iteye.com/upload/attachment/0088/4360/0cb41748-8ba9-3f4f-9f2f-4000e8f52b19.jpg[/img]

Jetty是面向Handler架构的,就像Spring面向bean架构,Ibatis面向statement架构一样。
将自定义的HelloHandler加入到Server中如下:

[img]http://dl2.iteye.com/upload/attachment/0088/4379/5f6a204e-cb8b-3487-84d0-62da273da42b.jpg[/img]


重新执行此类,访问服务地址:http://localhost:8080/,访问效果如下:


[img]http://dl2.iteye.com/upload/attachment/0088/4358/29ab53fe-f888-3cc6-ab7e-d58f0ffc6eac.jpg[/img]


四、start.jar加载原理
main方法非常简单,就执行了一个方法

[img]http://dl2.iteye.com/upload/attachment/0088/3481/32719c2f-b0a5-3632-ac9d-a0577fb28b36.jpg[/img]
parseCommandLine方法主要做了两件事,分别是:
1、解析命令行参数


[img]http://dl2.iteye.com/upload/attachment/0088/3483/b731e41c-1421-3308-a007-2448d74ef018.jpg[/img]

2、定位加载资源并依据配置文件反射调用相应的类[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,tongweb 是一个基于 C++ 的嵌入式 Web 服务器框架,并不支持在 Java 中直接使用。但是,您可以使用其他 Java 的嵌入式 Web 服务器框架,如 Jetty 或 Tomcat,来实现类似的功能。 以下是使用 Jetty 实现一个简单的嵌入式 Web 服务器的示例代码: ```java import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class Main { public static void main(String[] args) throws Exception { // 创建 Jetty 服务器实例 Server server = new Server(8080); // 创建 ServletContextHandler ServletContextHandler handler = new ServletContextHandler(); handler.setContextPath("/"); // 添加 Servlet handler.addServlet(new ServletHolder(new HelloServlet()), "/"); // 将 ServletContextHandler 添加到服务器中 server.setHandler(handler); // 启动服务器 server.start(); server.join(); } public static class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.getWriter().write("Hello World!"); } } } ``` 在上面的示例代码中,我们首先创建了一个 Jetty 服务器实例,并指定了监听的端口号为 8080。然后,我们创建了一个 ServletContextHandler,并将其设置为根路径。接着,我们创建了一个 HelloServlet,并将其添加到 ServletContextHandler 中。在 HelloServlet 的 doGet() 函数中,我们简单地将响应的 body 设置为了 "Hello World!"。最后,我们启动服务器并等待服务器停止。 当然,这只是一个简单的示例,实际上 Jetty 还支持更多的功能和配置选项。您可以参考 Jetty 的官方文档,详细了解如何使用 Jetty 实现嵌入式 Web 服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值