通过代码学REST之二——Restlet框架学习

/**
 *  
 * @摘自
 * 
http://www.restlet.org/documentation/1.1/firstResource
 * 一个服务器端的组件,用来启动一个服务,监听8182端口,并将/firstResource的URL请求,交给
 * FirstResourceApplication
 
*/
public   class  FirstResourceServerMain
{
    
public   static   void  main(String[] args)  throws  Exception
    {
        
//  Create a new Component.
        Component component  =   new  Component();
        
//  Add a new HTTP server listening on port 8182.
        component.getServers().add(Protocol.HTTP,  8182 );
        
//  Attach the sample application.
        component.getDefaultHost().attach( " /firstResource " , new  FirstResourceApplication());
        
//  Start the component.
        component.start();
    }
}
package  firstSteps;

import  java.util.concurrent.ConcurrentHashMap;
import  java.util.concurrent.ConcurrentMap;

import  org.restlet.Application;
import  org.restlet.Restlet;
import  org.restlet.Router;
-----------------------------------------------------这个类类似于Struts中的中央控制器的作用--------------------------------------------------
/* */
public   class  FirstResourceApplication  extends  Application
{  
      
        
/**  The list of items is persisted in memory.  */   
        
private   final  ConcurrentMap < String, Item >  items  =    new  ConcurrentHashMap < String, Item > ();  
      
        
/**  
         * Creates a root Restlet that will receive all incoming calls. 
         * In general, instances of Router, Filter or Handler classes will be used as initial application Restlet. 
         * The default implementation returns null by default. This method is intended to be overriden by subclasses. 
         * 
         
*/   
        @Override  
        
public  Restlet createRoot() 
        {  
            
//  Create a router Restlet that defines routes.  
            Router router  =   new  Router(getContext());  
            
//  Defines a route for the resource "list of items"  
            router.attach( " /items " , ItemsResource. class );  
            
//  Defines a route for the resource "item"  
            router.attach( " /items/{itemName} " , ItemResource. class );  
      
            
return  router;  
        }  
      
        
/**  
         * Returns the list of registered items. 
         *  
         * 
@return  the list of registered items. 
         
*/   
        
public  ConcurrentMap < String, Item >  getItems()
        {  
            
return  items;  
        }  
    }  

 

package  firstSteps;

import  java.io.IOException;

import  org.restlet.Client;
import  org.restlet.data.Form;
import  org.restlet.data.Protocol;
import  org.restlet.data.Reference;
import  org.restlet.data.Response;
import  org.restlet.resource.Representation;

public   class  FirstResourceClientMain 
{
        
public   static   void  main(String[] args)  throws  IOException
        {  
                
//  Define our Restlet HTTP client.  
                Client client  =   new  Client(Protocol.HTTP);   // 作为一个通用连接器
                
//  The URI of the resource "list of items".  
                Reference itemsUri  =   new  Reference( " http://localhost:8102/firstResource/items " );  
                
//  Create a new item  
                Item item  =   new  Item( " item1 " " this is an item. " );  
                Reference itemUri 
=  createItem(item, client, itemsUri);  
                
if  (itemUri  !=   null ) {  
                    
//  Prints the representation of the newly created resource.  
                    get(client, itemUri);  
                }  
          
                
//  Prints the list of registered items.  
                get(client, itemsUri);  
          
                
//  Update the item  
                item.setDescription( " This is an other description " );  
                updateItem(item, client, itemUri);  
          
                
//  Prints the list of registered items.  
                get(client, itemsUri);  
          
                
//  delete the item  
                deleteItem(client, itemUri);  
          
                
//  Print the list of registered items.  
                get(client, itemsUri);  
            }  
          
            
/**  
             * Try to create a new item. 
             * 
             * 
@param  item 
             *                the new item. 
             * 
@param  client 
             *                the Restlet HTTP client. 
             * 
@param  itemsUri 
             *                where to POST the data. 
             * 
@return  the Reference of the new resource if the creation succeeds, null 
             *         otherwise. 
             
*/   
            
public   static  Reference createItem(Item item, Client client,   Reference itemsUri)
            {  
                
//  Gathering informations into a Web form.  
                Form form  =   new  Form();  
                form.add(
" name " , item.getName());  
                form.add(
" description " , item.getDescription());  
                Representation rep 
=  form.getWebRepresentation();  
                
//  Launch the request  
                Response response  =  client.post(itemsUri, rep);  
                
if  (response.getStatus().isSuccess())
                {  
                    
return  response.getEntity().getIdentifier();  
                }  
          
                
return   null ;  
            }  
          
            
/**  
             * Prints the resource's representation. 
             * 
             * 
@param  client 
             *                client Restlet. 
             * 
@param  reference 
             *                the resource's URI. 
             * 
@throws  IOException 
             
*/   
            
public   static   void  get(Client client, Reference reference)   throws  IOException 
               {  
                Response response 
=  client.get(reference);  
                
if  (response.getStatus().isSuccess()) {  
                    
if  (response.isEntityAvailable()) {  
                        response.getEntity().write(System.out);  
                    }  
                }  
            }  
          
            
/**  
             * Try to update an item. 
             * 
             * 
@param  item 
             *                the item. 
             * 
@param  client 
             *                the Restlet HTTP client. 
             * 
@param  itemUri 
             *                the resource's URI. 
             
*/   
            
public   static   boolean  updateItem(Item item,   
                                             Client client,   
                                             Reference itemUri) {  
                
//  Gathering informations into a Web form.  
                Form form  =   new  Form();  
                form.add(
" name " , item.getName());  
                form.add(
" description " , item.getDescription());  
                Representation rep 
=  form.getWebRepresentation();  
          
                
//  Launch the request  
                Response response  =  client.put(itemUri, rep);  
                
return  response.getStatus().isSuccess();  
            }  
          
            
/**  
             * Try to delete an item. 
             * 
             * 
@param  client 
             *                the Restlet HTTP client. 
             * 
@param  itemUri 
             *                the resource's URI. 
             
*/   
            
public   static   boolean  deleteItem(Client client, Reference itemUri) {  
                
//  Launch the request  
                Response response  =  client.delete(itemUri);  
                
return  response.getStatus().isSuccess();  
            }  
}

Hander:
  extends Object
Final handler of calls typcially created by Finders.Handler 的实例允许对处理的请求在一个线程安全的上下文

中运行.
-------------------------------------------------------------------------------------------------------
Uniform:
  extends Object
显露了统一的REST接口的基类.REST架构风格与其他基于网络的开发风格的重要特征是强调组件之间的一个统一接口。
-------------------------------------------------------------------------------------------------------
Resource:
  extends Handler
资源表示超连接资源目标中的概念
Intended conceptual target of a hypertext reference. "Any information that can be named can be a
resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"),
-------------------------------------------------------------------------------------------------------
Variant:
资源的可能表现形式的描述
Descriptor for available representations of a resource. It contains all the important metadata about a
representation but is not able to actually serve the representation's content itself.
--------------------------------------------------------------------------------------------------------
Representation:
表现用来展示资源(Resource)当前或即将的状态.
The content of a representataion can be retrieved several times if there is a stable and accessible
source,like a local file or a string.When the representation is obtained via a temporary source like a
network socket,
-------------------------------------------------------------------------------------------------------
Client:
 Connector acting as a generic client.[作为一个通用客户端的连接器].
-------------------------------------------------------------------------------------------------------
Reference:
 Reference to a URI.与Java中的URI类相比,这个接口表示互变的引用.
-------------------------------------------------------------------------------------------------------
Form:
 Form是一个专门的可修改的参数列表.
-------------------------------------------------------------------------------------------------------
Restlet:
 Restlet是一个提供上下文和生命周期支持的统一类。它有很多子类聚焦在采用特别方式对请求进行处理。
 The context property is typically provided by a parent Component as a way to encapsulate access to

shared features such as logging and client connector.
-------------------------------------------------------------------------------------------------------
Application:
 Restlet子类,可以被attached到一个或多个虚拟主机。
 Application同样也有很多有用的关系服务。
 @"connectorService" to declare necessary client and server connector.
 #"decoderService" to automatically decode or decompress request entities.
 #"metadataService" to provide access to metadata and their associated extension names.
 #"statusService" to provide common representations for exception status.
 # "taskService" to run tasks asynchronously.
 # "tunnelService" to tunnel method names or client preferences via query parameters.
-------------------------------------------------------------------------------------------------------
Component:
Restlet子类,用来管理一系列连接器、虚拟主机和应用程序。应用Application.Application are expected to be directly attached to VirtualHosts. Components are expose several services: access logging and status setting.
从软件架构的角度,组件是什么?
Component is an abstract unit of software instruction and internal state that provides a tranformation
of data via its interface"...
-------------------------------------------------------------------------------------------------------
Virtual Host: extends Router
将来自Server连接器的请求路由到Restlets. The attached Restlets are typically Application.
虚拟主机下的三个类:

Route attach(Restlet target)   
      Attaches a target Restlet to this router with an empty URI pattern.
Route attach(String uriPattern, Restlet target)
      Atttaches a target Restlet to this router based on a given URI pattern.
Route attachDefault(Restlet defaultTarget)


转载于:https://www.cnblogs.com/chp008/archive/2010/04/09/1708368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值