Restlet实战(十二)获取参数值

本篇文章将讲解三种不同值的获取方法。

 

1.从Web Form中获取值

 

 

 

    如果看过此系列文章中的Restlet实战(七)-提交和处理Web Form 对此应该有一定的印象,简单把代码贴过来加深印象:

 

Java代码   收藏代码
  1. @Override    
  2. public boolean allowPost() {     
  3.     return true;     
  4. }     
  5.     
  6. @Override    
  7.    public void acceptRepresentation(Representation entity) throws ResourceException {     
  8.     Form form = new Form(entity);     
  9.     Customer customer = new Customer();     
  10.     customer.setName(form.getFirstValue("name"));     
  11.     customer.setAddress(form.getFirstValue("address"));     
  12.     customer.setRemarks("This is an example which receives request with put method and save data");     
  13.          
  14.     customerDAO.saveCustomer(customer);     
  15. }  

 除了上面这样的方式获取Web Form外,实际上Web Form是POST 请求送到服务器的实体,所以也可以从Request中获得,我们对上述类做一修改。

 

Java代码   收藏代码
  1. @Override  
  2. public void init(Context context, Request request, Response response) {  
  3.     super.init(context, request, response);  
  4.       
  5.     Form form = request.getEntityAsForm();  
  6.     Customer customer = new Customer();  
  7.     customer.setName(form.getFirstValue("name"));  
  8.     customer.setAddress(form.getFirstValue("address"));  
  9. }  

 从方法调用顺序上讲,init方法调用在前,acceptRepresentation方法调用在后,有意思的是,如果这两个方法里面都有拦截取Form的代码,那么Restlet将抛出一个异常,内容如下:

 

Java代码   收藏代码
  1. java.lang.IllegalStateException:   
  2. The Web form cannot be parsed as no fresh content is available.   
  3. If this entity has been already read once, caching of the entity is required  

 

意思是Form已经被分析过一次,如果想再次用,建议cache这个form,呵呵,有意思。

 

 2. 从查询中获取值

 

 对Restlet实战(七)-提交和处理Web Form 中的index.jsp做一个简单的修改:

 

Html代码   收藏代码
  1. <form name="form1" action="<%=request.getContextPath()%>/resources/customers?query=test" method="post">  
  2.     Name:<input type="text" name="name"/><br>  
  3.     Address:<input type="text" name="address"/><br>  
  4.     <input type="button" value="Submit" onclick="doSubmit()"/>  
  5. </form>  

 在/resources/customers后面加了?query=test,修改CustomersResource的init方法来获取查询值:

 

Java代码   收藏代码
  1. @Override  
  2. public void init(Context context, Request request, Response response) {  
  3.     super.init(context, request, response);  
  4.       
  5.     Form form = request.getResourceRef().getQueryAsForm();  
  6.     for (Parameter parameter : form) {  
  7.         System.out.print("parameter " + parameter.getName());  
  8.         System.out.println("/" + parameter.getValue());  
  9.     }  
  10. }  

 方法我们不作过多的处理,只是验证是否能获取到值。

 

3. 从Cookie中获取值

 

cookie能直接从request中获得,返回的是一个cookie的对象集合,同上,在init方法里面添加如下代码:

 

Java代码   收藏代码
  1. for (Cookie cookie : request.getCookies()) {  
  2.     System.out.println("name = " + cookie.getName());  
  3.     System.out.println("value = " + cookie.getValue());  
  4.     System.out.println("domain = " + cookie.getDomain());  
  5.     System.out.println("path = " + cookie.getPath());  
  6.     System.out.println("version = " + cookie.getVersion());  
  7. }  

 

猜你喜欢

转载自chenjianfei2016.iteye.com/blog/2355191