java应用程序实现jetty 集成jersey 和spring

main 函数


package mymain;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;

import spring.SpringInit;

import com.sun.jersey.spi.container.servlet.ServletContainer;
import com.sun.jersey.spi.spring.container.servlet.SpringServlet;
public class ServletContextServer {
	
	public static void main(String[] args) throws Exception {  
		 init();
    }  
	public static  void init() throws Exception{
		Server server = new Server(8080);  
        ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);  
        contextHandler.setContextPath("/");  
        // http://localhost:8080/hello  
//        context.addServlet(new ServletHolder(new HelloServlet()), "/hello.do");  
        // http://localhost:8080/hello/kongxx  
//        context.addServlet(new ServletHolder(new HelloServlet("Hello Kongxx!")), "/hello/kongxx");  
  
        // http://localhost:8080/goodbye  
//        context.addServlet(new ServletHolder(new GoodbyeServlet()), "/goodbye");  
        // http://localhost:8080/goodbye/kongxx  
//        context.addServlet(new ServletHolder(new GoodbyeServlet("Goodbye kongxx!")), "/goodbye/kongxx");  
          
        /**
         * 当 jersey 不集成spring 时,使用的是 ServletContainer.class 
         */
        ServletHolder holder1 = new ServletHolder(ServletContainer.class);
        holder1.setInitParameter("com.sun.jersey.config.property.packages", "jersey");
        holder1.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
        contextHandler.addServlet(holder1, "/test/*");
        
        /**
         * 当 jersey 集成spring 时,使用的是 SpringServlet.class 
         */
        ServletHolder holder2 = new ServletHolder(SpringServlet.class);
        /**
         * 加载spring 配置文件
         */
        ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:application.xml");
         
        SpringInit.setApplicationContext(ctx);
        System.out.println(SpringInit.getConfigLoad().getWebPort());
        holder2.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
        /**
         * 设置处理器(servlet )所在的包,如果不设置,会找不到那个处理的servlet
         */
        holder2.setInitParameter("com.sun.jersey.config.property.packages", "jersey");
        /**
         * 使 jersey 设置的返回类型 (json。。。)有效 
         */
        holder2.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
        /**
         * 为jersey的ServletContextHandler 设置  ApplicationContext 
         */
        contextHandler.setClassLoader(ctx.getClassLoader());  
		XmlWebApplicationContext xmlWebAppContext = new XmlWebApplicationContext();  
		xmlWebAppContext.setParent(ctx);  
		xmlWebAppContext.setConfigLocation("");  
		xmlWebAppContext.setServletContext(contextHandler.getServletContext());  
		xmlWebAppContext.refresh();  
		contextHandler.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,xmlWebAppContext); 
		/**
		 * 设置  servlet对应的访问路径
		 */
		contextHandler.addServlet(holder2, "/springTest/*");
        
        server.setHandler(contextHandler);  
        server.start();  
        System.out.println("**********************************");
        System.out.println("**                              **");
        System.out.println("**             启动成功                                        **");
        System.out.println("**                              **");
        System.out.println("**********************************");
        server.join();   
	}
}

jersey  实现的rest 风格的servlet 

package jersey;

import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import spring.SpringInit;
import net.sf.json.JSONObject;



@Path("/leo")  
public class JerseyDemo {
	
	private String name = "saltwater_leo";
	
	@GET
	@Path("/non_spring/{name}")
	@Produces(MediaType.APPLICATION_JSON)  
	public String test1(@PathParam("name") String name){
		if(name !=null && !"".equals(name)){
			this.name = name ;
		}
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", this.name);
		return JSONObject.fromObject(map).toString();
	}
	
	
	@GET
	@Path("/spring")
	@Produces(MediaType.APPLICATION_JSON)  
	public String test2( ){
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", SpringInit.getConfigLoad().getWebPort());
		return JSONObject.fromObject(map).toString();
	}
}


spring 管理bean  的类

package spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringInit  {
	private  static ApplicationContext applicationContext ;
	private static ConfigLoader configLoad ;

	public  static void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		SpringInit.applicationContext = applicationContext;
		configLoad = (ConfigLoader)SpringInit.applicationContext.getBean("configLoader");
		
	}

	public static  ConfigLoader getConfigLoad() {
		return configLoad;
	}

	public void setConfigLoad(ConfigLoader configLoad) {
		SpringInit.configLoad = configLoad;
	}

	public  static ApplicationContext getApplicationContext() {
		return applicationContext;
	}
	
}

 


源码 :  http://download.csdn.net/detail/liuao107329/9537781




使用 Prometheus 和 Grafana 监视基于 JettyJava 应用程序可以帮助你收集和分析应用程序的性能指标,并据此进行优化和调整。下面是一些基本步骤: 1. 安装 Prometheus 和 Grafana。可以从官网下载并安装它们,也可以使用 Docker 镜像启动。 2. 在应用程序中添加 Prometheus 客户端库。这个库提供了一些 API,可以让应用程序将性能指标暴露给 Prometheus。 3. 在应用程序的启动脚本中添加启动参数,以启用 Prometheus 客户端库。例如,可以添加以下参数: ``` -javaagent:/path/to/prometheus/jmx_prometheus_javaagent.jar=8080:/path/to/config.yml ``` 这个参数会启动一个 Java 代理,将应用程序的性能指标暴露给 Prometheus。8080 是代理监听的端口号,config.yml 是代理的配置文件。 4. 在 Prometheus 的配置文件中添加监控目标。例如,可以添加以下配置: ``` - job_name: 'jetty' metrics_path: '/metrics' static_configs: - targets: ['localhost:8080'] ``` 这个配置告诉 Prometheus 监视名为 "jetty" 的目标,并从该目标的 /metrics 路径获取指标。目标地址为 localhost:8080。 5. 启动应用程序和 Prometheus,并验证指标是否被成功收集。可以使用 Prometheus 的 Web UI 来查看指标。 6. 在 Grafana 中创建仪表盘,将应用程序的指标展示出来。可以使用 Grafana 的模板和图表来构建仪表盘。 这些步骤只是一个简单的指导,具体的实现可能因应用程序和环境的不同而有所不同。但总的来说,使用 Prometheus 和 Grafana 监视基于 JettyJava 应用程序是相对简单和方便的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值