在Heroku上部署静态网站

2014-04-10 Web

静态网页是无法直接部署在Heroku的,push代码也报错。

解决方法:增加一个index.php,包裹html将静态网站伪装成php网站即可,代码如下:

 <?php
    include_once("index.html");
?>

此时,push 代码,Heroku会自动生成php框架。




用Heroku、snova-c4搭梯子上墙

2014-04-03 Heroku Web

1.snova-c4(翻墙软件)下载

https://code.google.com/p/snova/downloads/list

服务端https://snova.googlecode.com/files/snova-c4-java-server-0.22.0.war

客户端https://snova.googlecode.com/files/gsnova_0.22.1_windows_386.zip

2.在 heroku.com 部署 snova-c4-java-server-0.22.0.war

heroku login

heroku plugins:install https://github.com/heroku/heroku-deploy --只需执行一次,以后不用执行

heroku apps:create --此步创建一个app,名字随机,记住此步的appname("xx.herokuapp.com")。更新不用执行此步

heroku deploy:war --war <path_to_war_file> --app <app_name>

留意执行“heroku apps:create”时的输出,一般会显示创建的域名,为 “xx.herokuapp.com”, 记下该域名,为配置Client准备

输入域名,见下面页面,则说明部署成功

3.解压 gsnova_0.22.1_windows_386.zip

修改gsnova.conf

将GAE的Enable设置为0

C4的Enable设置为1,WorkerNode[0]后面写上你的Heroku二级域名”xx.herokuapp.com”

SPAC的Enable设置为0,确定保存

双击打开gsnova.exe可执行文件。

4.浏览器设置代理

google 就装switchysharp

代理设置端口时要与你在配置文件中设置的端口是一致的。

默认是127.0.0.1 端口48102

翻墙成功


Git简单应用

2014-04-01 Git

First time using Git(首次用git)

cd myproject
git init
# add all your files.  Use can use specific filenames or directories instead of '.'
git add .
git commit -a -m 'Initial commit'
git remote add origin ssh:[email protected]/p/doufe-com/code
git push origin master
git branch --set-upstream master origin/master  # so 'git pull' will work later

Existing repository using Git(已经存在库)

cd myproject
git remote add origin ssh:[email protected]/p/doufe-com/code
git push origin master
git branch --set-upstream master origin/master  # so 'git pull' will work later

用Jersey构建RESTful服务6--Jersey+SQLServer+Hibernate4.3

2014-03-26 Java Jersey REST

#一、总体说明

本例运行演示了用Jersey构建RESTful服务中,如何同过Hibernate将数据持久化进SQLServer的过程

#二、环境

  • 1.上文的项目RestDemo
  • 2.SQLServer2005
  • 3.jtds数据库连接驱动:下载地址最新版本,替换掉上文项目中的mysql-connector

#三、配置

1.与上文mysql的配置不同点主要在hibernate.cfg.xml文件; 配置如下:

<?xml version='1.0' encoding='utf-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  
<hibernate-configuration>  
   <session-factory>  
   <!-- Database connection settings -->  
        <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>  
        <property name="connection.url">jdbc:jtds:sqlserver://192.168.1.10:1433;RestDemo</property>  
        <property name="connection.username">sa</property>  
        <property name="connection.password">aA123456</property>  
        <property name="hibernate.default_schema">RestDemo</property>
        <!-- JDBC connection pool (use the built-in) -->  
        <property name="connection.pool_size">1</property>  
        <!-- SQL dialect -->  
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>  
        <!-- Enable Hibernate's automatic session context management -->  
        <property name="current_session_context_class">thread</property>  
        <!-- Disable the second-level cache  -->  
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>  
        <!-- Echo all executed SQL to stdout -->  
        <property name="show_sql">true</property>  
        <!-- Drop and re-create the database schema on startup -->  
        <property name="hbm2ddl.auto">update</property>  
        <mapping resource="com/waylau/rest/bean/User.hbm.xml"/>  
      </session-factory>  
</hibernate-configuration>  

2.修改于mysql不兼容的sql语句com.waylau.rest.dao.impl中的UserDaoImpl:

getUserById修改成如下:

@Override
public User getUserById(String id) {
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
	Session s = null;
	Transaction t = null;
	User user = null;
	try{
	 s = sessionFactory.openSession();
	 t = s.beginTransaction();
	 String hql = "from User where userId='"+id+"'";  
	 Query query = s.createQuery(hql);  
	 user = (User) query.uniqueResult(); 
	 t.commit();
	}catch(Exception err){
	t.rollback();
	err.printStackTrace();
	}finally{
	s.close();
	}
	return user;
}

getAllUsers给成如下:

@Override
public List<User> getAllUsers() {
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
	Session s = null;
	Transaction t = null;
	List<User> uesrs = null;
	try{
	 s = sessionFactory.openSession();
	 t = s.beginTransaction();
	 String hql = "select * from [RestDemo].dbo.t_user";  
	 Query query = s.createSQLQuery(hql).addEntity(User.class);  
     //query.setCacheable(true); // 设置缓存  
     uesrs = query.list();  
	 t.commit();
	}catch(Exception err){
	t.rollback();
	err.printStackTrace();
	}finally{
	s.close();
	}
	return uesrs;
}

或者如下:

@Override
public List<User> getAllUsers() {
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
	Session s = null;
	Transaction t = null;
	List<User> uesrs = null;
	try{
	 s = sessionFactory.openSession();
	 t = s.beginTransaction();
	 String hql = " from User";  
	 Query query = s.createQuery(hql);  
     //query.setCacheable(true); // 设置缓存  
     uesrs = query.list();  
	 t.commit();
	}catch(Exception err){
	t.rollback();
	err.printStackTrace();
	}finally{
	s.close();
	}
	return uesrs;
}

#四、问题

##可能会出现如下错误

ERROR: 指定的架构名称 "RestDemo" 不存在,或者您没有使用该名称的权限。
三月 26, 2014 3:38:43 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: insert into RestDemo.T_USER (userName, age, USERID) values (?, ?, ?)
三月 26, 2014 3:38:43 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 208, SQLState: S0002
三月 26, 2014 3:38:43 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: 对象名 'RestDemo.T_USER' 无效。

##解决方案:

将配置文件中的hibernate.default_schema值修改为如下即可:

<property name="hibernate.default_schema">RestDemo.dbo</property>  

或者去掉上面的配置,在“User.hbm.xml”修改如下

<class name="User" table="T_USER" schema="RestDemo.dbo">  

本章源码https://github.com/waylau/RestDemo/tree/master/jersey-demo6-sqlserver-hibernate

https://github.com/waylau/RestDemo/tree/master/jersey-demo6.2-sqlserver-hibernate


用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3

2014-03-23 Java Jersey REST

#一、总体说明

本例运行演示了用Jersey构建RESTful服务中,如何同过Hibernate将数据持久化进MySQL的过程

#二、环境

1.上文的项目RestDemo

2.MySQL5.6下载http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16-win32.zip

3.Hibernate4.3.4下载http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.4.Final/hibernate-release-4.3.4.Final.zip

4.Java程序连接MySQL的驱动mysql-connector-java-5.1.29-bin.jar下载 http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.29.zip

#三、数据库准备

1.搭建MySQL数据库

2.创建数据库RestDemo ,及数据表t_user,结构如下

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `userId` varchar(50) NOT NULL,
  `userName` varchar(50) NOT NULL,
  `age` varchar(50) NOT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

PS: userId 非自增长类型,需要在业务添加

#四、引入Hibernate

1.解压Hibernate的包,在lib\required文件夹下所有jar引入进项目

2.解压mysql-connector-java-5.1.29.zip,将mysql-connector-java-5.1.29-bin.jar引入进项目

3.在项目的根目录创建hibernate的配置文件hibernate.cfg.xml,内容如下:

<?xml version='1.0' encoding='utf-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  
<hibernate-configuration>  
   <session-factory>  
   <!-- Database connection settings -->  
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/RestDemo</property>  
        <property name="connection.username">root</property>  
        <property name="connection.password"></property>  
  
        <!-- JDBC connection pool (use the built-in) -->  
        <property name="connection.pool_size">1</property>  
  
        <!-- SQL dialect -->  
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  
        <!-- Enable Hibernate's automatic session context management -->  
        <property name="current_session_context_class">thread</property>  
  
        <!-- Disable the second-level cache  -->  
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>  
   
        <!-- Echo all executed SQL to stdout -->  
        <property name="show_sql">true</property>  
  
        <!-- Drop and re-create the database schema on startup -->  
        <property name="hbm2ddl.auto">update</property>  
  
  
        <mapping resource="com/waylau/rest/bean/User.hbm.xml"/>  
   
    </session-factory>  
</hibernate-configuration>  

4.在项目User.java 的同个目录下,创建该类的映射文件User.hbm.xml

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC  
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  
   
<hibernate-mapping package="com.waylau.rest.bean">  
  
    <class name="User" table="T_USER">  
        <id name="userId" column="USERID"  type="string" >  
            <generator class="assigned"/>  
        </id>  
        <property name="userName" type="string" />  
        <property name="age" type="string" />  
    </class>  
   
</hibernate-mapping>   

5.创建包com.waylau.rest.util,在该包下创建HibernateUtil.java

package com.waylau.rest.util;  
  
import org.hibernate.SessionFactory;  
import org.hibernate.boot.registry.StandardServiceRegistry;  
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;  
import org.hibernate.cfg.Configuration;  
/** 
 * Hibernate 初始化配置工具类 
 * @author waylau.com 
 * 2014-3-23 
 */  
public class HibernateUtil {  
     private static Configuration configuration;  
     private static SessionFactory sessionFactory;  
     private static StandardServiceRegistry standardServiceRegistry;  
        static {  
            try {  
             //第一步:读取Hibernate的配置文件  hibernamte.cfg.xml文件  
              configuration = new Configuration().configure("hibernate.cfg.xml");          
             //第二步:创建服务注册构建器对象,通过配置对象中加载所有的配置信息  
              StandardServiceRegistryBuilder sb = new StandardServiceRegistryBuilder();  
              sb.applySettings(configuration.getProperties());  
             //创建注册服务  
              standardServiceRegistry = sb.build();    
            //第三步:创建会话工厂  
              sessionFactory = configuration.buildSessionFactory(standardServiceRegistry);     
            } catch (Throwable ex) {  
                // Make sure you log the exception, as it might be swallowed  
                System.err.println("Initial SessionFactory creation failed." + ex);  
                throw new ExceptionInInitializerError(ex);  
            }  
        }  
  
        public static SessionFactory getSessionFactory() {  
            return sessionFactory;  
        }  
}  

6.在项目中建com.waylau.rest.dao包,在该包下建立User操作的接口UserDao.java

package com.waylau.rest.dao;  
  
import java.util.List;  
  
import com.waylau.rest.bean.User;  
   
  
/** 
 * User Dao 接口 
 * @author waylau.com 
 * 2014-3-18 
 */  
public interface UserDao {  
      
    public User getUserById(String id);  
  
    public boolean deleteUserById(String id);  
  
    public boolean createUser(User user);  
  
    public boolean updateUser(User user);  
  
    public List<User> getAllUsers();  
}  

7.在项目中建com.waylau.rest.dao.impl包,在该包下建立User操作接口的实现UserDaoImpl.java

package com.waylau.rest.dao.impl;  
  
import java.util.List;  
  
import org.hibernate.Query;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
  
import com.waylau.rest.bean.User;  
import com.waylau.rest.dao.UserDao;  
import com.waylau.rest.util.HibernateUtil;  
/** 
 * 用户DAO实现 
 * @author waylau.com 
 * 2014-3-23 
 */  
public class UserDaoImpl implements UserDao {  
  
    @Override  
    public User getUserById(String id) {  
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();   
        Session s = null;  
        Transaction t = null;  
        User user = null;  
        try{  
         s = sessionFactory.openSession();  
         t = s.beginTransaction();  
         String hql = "from User where userId="+id;    
         Query query = s.createQuery(hql);    
         user = (User) query.uniqueResult();   
         t.commit();  
        }catch(Exception err){  
        t.rollback();  
        err.printStackTrace();  
        }finally{  
        s.close();  
        }  
        return user;  
    }  
  
    @Override  
    public boolean deleteUserById(String id) {  
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();   
        Session s = null;  
        Transaction t = null;  
        boolean flag = false;  
        try{  
         s = sessionFactory.openSession();  
         t = s.beginTransaction();  
         User user = new User();    
         user.setUserId(id);  
         s.delete(user);  
         t.commit();  
         flag = true;  
        }catch(Exception err){  
        t.rollback();  
        err.printStackTrace();  
        }finally{  
        s.close();  
        }  
        return flag;  
    }  
  
    @Override  
    public boolean createUser(User user) {  
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();   
        Session s = null;  
        Transaction t = null;  
        boolean flag = false;  
        try{  
         s = sessionFactory.openSession();  
         t = s.beginTransaction();  
         s.save(user);  
         t.commit();  
         flag = true;  
        }catch(Exception err){  
        t.rollback();  
        err.printStackTrace();  
        }finally{  
        s.close();  
        }  
        return flag;  
    }  
  
    @Override  
    public boolean updateUser(User user) {  
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();   
        Session s = null;  
        Transaction t = null;  
        boolean flag = false;  
        try{  
         s = sessionFactory.openSession();  
         t = s.beginTransaction();  
         s.update(user);  
         t.commit();  
         flag = true;  
        }catch(Exception err){  
        t.rollback();  
        err.printStackTrace();  
        }finally{  
        s.close();  
        }  
        return flag;  
    }  
  
    @Override  
    public List<User> getAllUsers() {  
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();   
        Session s = null;  
        Transaction t = null;  
        List<User> uesrs = null;  
        try{  
         s = sessionFactory.openSession();  
         t = s.beginTransaction();  
         String hql = "select * from t_user";    
         Query query = s.createSQLQuery(hql).addEntity(User.class);    
         query.setCacheable(true); // 设置缓存    
         uesrs = query.list();    
         t.commit();  
        }catch(Exception err){  
        t.rollback();  
        err.printStackTrace();  
        }finally{  
        s.close();  
        }  
        return uesrs;  
    }  
  
}  

8.修改项目中 com.waylau.rest.resources包下的UserResource.java,使之前在内存中模拟CURD转为在数据库中实现

package com.waylau.rest.resources;  
  
import java.util.ArrayList;  
import java.util.List;  
  
import javax.ws.rs.Path;  
import javax.ws.rs.Produces;  
import javax.ws.rs.Consumes;  
import javax.ws.rs.PathParam;  
import javax.ws.rs.core.MediaType;  
import javax.ws.rs.DELETE;  
import javax.ws.rs.GET;  
import javax.ws.rs.POST;  
import javax.ws.rs.PUT;  
  
import com.waylau.rest.bean.User;  
import com.waylau.rest.dao.impl.UserDaoImpl;  
  
/** 
 * 用户资源 
 * @author waylau.com 
 * 2014-3-19 
 */  
@Path("/users")  
public class UserResource {  
    private UserDaoImpl userDaoImpl = new UserDaoImpl();  
    /** 
     * 增加 
     * @param user 
     */  
    @POST  
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
    public void createUser(User user)  
    {  
        userDaoImpl.createUser(user);  
    }  
      
    /** 
     * 删除 
     * @param id 
     */  
    @DELETE  
    @Path("{id}")  
    public void deleteUser(@PathParam("id")String id){  
        userDaoImpl.deleteUserById(id);  
    }  
      
    /** 
     * 修改 
     * @param user 
     */  
    @PUT  
    @Consumes(MediaType.APPLICATION_XML)  
    public void updateUser(User user){  
        userDaoImpl.updateUser(user);  
    }  
   
    /** 
     * 根据id查询 
     * @param id 
     * @return 
     */  
    @GET  
    @Path("{id}")  
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
    public User getUserById(@PathParam("id") String id){  
        User u = userDaoImpl.getUserById(id);  
        return u;  
    }  
     
    /** 
     * 查询所有 
     * @return 
     */  
    @GET  
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
    public List<User> getAllUsers(){       
        List<User> users = new ArrayList<User>();     
        users = userDaoImpl.getAllUsers();  
        return users;  
    }  
      
      
}  

#五、运行 1.将服务端运行后

2.运行UserClient客户端,可以看到数据库已经实现增删改查

完整项目架构如下:

本章源码https://github.com/waylau/RestDemo/tree/master/jersey-demo5-mysql-hibernate


用Jersey构建RESTful服务4--通过jersey-client客户端调用Jersey的Web服务模拟CURD

2014-03-19 Java Jersey REST

#一、总体说明

通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增、删、改、查等操作。 服务端主要是通过内存的方式,来模拟用户的增加、删除、修改、查询等操作。

#二、创建服务端

1.在上文项目中, 在“com.waylau.rest.resources.UserResource“中修改代码, 首先创建一个HashMap,用来保存添加的用户

private static Map<String,User> userMap  = new HashMap<String,User>();  

2.创建增、删、改、查 用户资源等操作


    /** 
     * 增加 
     * @param user 
     */  
    @POST  
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
    public void createStudent(User user)  
    {  
        userMap.put(user.getUserId(), user );  
    }  
      
    /** 
     * 删除 
     * @param id 
     */  
    @DELETE  
    @Path("{id}")  
    public void deleteStudent(@PathParam("id")String id){  
        userMap.remove(id);  
    }  
      
    /** 
     * 修改 
     * @param user 
     */  
    @PUT  
    @Consumes(MediaType.APPLICATION_XML)  
    public void updateStudent(User user){  
        userMap.put(user.getUserId(), user );  
    }  
   
    /** 
     * 根据id查询 
     * @param id 
     * @return 
     */  
    @GET  
    @Path("{id}")  
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
    public User getUserById(@PathParam("id") String id){  
        User u = userMap.get(id);  
        return u;  
    }  
     
    /** 
     * 查询所有 
     * @return 
     */  
    @GET  
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  
    public List<User> getAllUsers(){       
        List<User> users = new ArrayList<User>();     
        users.addAll( userMap.values() );    
        return users;  
    }  

#三、创建客户端程序

1.创建包“com.waylau.rest.client”,在包下建一个UserClient.java,代码如下:


	package com.waylau.rest.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 org.codehaus.jackson.jaxrs.JacksonJsonProvider;  
	  
	import com.waylau.rest.bean.User;  
	  
	   
	/** 
	 * 用户客户端,用来测试资源 
	 * @author waylau.com 
	 * 2014-3-18 
	 */  
	public class UserClient {  
	  
	    private static String serverUri = "http://localhost:8089/RestDemo/rest";  
	    /** 
	     * @param args 
	     */  
	    public static void main(String[] args) {  
	        addUser();  
	        getAllUsers();  
	        updateUser();  
	        getUserById();  
	        getAllUsers();  
	        delUser();  
	        getAllUsers();  
	  
	    }  
	    /** 
	     * 添加用户 
	     */  
	     private static void addUser() {  
	         System.out.println("****增加用户addUser****");  
	         User user = new User("006","Susan","21");    
	         Client client = ClientBuilder.newClient();  
	         WebTarget target = client.target(serverUri + "/users");  
	         Response response = target.request().buildPost(Entity.entity(user, MediaType.APPLICATION_XML)).invoke();  
	         response.close();  
	    }  
	       
	    /** 
	     * 删除用户 
	     */  
	     private static void delUser() {  
	         System.out.println("****删除用户****");  
	         Client client = ClientBuilder.newClient();  
	         WebTarget target = client.target(serverUri + "/users/006");  
	         Response response = target.request().delete();  
	         response.close();  
	    }  
	       
	       
	    /** 
	     * 修改用户 
	     */  
	     private static void updateUser() {  
	         System.out.println("****修改用户updateUser****");  
	         User user = new User("006","Susan","33");    
	         Client client = ClientBuilder.newClient();  
	         WebTarget target = client.target(serverUri + "/users");  
	         Response response = target.request().buildPut( Entity.entity(user, MediaType.APPLICATION_XML)).invoke();  
	         response.close();  
	    }  
	    /** 
	     * 根据id查询用户 
	     */  
	     private static void getUserById() {  
	         System.out.println("****根据id查询用户****");  
	         Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);// 注册json 支持  
	         WebTarget target = client.target(serverUri + "/users/006");  
	         Response response = target.request().get();  
	         User user = response.readEntity(User.class);  
	         System.out.println(user.getUserId() + user.getUserName()  +  user.getAge());  
	         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();  //关闭连接  
	     }  
	       
	}  

#四、运行 启动服务端项目,运行客户端程序UserClient,控制台输出如下

****增加用户addUser****  
****查询所有getAllUsers****  
[{"userId":"006","userName":"Susan","age":"21"}]  
****修改用户updateUser****  
****根据id查询用户****  
006Susan33  
****查询所有getAllUsers****  
[{"userId":"006","userName":"Susan","age":"33"}]  
****删除用户****  
****查询所有getAllUsers****  
[]  

#五、总结 1.客户端如果需要进行JSON转换,需要进行JSON注册

Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);  

2.WebTarget 指明了要请求的资源的地址

3.target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE

本章源码https://github.com/waylau/RestDemo/tree/master/jersey-demo4-client-curd