转载

Maven+jersey快速构建

编辑推荐:
本文来自于csdn,本文介绍了一个实现了REST的三个基本get、put、delete功能,数据存储在mongo的实例。

源码下载地址:http://pan.baidu.com/s/1gdIN4fp

Jersey是JAX-RS(JSR311)开源参考实现用于构建RESTful Web service。此外Jersey还提供一些额外的API和扩展机制,所以开发人员能够按照自己的需要对Jersey进行扩展

理论的东西在这里我就不多说了!这个实例是实现了REST的三个基本get、put、delete功能,数据存储在mongo里。下面的截图是整个工程的目录结构

Maven+jersey快速构建

工程入口是App.java 里的main,

运行结果如下图:运行app类中入口后,程序监听8080端口,大家会发现,我们不需要tomcat等web容器即可轻松创建web服务,简洁快速。

Maven+jersey快速构建

下面这张图是运行完TestClient测试客户端的输出结果,增删改查输出结果

Maven+jersey快速构建

下面这张图是 运行添加数据后,mongo中添加成功的数据。

Maven+jersey快速构建

下面我来依依列出代码

一、maven的pom.xml代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.example</groupId>
 <artifactId>jerseyUserDemo</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>jerseyUserDemo Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <repositories>
 <repository>
 <id>snapshot-repository.java.net</id>
 <name>Java.net Snapshot Repository for Maven</name>
 <url>https://maven.java.net/content/repositories
/snapshots/</url>
 <layout>default</layout>
 </repository>
 <repository>
 <id>spring.test-mvc</id>
 <url>http://repo.springsource.org/libs-milestone</url>
 </repository>
 <repository>
 <id>repo1</id>
 <name>repo1</name>
 <url>http://repo1.maven.org/maven2</url>
 </repository>
 <repository>
 <id>jboss-cache</id>
 <name>jboss-cache</name>
 <url>http://repository.jboss.org/maven2</url>
 </repository>
 <repository>
 <id>mvnsearch</id>
 <name>mvnsearch Maven Repository</name>
 <url>http://www.mvnsearch.org/maven2</url>
 </repository>
 <repository>
 <id>ibiblio</id>
 <name>ibiblio Maven Repository</name>
 <url>http://www.ibiblio.org/maven2</url>
 </repository>
 <repository>
 <id>mirrors.ibiblio</id>
 <name>mirrors.ibiblio Maven Repository</name>
 <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
 </repository>
 </repositories>
 <dependencies>
 <!-- Tomcat Servlet API -->
 <dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <version>3.1.0</version>
 </dependency>
 
 <dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-grizzly2-servlet</artifactId>
 <version>2.13</version>
 </dependency>
 
 <dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-servlet-core</artifactId>
 <version>2.13</version>
 </dependency>
 <dependency>
 <groupId>org.glassfish.jersey.media</groupId>
 <artifactId>jersey-media-json-jackson</artifactId>
 <version>2.13</version>
 </dependency>
 <!-- Required only when you are using JAX-RS Client -->
 <dependency>
 <groupId>org.glassfish.jersey.core</groupId>
 <artifactId>jersey-client</artifactId>
 <version>2.13</version>
 </dependency>
 <!-- mongodb -->
 <dependency>
 <groupId>org.mongodb</groupId>
 <artifactId>mongo-java-driver</artifactId>
 <version>2.12.4</version>
 </dependency>
 
 
 </dependencies>
 <build>
 <finalName>jerseyUserDemo</finalName>
 </build>
 </project>

二、User实体类代码如下

package model;
 
 import java.io.Serializable;
 
 
 public class User implements Serializable{
 
 /**
 * 
 */
 private static final long serialVersionUID = 1L;
 private String id;
 private String userName;
 private String phone;
 public User(){}
 public User(String id, String userName, String phone) {
 super();
 this.id = id;
 this.userName = userName;
 this.phone = phone;
 }
 public String getId() {
 return id;
 }
 public void setId(String id) {
 this.id = id;
 }
 public String getUserName() {
 return userName;
 }
 public void setUserName(String userName) {
 this.userName = userName;
 }
 public String getPhone() {
 return phone;
 }
 public void setPhone(String phone) {
 this.phone = phone;
 } 
 @Override
 public String toString() {
 return "User [id=" + id + ", userName=" + userName + ", phone=" + phone + "]";
 }
 @Override
 public int hashCode() {
 final int prime = 31;
 int result = 1;
 result = prime * result + ((id == null) ? 0 : id.hashCode());
 return result;
 }
 @Override
 public boolean equals(Object obj) {
 if (this == obj)
 return true;
 if (obj == null)
 return false;
 if (getClass() != obj.getClass())
 return false;
 User other = (User) obj;
 if (id == null) {
 if (other.id != null)
 return false;
 } else if (!id.equals(other.id))
 return false;
 return true;
 }
 
 }

三、UserResource类代码如下,这里制定了访问的路径。

package resource;
 
 import java.util.List;
 
 import javax.inject.Singleton;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 
 import model.User;
 import service.UserService;
 
 @Singleton
 @Path("/users")
 public class UserResource {
 
 @GET
 @Produces({ "application/json", "application/xml" })
 public List<User> getMyResources() {
 List<User> users = UserService.getUsers(); 
 return users;
 }
 
 @GET
 @Path("/list")
 @Produces({ "application/json", "application/xml" })
 public List<User> getListOfUsers() {
 List<User> users = UserService.getUsers(); 
 return users;
 }
 
 @GET
 @Path("/{id}")
 @Produces({ "application/json" })
 public User getUser(@PathParam("id") String id) { 
 User u=UserService.getUserById(id);
 return u;
 }
 
 @PUT
 //@Path("/ids/{id}")
 @Consumes({ "application/json", "application/xml" })
 public void putUser(User user) {
 
 UserService.updateUser(user); 
 
 }
 @POST
 //@Path("/ids/{id}")
 @Consumes({ "application/json", "application/xml" })
 public void postUser(User user) {
 
 UserService.addUser(user); 
 
 }
 @DELETE
 @Path("/{id}")
 public void deleteUser(@PathParam("id") String id) { 
 UserService.delUserById(id);
 }
 
 }
 

四、MyApplication类,通过将UserResourcer

package main;
 
 import java.util.HashSet;
 import java.util.Set;
 
 import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.core.Application;
 
 import resource.UserResource;
 
 /**
 * @author Pavel Bucek (pavel.bucek at oracle.com)
 */
 @ApplicationPath("/")
 public class MyApplication extends Application {
 @Override
 public Set<Class<?>> getClasses() {
 final Set<Class<?>> classes = new HashSet<Class<?>>();
 // register root resource
 classes.add(UserResource.class);
 return classes;
 }
 }

五、App类是整个工程的入口,通过运行该类中的main函数启动即可

启动后可以通过运行TestClient类中的客户端测试代码进行测试。我继续贴代码。

代码如下:

package main;
 
 import java.io.IOException;
 import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.glassfish.grizzly.http.server.HttpServer;
 import org.glassfish.jersey.grizzly2.servlet.
GrizzlyWebContainerFactory;
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.servlet.ServletContainer;
 
 import resource.UserResource;
 
 /**
 * @author Pavel Bucek (pavel.bucek at oracle.com)
 */
 public class App {
 
 private static final URI BASE_URI = URI.create("http://localhost:8080/webapp/");
 public static final String ROOT_PATH = "users";
 
 public static void main(String[] args) {
 try {
 
 Map<String, String> initParams = new HashMap<String, 
 String>();
 initParams.put(ServerProperties.PROVIDER_PACKAGES, UserResource.class.getPackage().getName());
 
 final HttpServer server = GrizzlyWebContainerFactory.create(BASE_URI, ServletContainer.class, initParams);
 
 System.out.println(String.format("Application
 started.%nTry out %s%s%nHit enter to stop it...",
 BASE_URI, ROOT_PATH));
 System.in.read();
 server.shutdownNow();
 } catch (IOException ex) {
 Logger.getLogger(App.class.getName()).log(Level.SEVERE,
 null, ex);
 }
 }
 }

六、TestClient测试客户端代码:

 
 package client;
 
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import model.User;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 /**
 * 
 * @author zhongtianyi
 *
 */
 public class TestClient {
 
 private static String serverUri = "http://localhost:8080/webapp";
 
 /**
 * @param args
 */
 public static void main(String[] args) {
 User user = new User("006", "tianyi", "12355123891");
 addUser(user);
 getAllUsers();
 user = new User("006", "tianyi", "33");
 String id = user.getId();
 updateUser(user);
 getUserById(id);
 getAllUsers();
 delUser(id);
 getAllUsers();
 
 }
 
 /**
 * 添加用户
 */
 private static void addUser(User user) {
 System.out.println("****增加用户addUser****");
 
 Client client = ClientBuilder.newClient();
 WebTarget target = client.target(serverUri + "/users");
 Response response = target.request()
 .buildPost(Entity.entity(user, MediaType.APPLICATION_JSON))
 .invoke();
 response.close();
 }
 
 /**
 * 删除用户
 */
 private static void delUser(String id) {
 System.out.println("****删除用户****");
 Client client = ClientBuilder.newClient();
 WebTarget target = client.target(serverUri + "/users/" + id);
 Response response = target.request().delete();
 response.close();
 }
 
 /**
 * 修改用户
 */
 private static void updateUser(User user) {
 System.out.println("****修改用户updateUser****");
 
 Client client = ClientBuilder.newClient();
 WebTarget target = client.target(serverUri + "/users");
 Response response = target.request()
 .buildPut(Entity.entity(user, MediaType.APPLICATION_JSON))
 .invoke();
 response.close();
 }
 
 /**
 * 根据id查询用户
 */
 private static void getUserById(String id) {
 System.out.println("****根据id查询用户****");
 Client client = ClientBuilder.newClient().register(
 JacksonJsonProvider.class);// 注册json 支持
 WebTarget target = client.target(serverUri + "/users/" + id);
 Response response = target.request().get();
 User user = response.readEntity(User.class);
 System.out.println(user.getId() + user.getUserName());
 response.close();
 }
 
 /**
 * 查询所有用户
 */
 private static void getAllUsers() {
 System.out.println("****查询所有getAllUsers****");
 
 Client client = ClientBuilder.newClient();
 
 WebTarget target = client.target(serverUri + "/users");
 Response response = target.request().get();
 String value = response.readEntity(String.class);
 System.out.println(value);
 response.close(); // 关闭连接
 } 
}

七、其他代码

package utils;
 
 import java.util.ArrayList; 
 import java.util.List;
 
 import model.User;
 
 import com.mongodb.BasicDBList;
 import com.mongodb.BasicDBObject;
 import com.mongodb.DB;
 import com.mongodb.DBCollection;
 import com.mongodb.DBCursor;
 import com.mongodb.DBObject;
 import com.mongodb.Mongo;
 import com.mongodb.MongoOptions;
 import com.mongodb.ServerAddress;
 
 public class MongoDBUtils {
 
 public static Mongo mongo = null;
 
 public static DB db = null;
 private static String dbName = "UserAdmin";
 private static String mongodbServerAddress = "127.0.0.1:2005";
 private static String colName = "User";
 
 public static DBCollection getDBCollection() {
 try {
 if (mongo == null) {
 
 List<ServerAddress> addList = new ArrayList<ServerAddress>();
 String[] addrs = mongodbServerAddress.split(";");
 for (String address : addrs) {
 ServerAddress addr = new ServerAddress(address);
 addList.add(addr);
 }
 mongo = new Mongo(addList); 
 // mongodb连接池数
 MongoOptions opt = mongo.getMongoOptions();
 opt.connectionsPerHost = 400;
 opt.threadsAllowedToBlockForConnectionMultiplier = 20;
 opt.maxWaitTime = 5000;
 opt.socketTimeout = 0;
 opt.connectTimeout = 15000;
 
 }
 
 if (db == null) {
 db = mongo.getDB(dbName);
 }
 
 } catch (Exception e) {
 
 }
 return db.getCollection(colName);
 }
 
 public static User findUserByID(String id) {
 
 DBCollection coll = null;
 
 coll = getDBCollection();
 
 
 DBCursor cur = coll.find(new BasicDBObject("id", id));
 User user = new User();
 if (cur.size() > 0) {
 
 while (cur.hasNext()) {
 
 DBObject o = (DBObject) cur.next();
 
 String userName = o.get("username").toString();
 
 String phone = o.get("phone").toString();
 user.setId(id);
 user.setPhone(phone);
 user.setUserName(userName);
 }
 }
 
 return user;
 }
 
 public static List<User> findUsers() {
 
 DBCollection coll = null;
 DBObject queryType = null;
 
 coll = getDBCollection();
 
 List<User> users=new ArrayList<User>();
 DBCursor cur = coll.find();
 
 if (cur.size() > 0) {
 
 while (cur.hasNext()) {
 User user = new User();
 DBObject o = (DBObject) cur.next();
 
 String id = o.get("id").toString();
 String userName = o.get("username").toString();
 
 String phone = o.get("phone").toString();
 user.setId(id);
 user.setPhone(phone);
 user.setUserName(userName);
 users.add(user);
 }
 }
 
 return users;
 }
 
 public static void removeByID(String value) {
 
 DBCollection coll = null;
 try {
 coll = getDBCollection();
 coll.remove(new BasicDBObject().append("id", value));
 } catch (Exception e) {
 
 }
 
 }
 
 public static void insertUserData(User user) {
 
 DBCollection dbCol = null;
 try {
 dbCol = getDBCollection();
 
 List<DBObject> dbList = new ArrayList<DBObject>();
 BasicDBObject subscribe = new BasicDBObject();
 
 subscribe.put("id", user.getId());
 subscribe.put("username", user.getUserName());
 subscribe.put("phone", user.getPhone());
 
 dbList.add(subscribe);
 dbCol.insert(dbList);
 } catch (Exception e) {
 
 }
 }
 
 public static void updateByUser(User user) {
 
 DBCollection coll = null;
 try {
 coll = getDBCollection();
 
 BasicDBObject newDocument3 = new BasicDBObject().append("$set",
 new BasicDBObject().append("username", user.getUserName())
 .append("phone", user.getPhone()));
 
 coll.update(new BasicDBObject().append("id", user.getId()), newDocument3);
 
 } catch (Exception e) {
 
 }
 
 }
 
 public static void close() {
 try {
 if (mongo != null) {
 mongo.close();
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 
 }
 }
package service;
 
 import java.util.List;
 
 import dao.UserDao;
 import model.User;
 
 public class UserService {
 
 public static User getUserById(String id) {
 
 return UserDao.getUserById(id);
 }
 
 public static List<User> getUsers() {
 
 return UserDao.getUsers();
 }
 
 public static void delUserById(String id) {
 UserDao.delUserById(id);
 }
 
 
 
 public static void addUser(User user) {
 
 UserDao.addUser(user);
 }
 
 public static void updateUser(User user) {
 
 UserDao.updateUser(user);
 }
 
 }
package dao;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import utils.MongoDBUtils;
 import model.User;
 
 public class UserDao {
 
 private UserDao() {
 }
 
 private static List<User> users = new ArrayList<User>();
 
 public static void addUser(User u) {
 //users.add(u);
 MongoDBUtils.insertUserData(u);
 }
 
 public static User getUserById(String id) {
 return MongoDBUtils.findUserByID(id);
 /*for (User u : users) {
 if (u.getId().equals(id)) {
 return u;
 }
 }
 return null;*/
 
 }
 
 public static List<User> getUsers() {
 return MongoDBUtils.findUsers();
 }
 
 public static void delUserById(String id) {
 MongoDBUtils.removeByID(id);
 /*User user = null;
 for (User u : users) {
 if (u.getId().equals(id)) {
 user = u;
 }
 }
 
 if (user != null) {
 users.remove(user);
 }*/
 }
 
 public static void updateUser(User user) {
 /*
 for (User u : users) {
 if (u.getId().equals(user.getId())) {
 u.setUserName(user.getUserName());
 u.setPhone(user.getPhone());
 }
 }*/
 MongoDBUtils.updateByUser(user);
 
 }
 
 
 
 }

运行结果如下图:运行app类中入口后,程序监听8080端口,大家会发现,我们不需要tomcat等web容器即可轻松创建web服务,简洁快速。

下面这张图是运行完TestClient测试客户端的输出结果,增删改查输出结果

.

Maven+jersey快速构建

下面这张图是 运行添加数据后,mongo中添加成功的数据。

Maven+jersey快速构建

文章转自:http://blog.csdn.net/tianyijavaoracle

/article/details/41708217

原文  http://www.uml.org.cn/j2ee/201904163.asp
正文到此结束
Loading...