`

jetty实例

阅读更多

 

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

 

 

 

 

1
0
分享到:
评论

相关推荐

    Jetty实例包

    这个“Jetty实例包”是一个完整的Jetty发布版本,特别适合于Java项目,下载后可以直接运行,无需复杂的配置,对于学习和快速部署Java Web应用来说非常方便。 在Java开发中,Jetty以其小巧、高效、易于集成的特点受...

    jetty嵌入式实例

    在"jetty实例"中,我们将探讨如何使用Jetty来接收JSON数据,并从中提取特定字符,然后将这些信息展示在浏览器上。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端交互,因为它易于人...

    switchblade-jetty:提供嵌入式 Jetty 实例的 switchblade-core 的自动配置库

    用于 switchblade-core 的自动配置库,提供嵌入式 Jetty 实例。 mvn install 创建一个项目,导入依赖。 确保它是在 Java 8 中使用“-parameters”编译器标志编译的。 创建一个应用程序,启动它。 将类包含在与...

    Eclipse3 jetty插件

    - **多项目支持**:可以同时管理多个Jetty实例,每个实例对应不同的Web项目。 4. **安装与使用** 在Eclipse中,用户可以通过"Help" -&gt; "Install New Software"菜单项,添加插件的更新站点,然后按照向导步骤安装...

    Jetty

    此外,还有`jetty-admin`和`jetty-console`等工具,用于远程管理和监控Jetty实例。 ### 《Jetty6_指南书》.doc 文档《Jetty6_指南书》可能包含了Jetty 6版本的详细使用教程、配置示例和常见问题解答。虽然Jetty...

    eclipse-jetty插件

    4. **多项目支持**:Eclipse Jetty插件能够同时管理多个项目,每个项目都可以有自己的独立Jetty实例,这样可以方便地测试和比较不同项目的行为。 5. **配置管理**:通过插件,用户可以方便地配置Jetty服务器的各个...

    run-jetty-run.rar

    通过这个组件,开发者可以在Eclipse内轻松地启动、停止和配置Jetty实例。 7. **META-INF**: 这个标准的Java存档(JAR)文件目录包含了关于插件的元数据,如MANIFEST.MF文件,其中包含了插件的版本信息、依赖和其他...

    jetty的四个包

    它提供了一种便捷的方式来启动和管理Jetty实例,可以通过命令行参数或者配置文件来定制服务器的行为,如设置端口、添加模块、配置日志等。 在使用这些组件构建Jetty环境时,通常会将它们添加到项目的类路径中。...

    jetty 事例

    - JMX支持:Jetty支持JMX(Java Management Extensions),可以通过JMX工具监控和管理Jetty实例。 - Admin Console:通过添加特定模块,可以启用Jetty的管理控制台,查看服务器状态、部署应用等。 8. **社区与...

    jetty 2.9 release 包

    开发者可以轻松地创建一个Jetty实例,然后直接加载自己的Web应用程序上下文。 提到“jaxrs-ri”这个文件,我们可以推测这是Java RESTful Web Services(JAX-RS)的Reference Implementation。JAX-RS是Java EE的一...

    jetty-document

    虚拟主机允许在一个Jetty实例上托管多个不同的站点。通过配置虚拟主机,可以在同一台服务器上运行多个具有不同域名的Web应用。 ##### 3.4 安全配置 Jetty提供了丰富的安全机制,包括认证、授权、SSL/TLS加密等。...

    Jetty权威指南.pdf

    对于高可用性和负载均衡的需求,Jetty支持会话复制,通过在多个Jetty实例之间复制会话数据,实现应用的水平扩展。 #### 十三、性能优化 **13.1 线程池** 合理配置线程池可以显著提升Jetty的性能。通过调整线程池...

    OSGI-Jetty示例,Java源码,很得劲

    这通常涉及到查找并激活Jetty的启动服务,然后将你的Web应用bundle部署到这个运行的Jetty实例中。 6. **动态部署和更新**:OSGI的强项在于动态性。你可以随时部署新的Web应用bundle,或者更新现有应用,而无需停止...

    jetty简单启动web服务第二版

    - 每个Jetty实例可以运行一个微服务,或者通过集群和负载均衡运行多个实例来提供高可用性。 6. **Jetty的并发模型** - Jetty使用NIO(非阻塞I/O)模型,能够高效处理大量并发连接。 - 它的线程池设计允许动态...

    jetty免安装版

    只需右键点击Jetty实例,选择"Start"或"Stop"即可。此外,也可以通过命令行方式执行解压目录中的`start.jar`来控制Jetty的启动和关闭。 6. **Web应用部署** 要在Jetty上部署Web应用,通常需要将`.war`文件放入`...

    jetty指导书

    对于需要高可用性的场景,可以使用Jetty的集群功能,通过多个Jetty实例协同工作来提高系统的可靠性和性能。 #### 十三、性能优化 **13.1 线程池** 合理配置线程池的大小可以显著提高服务器的并发处理能力。 **...

    apache+jetty负载配置案例

    此外,为了保证高可用性,可以在每个Jetty实例中启用session复制,防止用户会话在服务器之间丢失。 五、负载均衡策略 Apache的mod_proxy模块支持多种负载均衡策略,如轮询(round-robin)、最少连接(least ...

    jetty-distribution-9.0.6.v20130930

    - **JMX支持**:通过JMX(Java Management Extensions),可以远程监控和管理Jetty实例。 5. **扩展与集成**: - **与其他框架的兼容**:Jetty可以无缝集成Spring、Struts等Java Web框架,方便开发者构建复杂应用...

    阿里巴巴Eclipse Jetty容器插件

    6. **多项目支持**:如果你的Eclipse工作空间中有多个项目,插件可以轻松管理每个项目的独立Jetty实例,避免了不同项目间的冲突。 7. **版本选择**:插件允许用户选择不同版本的Jetty服务器,以适应不同的项目需求...

    struts2+maven+jetty 示例

    **Struts2 + Maven + Jetty 实例** 在Java Webapp开发中,结合Struts2、Maven和Jetty,可以实现高效的开发流程。首先,创建一个新的Maven项目,并在pom.xml文件中添加Struts2和Jetty的相关依赖。例如: ```xml ...

Global site tag (gtag.js) - Google Analytics