jetty实例
package com.jetty; import java.io.IOException; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.continuation.Continuation; import org.eclipse.jetty.continuation.ContinuationSupport; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.util.thread.QueuedThreadPool; import com.annotation.HBean; import com.annotation.annoBean.AnnotationBeanLoader; public class JettyServer { private final ExecutorService es = Executors.newCachedThreadPool(); public void start(String host,int port) throws Exception{ Server server = new Server();//服务 //TCP监听 SelectChannelConnector appBeanConn = new SelectChannelConnector(); appBeanConn.setUseDirectBuffers(false); appBeanConn.setHost(host); appBeanConn.setPort(port); appBeanConn.setThreadPool(new QueuedThreadPool(20)); appBeanConn.setName("appBeans"); server.addConnector(appBeanConn); //处理类 server.setHandler(new HttpAppBeanHandler()); server.start(); server.join(); } private class HttpAppBeanHandler extends AbstractHandler{ private static final String CALLTYPE = "calltype"; Map<String, Class<HBean>> map; public HttpAppBeanHandler() throws Exception{ map = AnnotationBeanLoader.loadHandlerBean(); } public void invokeBean(String id,HttpServletRequest request,HttpServletResponse response) throws InstantiationException, IllegalAccessException{ HBean bean = map.get(id).newInstance();//获取bean bean.init(request,response);//初始化bean bean.response(request,response);//相应bean } @Override public void handle(String str, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { // String method = request.getMethod(); final String callType = (String) request.getAttribute(CALLTYPE); final Continuation continuation = ContinuationSupport.getContinuation(request); if(continuation.isExpired()){ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"http bean invocation timeout"); Future<?> f = (Future<?>) request.getAttribute("KEY_INVOCATION_FUTURN"); if(f != null) f.cancel(true); }else{ continuation.setTimeout(1000*3); continuation.suspend(response); Future<?> f = es.submit(new Runnable() { @Override public void run() { try { invokeBean(callType, request, response); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } continuation.complete(); }//run });//future } } } }
server使用httphandler,在handler中根据请求id,分发到处理业务的实体bean接口上
/** * 处理实体类接口 * @author y */ public interface HBean { /** * 初始化bean * @param request * @param response */ void init(HttpServletRequest request,HttpServletResponse response); /** * 相应 * @param request * @param response */ void response(HttpServletRequest request,HttpServletResponse response); }
实体bean用注释作为id区分,加载获取指定目录下的所有类,用注释“包名”-“id"作为实体bean的id
/** * 定义处理bean的ID注解 * 包含ID前缀包,ID名称 * ID前缀包默认值"com.dz" * @author y */ @Target(ElementType.TYPE)//放在哪 @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface HBID { public String id(); public String catalog() default "com.dz"; }
加载子类目录 http://blackproof.iteye.com/blog/2015036
jetty的continuation分析 http://blog.csdn.net/kobejayandy/article/details/11874353
相关推荐
这个“Jetty实例包”是一个完整的Jetty发布版本,特别适合于Java项目,下载后可以直接运行,无需复杂的配置,对于学习和快速部署Java Web应用来说非常方便。 在Java开发中,Jetty以其小巧、高效、易于集成的特点受...
在"jetty实例"中,我们将探讨如何使用Jetty来接收JSON数据,并从中提取特定字符,然后将这些信息展示在浏览器上。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端交互,因为它易于人...
用于 switchblade-core 的自动配置库,提供嵌入式 Jetty 实例。 mvn install 创建一个项目,导入依赖。 确保它是在 Java 8 中使用“-parameters”编译器标志编译的。 创建一个应用程序,启动它。 将类包含在与...
- **多项目支持**:可以同时管理多个Jetty实例,每个实例对应不同的Web项目。 4. **安装与使用** 在Eclipse中,用户可以通过"Help" -> "Install New Software"菜单项,添加插件的更新站点,然后按照向导步骤安装...
此外,还有`jetty-admin`和`jetty-console`等工具,用于远程管理和监控Jetty实例。 ### 《Jetty6_指南书》.doc 文档《Jetty6_指南书》可能包含了Jetty 6版本的详细使用教程、配置示例和常见问题解答。虽然Jetty...
4. **多项目支持**:Eclipse Jetty插件能够同时管理多个项目,每个项目都可以有自己的独立Jetty实例,这样可以方便地测试和比较不同项目的行为。 5. **配置管理**:通过插件,用户可以方便地配置Jetty服务器的各个...
通过这个组件,开发者可以在Eclipse内轻松地启动、停止和配置Jetty实例。 7. **META-INF**: 这个标准的Java存档(JAR)文件目录包含了关于插件的元数据,如MANIFEST.MF文件,其中包含了插件的版本信息、依赖和其他...
它提供了一种便捷的方式来启动和管理Jetty实例,可以通过命令行参数或者配置文件来定制服务器的行为,如设置端口、添加模块、配置日志等。 在使用这些组件构建Jetty环境时,通常会将它们添加到项目的类路径中。...
- JMX支持:Jetty支持JMX(Java Management Extensions),可以通过JMX工具监控和管理Jetty实例。 - Admin Console:通过添加特定模块,可以启用Jetty的管理控制台,查看服务器状态、部署应用等。 8. **社区与...
开发者可以轻松地创建一个Jetty实例,然后直接加载自己的Web应用程序上下文。 提到“jaxrs-ri”这个文件,我们可以推测这是Java RESTful Web Services(JAX-RS)的Reference Implementation。JAX-RS是Java EE的一...
虚拟主机允许在一个Jetty实例上托管多个不同的站点。通过配置虚拟主机,可以在同一台服务器上运行多个具有不同域名的Web应用。 ##### 3.4 安全配置 Jetty提供了丰富的安全机制,包括认证、授权、SSL/TLS加密等。...
对于高可用性和负载均衡的需求,Jetty支持会话复制,通过在多个Jetty实例之间复制会话数据,实现应用的水平扩展。 #### 十三、性能优化 **13.1 线程池** 合理配置线程池可以显著提升Jetty的性能。通过调整线程池...
这通常涉及到查找并激活Jetty的启动服务,然后将你的Web应用bundle部署到这个运行的Jetty实例中。 6. **动态部署和更新**:OSGI的强项在于动态性。你可以随时部署新的Web应用bundle,或者更新现有应用,而无需停止...
- 每个Jetty实例可以运行一个微服务,或者通过集群和负载均衡运行多个实例来提供高可用性。 6. **Jetty的并发模型** - Jetty使用NIO(非阻塞I/O)模型,能够高效处理大量并发连接。 - 它的线程池设计允许动态...
只需右键点击Jetty实例,选择"Start"或"Stop"即可。此外,也可以通过命令行方式执行解压目录中的`start.jar`来控制Jetty的启动和关闭。 6. **Web应用部署** 要在Jetty上部署Web应用,通常需要将`.war`文件放入`...
对于需要高可用性的场景,可以使用Jetty的集群功能,通过多个Jetty实例协同工作来提高系统的可靠性和性能。 #### 十三、性能优化 **13.1 线程池** 合理配置线程池的大小可以显著提高服务器的并发处理能力。 **...
此外,为了保证高可用性,可以在每个Jetty实例中启用session复制,防止用户会话在服务器之间丢失。 五、负载均衡策略 Apache的mod_proxy模块支持多种负载均衡策略,如轮询(round-robin)、最少连接(least ...
- **JMX支持**:通过JMX(Java Management Extensions),可以远程监控和管理Jetty实例。 5. **扩展与集成**: - **与其他框架的兼容**:Jetty可以无缝集成Spring、Struts等Java Web框架,方便开发者构建复杂应用...
6. **多项目支持**:如果你的Eclipse工作空间中有多个项目,插件可以轻松管理每个项目的独立Jetty实例,避免了不同项目间的冲突。 7. **版本选择**:插件允许用户选择不同版本的Jetty服务器,以适应不同的项目需求...
**Struts2 + Maven + Jetty 实例** 在Java Webapp开发中,结合Struts2、Maven和Jetty,可以实现高效的开发流程。首先,创建一个新的Maven项目,并在pom.xml文件中添加Struts2和Jetty的相关依赖。例如: ```xml ...