Java与RESTful

3 篇文章 0 订阅

         REST(REpresentation State Transfer),用于描述一个架构样式的网络系统,如web应用程序。

         说实了,就是如下的一个URL访问样式:localhost:8080/project_name/databases/database_name/collections/collection_name

       

         其实,这样的URL样式有什么好处呢?可以先对比传统一些的URL访问样式,即POST和GET方法。POST的参数传递在URL上是反映不出来的,而GET方式,以上为例即为localhost:8080/project_name/ONEPAGE?databases=database_name&collections=collection_name。那么,哪一种方式更能清晰的描述资源的访问?毫无疑问是RESTful的方式。

         在Web的应用上,RESTful已促成了不少的框架出现。甚至在一些框架上,取代了Servlet这个中间件。RESTful是很强大的技术?这个靠大家发掘。

         这次我的应用,主要的就是以下的一个应用Demo。不过,过程中有个小难点,就是如何与Servlet交互上或者说调用Servlet的方法。RESTful下的Java类,是比Servlet更纯的class。RESTful架构下的Java类功能也相当的丰富或者说强大。要获取Servlet中的request、response对象,可以通过配置注释@Context 获取。对GET方法或者POST方法的支持,以及在接受或返回方式上,都有相当大的平台。

        另外,在调用Servlet方法上,可以使用HttpClient对象,可动态选择是POST还是GET方法。但是在具体使用到request、response对象时并不怎么好用,如不能支持对Cookie的读写。


附上一个Demo

        

在RESTful+Java+Tomcat架构中,

web.xml配置文件为:

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>
  		com.sun.jersey.spi.container.servlet.ServletContainer
  	</servlet-class>
  	<init-param>
    	<param-name>com.sun.jersey.config.property.packages</param-name>
    	<param-value>demo.restful.res</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/collections/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/databases/*</url-pattern>
  </servlet-mapping>

在Databases类中:

package demo.restful.res;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;



@Path("{db}/collections/{coll}")
public class Databases {

	@GET
	@Produces(MediaType.TEXT_HTML)
	public String showCollections(@PathParam(value="db")String db, @PathParam(value="coll")String coll){ ... }
 
如果访问的URL为localhost:8080/project_name/collections/collection_name

在Collections类中:

package demo.restful.res;

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.MediaType;

@Path("/{coll}")

public class Collections {

@GET@Produces(MediaType.TEXT_HTML)

public String selectCollection(@PathParam(value="coll")String coll){ ... }


另外,@Produces的返回类型视乎具体场景。



  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值