Jetty+jersey总结

本文总结了在JDK1.8环境下,使用Jetty9.2和Jersey1.18进行集成开发的步骤。特别指出jersey-bundle1.19中使用了com.sun.jersey.api.core.PackagesResourceConfig类,而jersey2.x版本变化较大。文章创建了一个Java项目,并介绍了项目目录结构,同时提及了配置jetty的web.xml和jetty.xml文件的问题,但未详细展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

建立java project:

目录如下:


还有一个问题: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);<span style="white-space:pre">			</span>//1.建立server,设置端口
		ServletHolder sh = new ServletHolder(ServletContainer.class);<span style="white-space:pre">	</span>//2.servlet
		
		sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",<span style="white-space:pre">	</span>//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, "/*");<span style="white-space:pre">						</span>    //5.上下文添加servlet
		
		server.setHandler(context);<span style="white-space:pre">						</span>//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<String, javax.ws.rs.core.Cookie> cookie = httpHeaders.getCookies();
		System.out.println(cookie.toString()+"COOKIEEND");
		MultivaluedMap<String, String> headers = httpHeaders.getRequestHeaders();
		 Iterator<String> 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<Lover> list =new ArrayList<Lover>();
			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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值