RESTful在开发中的运用

类关于Restful的原理这里不在描述,我也是在项目开发中运用到,然后自己查阅了相关资料,自己在新建项目得以运用,学会。

1、前期准备

JAX-RS 是为JAVAEE环境下的Restful 服务能力提供的一种规范。

知乎上有人定义:Restful 为URL定位资源,用HTTP动词(GET、POST、DELETE、PUT)描述操作。

个人理解,是定义API(后台数据请求),方便不同版本,不同系统,对资源的请求。(这里涉及到跨域,最简单的,就是不同项目间的跨域)。

2、理解各种注解

(1)@path 描述根资源、子资源方式的位置
(2)@GET、@PSOT、@PUT、@DELETE、@HEAD 均是HTTTP请求方法指示符的注释。(我在开发中用的比较多的是get/post)
  (3)    @COSUMES 代表一个资源可以请求的MIME;@PRODUCS 代表一个资源可以返回MIME类型
 (4)    Application类和@ ApplicationPath注解用于指定在打包封存所有的RESTful资源的        基本路径

3、restful的使用

 先引入Restful的jax-rs协议下的jar包,jersey.

jersey 框架,是 目前比较流行的 基于 JAX-RS 2.0 规范实现的 RESTful 框架。

(先讲讲我自己实现了的方式

一、当存在 Application 子类,而且 Application 子类被 ApplicationPath 注解所修饰。

(1)定义一个HelloWorldResource,@path类,里面定义了各种API实现;(这个类也可以加一些scope。如:@RequestScoped)

@Path("/helloworld")
public class HelloWorldResource {

	public static final String CLICHED_MESSAGE = "Hello World";

	@GET
	@Path("/before")
	public String getHelloBefore() {
		return CLICHED_MESSAGE;
	}

	@GET
	@Path("/user")
	@Produces(MediaType.TEXT_PLAIN)
	public String getHelloWithPath(@PathParam("username") String username) {
		return "Hello Path UserName" + username;
	}

(2)创建RESTfulResourceRoot 继承Application类,也就是定义@ApplicationPath("/rs")类,统一管理restful的基本路径

@ApplicationPath("/rs")
public class RESTfulResourceRoot extends Application {

	@Override
	public Set<Class<?>> getClasses() {
		final Set<Class<?>> classes=new HashSet<Class<?>>();
		classes.add(HelloWorldResource.class);
		return classes;
	}

(3)可以在浏览器url里输入:http://localhost:8080/项目名/rs/helloworld/before
二、当存在 Application 子类,但是没有被ApplicationPath 注解所修饰。

这种情况与上一种相比,RESTfulResourceRoot就是少了@ApplicationPath,所以我们要配置web.xml

<servlet>
		<servlet-name>jersey-serlvet</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>javax.ws.rs.Application</param-name>
			<param-value>web.rest.RESTfulResourceRoot</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jersey-serlvet</servlet-name>
		<url-pattern>/rs/*</url-pattern>
	</servlet-mapping>
servlet3.x可以简化这些
<servlet>
  <servlet-name>web.rest.RESTfulResourceRoot</servlet-name>
 </servlet>
 <servlet-mapping>
  <servlet-name>web.rest.RESTfulResourceRoot</servlet-name>
  <url-pattern>/rs/*</url-pattern>
 </servlet-mapping>
其中 org.glassfish.jersey.servlet.ServletContainer 是 jersey 中 Servlet的基类,它继承于 HttpServlet

我在查阅资料时,也有其他的配置如下:
<servlet>
    <servlet-name>com.example.AirApplication</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>com.example.AirApplication</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

<servlet>    
    <servlet-name>jersey-serlvet</servlet-name>  
 <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>  
      <init-param>    
    <param-name>jersey.config.server.provider.packages</param-name>  
        <param-value>war.controller.rest</param-value>  
       </init-param>  
   <load-on-startup>1</load-on-startup>  
 </servlet>  
   
 <servlet-mapping>  
   <servlet-name>jersey-serlvet</servlet-name>  
   <url-pattern>/rest/*</url-pattern>  
 </servlet-mapping>  
以上都是一一实现过。
直接在浏览器里输入地址,是初始是调试是否请求成功,在实际中不可能有这么简单的运用,其中我自己常用的有ajax请求(dateContentType)可以是好几种类型,也有不同项目的调用(http请求),controller调用等等。
下一篇,我准备使用ajax的几种数据类型进行详细运用。

猜你喜欢

转载自blog.csdn.net/u011038738/article/details/79067845