Java项目嵌入Jetty-Web服务器
2013-07-10 16:07
302 查看
项目中用到嵌入式服务器的功能,于是去jetty的官方网站看了jetty嵌入方面的文档,简要翻译了其中可能用到的部分,方便以后参考。
Jetty有一个口号:不要把你的应用部署到Jetty中,把Jetty部署到你的应用中。Jetty可以在Java应用程序中向其他POJO一样被实例化,换句话说,以嵌入式的模式运行Jetty是指将Http模块放入你的应用程序中,而非部署你的程序到一个HTTP服务器。
嵌入式Jetty服务器的实现的步骤通常为:
1. 创建一个Server实例
2. 添加/配置Connectors
3. 添加/配置Handlers或者Contexts或者Servlets
4. 启动Server
相关阅读:
Ubuntu 11.04 安装配置 Jetty7 http://www.linuxidc.com/Linux/2011-12/48918.htm
Jetty的配置、部署与API使用 http://www.linuxidc.com/Linux/2011-12/49514.htm
Jetty 9.0.4 发布,支持 Servlet 3.1 非堵塞 I/O http://www.linuxidc.com/Linux/2013-06/86576.htm
1. 准备工作:
下载整合后的jetty-all和servlet api的jar文件。
2. 创建Server
下述代码创建一个Server实例,并启动服务器。
packageorg.eclipse.jetty.embedded;
importorg.eclipse.jetty.server.Server;
/** The simplest possible Jetty server.
*/
publicclassSimplestServer {
publicstaticvoidmain(String[] args) throwsException {
Server server = newServer(8080);
server.start();
server.join();
}
}
由于代码中并没有指定server的处理器(handler),因此在浏览器中输入http://localhost:8080会返回404错误页面。
3. 使用Handlers
为了对每个请求作出相应,Jetty要求为Server设定Handler,Handler可以处理
Ø检查或修改Http请求
Ø生成完整的Http响应
Ø调用另一个Handler
Ø选择一个或多个Handlers调用
3.1 HelloWorld Handler
下述代码显示了一个简单helloworld handler的实现
packageorg.eclipse.jetty.embedded;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.eclipse.jetty.server.Request;
importorg.eclipse.jetty.server.handler.AbstractHandler;
publicclassHelloHandlerextendsAbstractHandler {
finalString _greeting;
finalString _body;
publicHelloHandler() {
_greeting= "Hello World";
_body= null;
}
publicHelloHandler(String greeting) {
_greeting= greeting;
_body= null;
}
publicHelloHandler(String greeting, String body) {
_greeting= greeting;
_body= body;
}
publicvoidhandle(Stringtarget, Request baseRequest, HttpServletRequest request, HttpServletResponseresponse) throwsIOException, ServletException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>"+ _greeting + "</h1>");
if(_body != null) response.getWriter().println(_body);
}
}
handle为AbstractHandler抽象类中定义的抽象方法,我们对请求的处理操作主要通过此方法来完成,handle中参数包括:
target——请求的目标,可以是一个URI或者一个命名dispatcher中的名字。
baseRequest——Jetty的可变请求对象,总是unwrapped。
request——不变的请求对象,可能会被过滤器或servlet包装
response——响应,可能会被过滤器或servlet包装
hadler设定响应的状态,内容类型,并在使用writer生成响应体之前标记请求为已处理。
3.2 运行HelloWorld Handler
publicstaticvoidmain(String[] args) throwsException {
Serverserver = newServer(8080);
server.setHandler(newHelloHandler());
server.start();
server.join();
}
3.3 Resource Handler
Resource Handler可以用于处理当前目录下的静态内容,例如:
packageorg.eclipse.jetty.embedded;
importorg.eclipse.jetty.server.Handler;
importorg.eclipse.jetty.server.Server;
importorg.eclipse.jetty.server.handler.DefaultHandler;
importorg.eclipse.jetty.server.handler.HandlerList;
importorg.eclipse.jetty.server.handler.ResourceHandler;
importorg.eclipse.jetty.util.log.Log;
importorg.eclipse.jetty.util.log.Logger;
/** Simple JettyFileServer.
* This is asimple example of Jetty configured as a FileServer.
*/
publicclassFileServer {
publicstaticvoidmain(String[] args) throwsException {
Serverserver = newServer(8080);
ResourceHandlerresource_handler = newResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(newString[] { "index.html"});
resource_handler.setResourceBase(".");
HandlerListhandlers = newHandlerList();
handlers.setHandlers(newHandler[] { resource_handler, newDefaultHandler() });
server.setHandler(handlers);
server.start();
server.join();
}
}
注意HandlerList包括ResourceHandler和DefaultHandler,后者主要用于当请求不匹配静态资源时返回404错误页面。
4. 嵌入Connectors
在前面的例子,创建Server实例时传入了一个端口号参数,程序内部会创建一个Connector的默认实例,在指定的端口上监听请求。然而,通常嵌入式的Jetty需要为一个Server实例显式地实例化并配置一个或多个Connector。
下述代码显示了如何实例化、配置并添加一个HTTP connector到Server中:
packageorg.eclipse.jetty.embedded;
importorg.eclipse.jetty.server.Server;
importorg.eclipse.jetty.server.ServerConnector;
/**
* A Jettyserver with one connectors.
*/
publicclassOneConnector {
publicstaticvoidmain(String[] args) throwsException {
Serverserver = newServer();
ServerConnectorhttp = newServerConnector(server);
http.setHost("localhost");
http.setPort(8080);
http.setIdleTimeout(30000);
server.addConnector(http);
server.setHandler(newHelloHandler());
server.start();
server.join();
}
}
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2013-07/86983.htm
Jetty有一个口号:不要把你的应用部署到Jetty中,把Jetty部署到你的应用中。Jetty可以在Java应用程序中向其他POJO一样被实例化,换句话说,以嵌入式的模式运行Jetty是指将Http模块放入你的应用程序中,而非部署你的程序到一个HTTP服务器。
嵌入式Jetty服务器的实现的步骤通常为:
1. 创建一个Server实例
2. 添加/配置Connectors
3. 添加/配置Handlers或者Contexts或者Servlets
4. 启动Server
相关阅读:
Ubuntu 11.04 安装配置 Jetty7 http://www.linuxidc.com/Linux/2011-12/48918.htm
Jetty的配置、部署与API使用 http://www.linuxidc.com/Linux/2011-12/49514.htm
Jetty 9.0.4 发布,支持 Servlet 3.1 非堵塞 I/O http://www.linuxidc.com/Linux/2013-06/86576.htm
1. 准备工作:
下载整合后的jetty-all和servlet api的jar文件。
2. 创建Server
下述代码创建一个Server实例,并启动服务器。
packageorg.eclipse.jetty.embedded;
importorg.eclipse.jetty.server.Server;
/** The simplest possible Jetty server.
*/
publicclassSimplestServer {
publicstaticvoidmain(String[] args) throwsException {
Server server = newServer(8080);
server.start();
server.join();
}
}
由于代码中并没有指定server的处理器(handler),因此在浏览器中输入http://localhost:8080会返回404错误页面。
3. 使用Handlers
为了对每个请求作出相应,Jetty要求为Server设定Handler,Handler可以处理
Ø检查或修改Http请求
Ø生成完整的Http响应
Ø调用另一个Handler
Ø选择一个或多个Handlers调用
3.1 HelloWorld Handler
下述代码显示了一个简单helloworld handler的实现
packageorg.eclipse.jetty.embedded;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.eclipse.jetty.server.Request;
importorg.eclipse.jetty.server.handler.AbstractHandler;
publicclassHelloHandlerextendsAbstractHandler {
finalString _greeting;
finalString _body;
publicHelloHandler() {
_greeting= "Hello World";
_body= null;
}
publicHelloHandler(String greeting) {
_greeting= greeting;
_body= null;
}
publicHelloHandler(String greeting, String body) {
_greeting= greeting;
_body= body;
}
publicvoidhandle(Stringtarget, Request baseRequest, HttpServletRequest request, HttpServletResponseresponse) throwsIOException, ServletException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>"+ _greeting + "</h1>");
if(_body != null) response.getWriter().println(_body);
}
}
handle为AbstractHandler抽象类中定义的抽象方法,我们对请求的处理操作主要通过此方法来完成,handle中参数包括:
target——请求的目标,可以是一个URI或者一个命名dispatcher中的名字。
baseRequest——Jetty的可变请求对象,总是unwrapped。
request——不变的请求对象,可能会被过滤器或servlet包装
response——响应,可能会被过滤器或servlet包装
hadler设定响应的状态,内容类型,并在使用writer生成响应体之前标记请求为已处理。
3.2 运行HelloWorld Handler
publicstaticvoidmain(String[] args) throwsException {
Serverserver = newServer(8080);
server.setHandler(newHelloHandler());
server.start();
server.join();
}
3.3 Resource Handler
Resource Handler可以用于处理当前目录下的静态内容,例如:
packageorg.eclipse.jetty.embedded;
importorg.eclipse.jetty.server.Handler;
importorg.eclipse.jetty.server.Server;
importorg.eclipse.jetty.server.handler.DefaultHandler;
importorg.eclipse.jetty.server.handler.HandlerList;
importorg.eclipse.jetty.server.handler.ResourceHandler;
importorg.eclipse.jetty.util.log.Log;
importorg.eclipse.jetty.util.log.Logger;
/** Simple JettyFileServer.
* This is asimple example of Jetty configured as a FileServer.
*/
publicclassFileServer {
publicstaticvoidmain(String[] args) throwsException {
Serverserver = newServer(8080);
ResourceHandlerresource_handler = newResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(newString[] { "index.html"});
resource_handler.setResourceBase(".");
HandlerListhandlers = newHandlerList();
handlers.setHandlers(newHandler[] { resource_handler, newDefaultHandler() });
server.setHandler(handlers);
server.start();
server.join();
}
}
注意HandlerList包括ResourceHandler和DefaultHandler,后者主要用于当请求不匹配静态资源时返回404错误页面。
4. 嵌入Connectors
在前面的例子,创建Server实例时传入了一个端口号参数,程序内部会创建一个Connector的默认实例,在指定的端口上监听请求。然而,通常嵌入式的Jetty需要为一个Server实例显式地实例化并配置一个或多个Connector。
下述代码显示了如何实例化、配置并添加一个HTTP connector到Server中:
packageorg.eclipse.jetty.embedded;
importorg.eclipse.jetty.server.Server;
importorg.eclipse.jetty.server.ServerConnector;
/**
* A Jettyserver with one connectors.
*/
publicclassOneConnector {
publicstaticvoidmain(String[] args) throwsException {
Serverserver = newServer();
ServerConnectorhttp = newServerConnector(server);
http.setHost("localhost");
http.setPort(8080);
http.setIdleTimeout(30000);
server.addConnector(http);
server.setHandler(newHelloHandler());
server.start();
server.join();
}
}
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2013-07/86983.htm
相关文章推荐
- web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)
- web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)
- JAVA_WEB项目中响应端获取文件路径的方式(tomcat服务器)
- 关于一个具有配置文件的 Java Project 项目(非 web 项目)在服务器上的一个便捷部署
- JavaWeb项目上传到Tomcat服务器访问时报404错误
- Java Web 学习笔记之十:通过Spring启动Jetty服务器
- mye发布web项目到jetty7报错:java.lang.ClassNotFoundException: org.eclipse.jetty.plus.webapp.EnvConfiguration
- Java使用Jetty实现嵌入式Web服务器及Servlet容器
- 实现自动构建编译javaweb项目并发布到N台服务器
- JavaWeb-学习总结一新建web项目启动服务器+JSP基础篇
- JavaWeb项目架构之NFS文件服务器
- 将eclipse下运行的JavaWeb项目部署到其他服务器并用tomcat运行
- java使用jetty作为内嵌服务器启动项目
- 实现自动构建编译javaweb项目并发布到N台服务器
- windows下关于使用eclipse开发web服务器后台项目完整配置(jsp+javabean+servlet)
- Gradle 使用Jetty插件启动web项目时出现"java.lang.OutOfMemoryError: PermGen space"解决方法
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules (web项目不能加载到服务器))
- 【转】java web项目改名之后tomcat服务器项目自动重命名
- javaEE之修改javaWeb服务器的项目名时需要注意的问题
- 将中科院分词软件 ICTCLAS50 嵌入到 Struts2 开发的Java Web项目中