Jetty+jersey总结

环境:JDK1.8;jetty9.2;jersey1.18  

这里jersey-bundle单独下的1.19 要用到com.sun.jersey.api.core.PackagesResourceConfig这个类

在jersey2.x变动较大,暂时没搞懂;

建立java project:

目录如下:Jetty+jersey总结_第1张图片


还有一个问题:web.xml和jetty.xml的如何配置jetty。


JEntry为server类:

package com.ben.jersey;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

import com.sun.jersey.spi.container.servlet.ServletContainer;

public class JEntry {
	
	public static void main(String [] args){
		
		try{
		Server server =new Server(8088);			//1.建立server,设置端口
		ServletHolder sh = new ServletHolder(ServletContainer.class);	//2.servlet
		
		sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",	//3.请求处理资源
				"com.sun.jersey.api.core.PackagesResourceConfig");
		sh.setInitParameter("com.sun.jersey.config.property.packages","com.ben.res");
		
		ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); //4.上下文
		//项目入口、若改为"/",则为http://8080/加resource路径,而不是http://8080/jettyDemo/+resource
		context.setContextPath("/jettyDemo");
		//在项目入口下,添加servlet的路径,此处即处理/jettyDemo/下的resource
		context.addServlet(sh, "/*");						    //5.上下文添加servlet
		
		server.setHandler(context);						//6.server添加上下文
		
		//join的作用是当前线程阻塞,当server执行完毕后启动阻塞进程
		//当application较重的时侯用join,保证启动成功,这里没有也可以
		server.start();		
		server.join();

		}catch (Exception e){
			
		}
	}

}
res包为资源类:

1。获取路径

package com.ben.res;

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

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;


@Path ("hello")
public class HelloResource {
	
	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String sayHello( ){
		
		return "hello wang";
	}
	
	
	//打印头部和路径
	
	@Path("meihao")
	@GET
	@Produces("text/plain")	
	public  String getRequestContex(
								@Context HttpServletRequest request,@Context HttpHeaders httpHeaders,
			@Context UriInfo uriInfo	){
		
		StringBuilder str = new StringBuilder();
		System.out.println("****** HTTP request mehod and uriinfo ******"); 
		str.append(request.getMethod() +"  YI  ");  
		
		str.append(uriInfo.getPath()+" ER  "+uriInfo.getBaseUri()+"  SAN "
		+uriInfo.getRequestUri()+" si  "+uriInfo.getPath( false)+"五"+uriInfo.getAbsolutePath());
		System.out.println(str.toString());
		
		System.out.println("****** HTTP cookie and headers ******"); 
		Map cookie = httpHeaders.getCookies();
		System.out.println(cookie.toString()+"COOKIEEND");
		MultivaluedMap headers = httpHeaders.getRequestHeaders();
		 Iterator iterator = headers.keySet().iterator();  
		 while(iterator.hasNext()){  
	            String headName = iterator.next();  
	            System.out.println(headName + ":-----" + headers.get(headName) );  
	        }  
		
		 System.out.println(uriInfo.getPathParameters().getFirst("name") );  
		return str.toString();
	}
	
}

 2.获取参数

package com.ben.res;

import javax.print.attribute.standard.Media;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import com.ben.user.Lover;

@Path("lover")
public class LoverRs {
	
		

	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public Response getLover(@DefaultValue("1") @QueryParam("lag") String lag){
	
		if(lag.equals("1")){
		Lover lover = new Lover();
		lover.setName("meihao");
		lover.setAge(25);
		lover.setLoverId("01");
		
		return Response.ok(lover).build();
		}else{
			System.out.println(lag+"=lag");
			return Response.status(Status.NOT_FOUND).build();
		}
		
	}
}

3,以json格式返回:

package com.ben.res;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;


import org.codehaus.jettison.json.JSONObject;

import com.ben.user.Lover;

@Path("jsonRs")
public class JsonRs {
	
	@Path("onejson")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	// 返回一个json.不能把用户类Lover直接放入JSONObject类,必须严格按照(key,value)严格添加
	public Response getJsonrs(@DefaultValue("1") @QueryParam("lag") String lag){
		
		if(lag.equals("1")){			
			Lover lover = new Lover();
			lover.setName("meihao");
			lover.setAge(25);
			lover.setLoverId("03");			
			JSONObject jsonData = new JSONObject();		
			//1.基本方式
//			try {
//				jsonData.put("name","meihao");
//				jsonData.put("age","24");
//				jsonData.put("loverId","02");				
//				return  Response.ok(jsonData).build(); 浏览器结果为一个json对象名称
//				return  Response.ok(jsonData).build();
//			} catch (JSONException e) {//			
//				e.printStackTrace();
//			}
//		}else{
//			Response.status(Status.NOT_FOUND).build();
//		}
			
		//2.在Lover中转换返回一个json
		try {
			//这种方法是不行的,直接放入一个lover对象不能得到想要的格式、必须按字符串放入
//			jsonData.put(lover.getLoverId(),lover);
//			return  Response.ok(jsonData).build(); 浏览器结果为一个json对象名称
//			jsonData= lover.to
			jsonData = lover.toJson();
			return  Response.ok(jsonData).build(); 
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();			
		}
		return Response.status(Status.NOT_FOUND).build();		
		}else{		
		return Response.status(Status.NOT_FOUND).build();
		}		
	}
	
	
	//返回多个json,以1:json1,2:json2的格式.是用到了2个JSON,没有嵌套
	@Path("2Json")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public Response get2Json(){
		JSONObject  json = new JSONObject();
		for(int  i=1;i<=2;i++){
			Lover lover =new Lover();
			lover.setAge(26);
			lover.setName("meihao");
			lover.setLoverId("00"+i);
			
			try {
				json.put(lover.getLoverId(),lover.toJson());
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			}
		if(json!=null){
			return Response.ok(json).build();
		}		
		return null;
	}
	
	
	//返回多个json,以lover:美好,count:3,data:{count:3,lovers:3个json}的格式.属于1个JSON,下data元素嵌套3个json
		@Path("moreJson")
		@GET
		@Produces("application/json;charset=UTF-8")
		public Response getMoreJson(){
			try{
			List list =new ArrayList();
			for(int i=1;i<=3;i++){
				Lover lover =new Lover();
				lover.setAge(26);
				lover.setName("meihao");
				lover.setLoverId("00"+i);
				
				list.add(lover);						
			}
 			JSONArray  jsonArray = new JSONArray ();
 			
 			for(Lover lover:list){
 				jsonArray.put(lover.toJson());
 			}
 			
 			JSONObject JsonData = new JSONObject();
 			JsonData.put("count",list.size());
 			JsonData.put("lovers",jsonArray);
 			
 			JSONObject json = new JSONObject();
 			json.put("lover","美好");
 			json.put("count",list.size());
 			json.put("data", JsonData);
 			
				
			if(json!=null){
				return Response.ok(json).build();
			}		
			}catch(Exception e){
				e.printStackTrace();
			}
			return null;
		}
	
}

浏览器结果:
当然还可以直接返回Lover类型,在Lover类前加@XmlRootElement


你可能感兴趣的:(Jetty+jersey总结)