转自:http://www.cnblogs.com/dongdone/p/6740546.html
内置jetty
jetty有一个口号,不要把你的应用部署到jetty,而是把jetty部署到你的应用中。这说明使用jetty有两种选择,一种选择是将你的应用部署到jetty容器中,另一种选择是将jetty嵌入到你的应用层序中,后者意味着将一个http的模块嵌入到了你的程序中,而不是把你的程序放入一个http的server中。
这个文档就是帮助你一步一步将jetty嵌入到你的程序中。
1.概述
把jetty嵌入到你的程序中,一般都是下面的步骤:
- 创建一个server实例
- 增加或者配置connector
- 增加或者配置handler、context、servlet
- 启动server
-
等待连接
2.创建一个server
下面的代码创建了一个最简单的server。
```
import org.eclipse.jetty.server.Server;
/**
- Created by zdd on 2017/4/1.
*/
public class SimpleServer {
public static void main(String[] args) throws Exception{
Server server = new Server(8090);
server.start();
server.dumpStdErr();
server.join();
}
}
```
上面程序运行一个http server在8090端口。但是这个server没有任何用处,因为它没有任何handler,因此不管任何的请求都会返回404.
3.使用handler
为了对请求产生一个回应,jetty需要你在server上设置handler。一个handler可以:
- 检查或者修改HTTP请求。
- 生成response回应。
- 调用另一个handler(查看HandlerWrapper)
-
选择一个或者很多个handlers去调用(查看HandlerCollection)
3.1hello world Handler
下面的代码展示了一个最简单的helloworld handler:
```
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
-
Created by zdd on 2017/4/1.
*/
public class HelloHandler extends AbstractHandler {
final String greeting;
final String body;public HelloHandler(){
this("hello world");
}public HelloHandler(String greeting){
this(greeting,null);
}public HelloHandler(String greeting,String body){
@Override
this.greeting = greeting;
this.body = body;
}
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);
PrintWriter out = response.getWriter();
out.println(""+greeting+"
");
if(body != null){
out.println(body);
}
baseRequest.setHandled(true);
}
}
```
传递给handle方法的参数有: - target:请求的目标
- baseRequest:没有被包装的request对象
- request:不可变的request对象,可能被filter或者servlet包装过。
-
response:请求的回应,也可能被filter或者servlet包装过。
handler会设置response的状态、response的内容类型、并且标记request被处理了,最后才通过out生成response的内容。
3.2运行helloworld Handler
为了允许handler去处理http请求,你必须把它绑定到server实例上。下面的代码显示了jetty server是如何和handler绑定的。
import org.eclipse.jetty.server.Server;
/**
* Created by zdd on 2017/4/1.
*/
public class SimpleServer {
public static void main(String[] args) throws Exception{
Server server = new Server(8090);
server.setHandler(new HelloHandler());
server.start();
server.join();
}
}
在jetty中,一般总会有一个或者多个handler区处理所有的请求。有些handler会选择其他指定的handler去做处理,例如(一个ContextHandlerCollection使用context path去选择ContextHandler);还有一些是使用程序的逻辑去产生response,例如(ServletHandler将请求转发给Servlet来处理),还有其他的一些是做一些无关的任务来生成response,例如(RequestLogHandler或者StatisticsHandler)。
后面的章节描述了你可以像切面一样合并多个handler。你可以看到一些有价值的handler在org.eclipse.jetty.server.handler包中。
4.Handler Collections and Wrappers
复杂的请求需要你合并多个handler来处理。jetty提供了几个HandlerContainer接口的实现:
- HandlerCollection:拥有一个handler的集合并且调用顺序调用每个handler。当你想合并统计和日志的handler这是很有用的。
- HandlerList:一个handler的集合,会依次调用这个集合里面的handler,直到如果有异常发生、response已经被提交、resquest.isHandled()被调用。你可以使用这个来合并一些handler,例如调用handler来处理直到被匹配到的情况下。
- HandlerWrapper:你可以使用这个来完成连接handlers类似于面向切面编程的风格。例如,一个标准的web程序被实现成一个context、session、security和servlet的串联。
- ContextHandlerClollection:一个特殊的HandlerCollection,使用最长uri匹配原则来选择handler。
5.Scoped Handlers
Server.handle(...)
ContextHandler.doScope(...)
ServletHandler.doScope(...)
ContextHandler.doHandle(...)
ServletHandler.doHandle(...)
SomeServlet.service(...)
6.Resource Handler
下面的代码给你展示了你可以使用ReourceHandler去处理静态的资源。
public class FileServer {
public static void main(String[] args) throws Exception{
// 创建一个最基本的jetty server并且绑定8090端口
// 如果把端口指定为0,那么程序会自动选择一个可用的端口
Server server = new Server(8090);
ResourceHandler resourceHandler = new ResourceHandler();
// 设置resourceHandler监听的目录
resourceHandler.setDirectoriesListed(true);
resourceHandler.setWelcomeFiles(new String[]{"idenx.html"});
resourceHandler.setResourceBase(".");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[]{resourceHandler, new DefaultHandler()});
server.setHandler(handlers);
server.start();
server.join();
}
}
注意我们使用了ResourceHandler和DefaultHandler,所以DefaultHandler对于没有匹配的请求会友好的返回404。
7.内置connectors
在上面的例子中,server实例都会绑定一个端口并且创建一个默认的connector来监听这个端口。但是,在内置jetty中,自定义一个或者多个connetor是很常见的。
7.1一个connector
public class OneConnector {
public static void main(String[] args) throws Exception{
Server server = new Server();
ServerConnector http = new ServerConnector(server);
http.setHost("localhost");
http.setPort(8090);
http.setIdleTimeout(30000);
server.addConnector(http);
server.setHandler(new HelloHandler());
server.start();
server.join();
}
}
在这个例子里connector处理http协议,因为这是ServerConnetor默认的配置。
7.2多connector
当配置多connector的时候,最好是多个connector享用相同的配置信息。为了实现这个你需要明确的指定serverConnector的配置,使用的是ConnectionFactory这个实例。
8内置servlets
servlet是让应用程序通过逻来处理请求的标准的方式。servlet和handler很相似。servlet在jetty中是被ServletHandler处理的。它使用标准的路径映射到一个servlet。
下面的代码创建了一个ServletHandler并且配置了一个简单的HelloServlet:
public class MinimalServlets {
public static void main(String[] args) throws Exception{
Server server = new Server(8090);
ServletHandler handler = new ServletHandler();
server.setHandler(handler);
// 需要注意的是,这是个原生的servlet,你可以通过web.xml或者@WebServlet来配置
handler.addServletWithMapping(HelloServlet.class,"/*");
server.start();
server.join();
}
}
class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setStatus(HttpServletResponse.SC_OK);
resp.getWriter().println("<h1>hello from HelloServlet</h1>");
}
相关推荐
内置 Jetty 服务器是 Spring Boot 的一个重要特性,允许开发者快速启动和运行 web 应用,而无需手动配置服务器。Jetty 是一个轻量级、高性能的开源 HTTP 服务器和 Java Servlet 容器,它被广泛用于各种类型的 web ...
标题中的“轻量级的内置jetty版服务器”指的是一个采用了Jetty作为内置服务器的解决方案,专门用于构建轻量、高效的Web应用程序。Jetty是一个开源的HTTP服务器和Servlet容器,以其小巧、快速和灵活的特性在Java开发...
1.jetty-6.1.25.jar 2.jetty-servlet-9.4.8.v20171121.jar 3.jetty-util-6.1.25.jar 4.jsp-2.1-glassfish-2.1.v20100127.jar 5.jsp-2.1-jetty-6.1.26.jar 6.servlet-api-3.1.jar
【标题】"maven+jetty +ssh 项目例子"是一个综合性的开发示例,它展示了如何使用Maven构建工具、Jetty服务器以及SSH(Spring Security)框架来开发和部署一个Java Web应用。这个项目旨在帮助开发者理解这些技术的...
在嵌入式Jetty环境下运行Struts2 Annotation项目是一个常见的任务,特别是在开发和测试阶段,因为这种方式能够快速启动服务,而无需依赖大型服务器容器。本文将深入探讨如何配置和执行这个过程,以及涉及的关键技术...
基于Java实现的短语搜索,支持公司名称、地址名称等短语的搜索,支持自定义排序、拼音处理,内置jetty提供web接口 使用方法: cd phrase-search unix类操作系统执行: chmod +x startup.sh & ./startup.sh ...
你可以通过Eclipse的内置软件站点Marketplace来查找并安装“Jetty Integration for WTP”。插件安装完成后,重启Eclipse。 2. **创建或导入Web项目** 在Eclipse中,选择"File" -> "New" -> "Dynamic Web Project...
**Gradle Jetty 插件使用详解** 在Java Web开发中,Jetty是一个轻量级、高性能的HTTP服务器和Servlet容器,它支持多种部署方式,包括作为嵌入式服务器使用。Gradle,作为现代的构建工具,提供了丰富的插件生态系统...
学习如何将Jetty服务器内置于Java应用程序中,以便在无需独立服务器的情况下运行Web服务。 5. **Jetty配置**:理解Jetty的XML配置文件,学习如何配置服务器的连接器、会话管理、安全设置等。这包括设置SSL/TLS、...
只需要添加必要的库文件到应用的类路径,就可以启动一个内置的Web服务器。 7. **配置灵活性**:Jetty提供了多种方式来配置服务器,包括XML配置文件、程序化API以及基于注解的配置。 8. **模块化**:Jetty的lib目录...
- Jetty提供了一些内置的调试工具,例如`RequestLogHandler`,可以记录请求信息。 7. **安全性** - Jetty支持多种安全机制,包括基本认证、摘要认证、SSL/TLS加密等,可以通过`ConstraintSecurityHandler`进行...
- **2.3.3 start.jar深入探讨**:`start.jar`是一个特殊的Jar包,它包含了启动Jetty所需的所有依赖库,并且内置了一些默认的配置文件,便于快速部署。 **2.4 我们可以学到什么** 通过实践Jetty的安装和启动过程,...
1. **MyEclipse Marketplace**:在MyEclipse中,可以通过内置的Marketplace搜索Jetty插件,找到后点击安装,按照提示完成安装过程。 2. **手动安装**:如果Marketplace中没有找到合适的插件,可以从插件官方网站下载...
- **安全**:内置了SSL/TLS支持,可以方便地配置HTTPS服务。 - **嵌入式**:Jetty可以嵌入到其他Java应用程序中,作为Web服务的组成部分。 4. **部署Web应用** - **WAR文件**:将Web应用的WAR文件放入`webapps`...
1. "jetty插件包":这是关于Jetty的扩展,为开发环境提供了内置的Jetty服务器支持。 2. "eclipse集成jetty":表明这个插件适用于Eclipse,允许用户在Eclipse环境中使用Jetty。 3. "myeclipse集成jetty":同样,这个...
1. **快速启动和调试**:Jetty Eclipse Plugin允许用户快速启动一个内置的Jetty服务器,这样就可以直接在开发环境中运行和调试Web应用程序,无需构建和部署到外部服务器。这对于迭代开发和快速测试尤其方便。 2. **...
Jetty提供了内置的安全管理器,可以设置角色和权限,实现基于角色的访问控制。同时,Jetty允许调整线程池大小、缓冲区配置等,以优化服务器性能。此外,Jetty还支持连接池和HTTP/2协议,进一步提升了性能。 总之,...
在 Eclipse EE 中,Jetty 是一个内置的服务器,可以用来运行和调试 Web 应用程序。在配置 Jetty 时,需要配置 Jetty 服务器的启动参数、 JVM 参数、日志记录等设置。 在给定的文件中,看到的是 Jetty 的启动命令,...
1. **快速启动**:Jetty插件允许开发者快速启动一个内置的Jetty服务器,无需繁琐的配置步骤,只需几行命令即可运行Web应用。 2. **热部署**:当源代码发生变化时,Jetty插件可以自动检测并重新加载修改,实现热部署...
9. **性能监控**:Jetty提供了一些内置的监控端点,允许开发者监控服务器的运行状态,如线程池、内存使用情况和HTTP连接器的状态。 10. **持续更新和社区支持**:Jetty有一个活跃的社区,不断进行维护和更新,修复...