restjava实例的简单介绍

博主:adminadmin 2023-01-15 04:45:06 551

今天给各位分享restjava实例的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何实现支持REST的Java Business Services

 下图显示了示例实现中的类。蓝色所示的类是框架外部的类,将它们放在这里是为了展示与框架的结构关系。

配置文件

配置文件 "rest-services-config.xml" 包含 REST 服务表示形式和相应的Java Action之间的映射,如下:

清单 1. REST 服务配置

以下是引用片段:

?xml version="1.0" ?

rest-config

rest-api id="CreateUserProfile" uri="/Registration/CreateUser" method="POST"

   handler id="RegAction" class="ws.registration.restactions.CreateProfile"/

/rest-api

rest-api id="GetUserProfile" uri="/Registration/GetUser" method="GET"

   handler id="RegAction" class=" ws.registration.restactions.GetProfile"/

/rest-api

...

/rest-config

在该示例实现中,XML Binding服务实现在"rl-config.xml"文件中配置的框架配置文件如下所示。通过修改此文件实现的任何自定义实现都可以接入,只要实现了XMLBindingService接口。

清单 2:框架配置

以下是引用片段:

# XML Binding Implementation Service

# Default implementation

ws.rest.xmlbinding.service.impl=ws.rest.xmlbinding.service.impl.XMLEncDecServiceImpl

日志配置文件 "ws_log.properties" 指定log4j属性和日志文件的位置。这可以按需要作出适当修改。

Controller Servlet

RESTServiceServlet在web.xml中配置,处理所有具有上下文路径的请求,其中上下文路径的web-app/restservices/*如下所示:

清单 3:Servlet配置

以下是引用片段:

servlet

  description/description

  display-nameRESTServletService/display-name

  servlet-nameRESTServletService/servlet-name

  servlet-classws.rest.servlet.RESTServiceServlet/servlet-class

/servlet

servlet-mapping

  servlet-nameRESTServletService/servlet-name

  url-pattern/restservices/*/url-pattern

/servlet-mapping

REST Action

对于每个REST资源,例如 GetUserProfile,都将创建一个实现ActionInterface的相应动作类。该接口定义了动作类需要实现的 "doExecute(ActionContext ctx)" 方法。ActionContext提供服务,获取 REST 路径输入或查询参数,获取XMLBindingService实例并将XML输出发送到客户端,不公开Action的协议细节。PathInputs是一个包含路径值的List对象,路径值的顺序与它们在URL中指定的顺序相同。

清单 4:Action代码片段

以下是引用片段:

public class GetProfile implements ActionInterface {

public void doExecute(ActionContext context) throws Exception {

 // Get the value from URL path

 String userName = context.getPathInputs().get(0);

 // Invoke backend service to retrieve user profile

 UserProfileBean bean = getUser(userName);

 // Serialize the bean using framework service and send response

 String xml = context.getXMLBindingService().serialize(bean);

 // Use the ActionContext to generate XML and

 context.sendResponse(response, xml);

}

动作类负责使用超类中的XMLBindingService以XML形式生成输出。请查看示例实现的ws.registration.restactions.GetProfile类。ActionContext还可以提供协议特定的HttpServletRequest和HttpServletResponse对象,以防需要自定义处理。它还提供了Path值和URL参数。

XML Binding

该代码示例提供了一个Java XML Binding的实现,该实现使用java.beans.XMLEncoder和java.beans.XMLDecoder类。XML Binding服务实现接受一个JavaBean对象,并将其转换为上述Encoder和Decoder相应的XML表示形式。如果需要JAXB实现,那么可以开发一个实现 ws.rest.xmlbinding.service.XMLBindingService接口的实现类。

执行示例服务

示例代码分发包含示例WAR文件"RESTWS.war",它可以部署在Tomcat容器中(已在Apache Tomcat版本6.0.20上进行了测试)。JDK要求是JDK 1.5以上。

成功部署该应用程序之后,在浏览器中输入URL:

图 5. 创建Profile Service输入

该页面调用REST服务

POST url-prefix/Registration/CreateProfile

您可以修改在 string/string 标记中指定的XML值。

注意:请注意XML结构依赖于JavaBean对象和Java使用的XML序列化技术。

提交时,动作类显示成功消息,表示后端服务的调用。可以查看 ws_log.log 文件调试消息。

图 6. 创建Profile Service输出

类似地,实现示例GET url-prefix/Registration/GetProfile/{username}服务以检索配置文件,如下图所示:

转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

REST 请求处理

javax.ws.rs.ext.Providers 是JAX-RS 2.0定义的一种辅助接口,其实现类用于辅助REST框架完成过滤和读写拦截的功能,可以使用@Provider 注解标注这些类。Providers接口一共定义了四个方法,分别用来获取MessageBodyReader,MessageBodyWriter,ExceptionMapper,ContextResolver

Jersey 之所以支持那么多中响应实体的传输格式,是因为其底层实体Providers具备的对不同格式的处理能力。Jersey内部提供了丰富的MessageBodyReader和MessageBodyWriter 接口的实现类,用于处理不同格式的表述

如上图,请求流程中存在三种角色,分别是:用户,REST客户端和REST服务器,请求始于请求的发送,止于调用Resonse的readEntity()方法

(1).用户请求提交数据,客户端接收请求,进入第一个扩展点:客户端请求过滤器 ClientRequestFilter 的filter()方法

(2).请求处理过滤完毕后,流程进入第二个扩展点:客户端写拦截器WriterInterceptor实现类的aroundWriterTo() 方法,实现对客户端序列化操作的拦截

(3).客户端消息体写处理器MessageBodyWriter 执行序列化,流程从客户端过渡到服务器端

(4).服务器接收请求,流程进入第三个扩展点:服务器前置请求过滤器ContainerRequestFilter实现类 的filter()方法

(5).过滤器处理完毕后,服务器根据请求匹配资源方法,如果匹配到相应的资源方法,流程进入第四个扩展点:服务器后置请求过滤器ContainerRequestFilter 实现类 的filter() 方法

(6).后置请求过滤器处理完毕后,力促进入第五个扩展点:服务器读拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,拦截服务器端反序列化操作

(7).服务器消息体读处理器MessageBodyReader 完成对客户端数据流的反序列化,服务器执行匹配的资源方法

(8).REST请求资源的处理完毕后,流程进入第六个扩展点:服务器响应过滤器 ContainerResponseFilter 实现类 的filter() 方法

(9).过滤器处理完毕后,流程进入第七个扩展点:服务器写拦截器WriterInterceptor实现类 的aroundWriterTo() 方法,实现对服务器端序列化到客户端这个操作的拦截

(10).服务器消息体写处理器MessageBodyWriter 执行序列化,流程返回到客户端一侧

(11).客户端接收响应,流程进入第八个扩展点:客户端响应过滤器ClientResponseFilter 实现类 的filter() 方法

(12).过滤处理完毕后,客户端响应实例response 返回到用户一侧,用户执行response.readEntity(),流程进入第九个扩展点:客户端拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,对客户端反序列化进行拦截

(13).客服端消息体读处理器MessageBodyReader 执行反序列化,将Java类型的对象最终作为readENtity()方法的返回值

JAX-RS-2.0定义的4种过滤器扩展点接口,供开发者实现其业务逻辑,按请求处理流程的先后顺序为:客户端请求过滤器(ClientRequestFilter) ------- 服务端请求过滤器(ContainerRequestFilter)--------服务端响应过滤器(ContainerResponseFilter)——客户端响应过滤器(ClientResponseFilter)

ClientRequestFilter

ClientResponseFilter

ContainerRequestFilter

ContainerResponseFilter

Jersey 内部实现了几个典型应用的拦截器,他们是成对出现的

ReaderInterceptor

WriterInterceptor

编码解码拦截器(ContentEncoder)

优先级的定义使用注解 @Priority ,优先级的值是一个整数值,对于ContainerReauest,PreMatchContainerRequest,ClientRequest 和读写拦截器 采用升序策略,数值越小,优先级越高;对于ContainerResponse和ClientResponse采用降序策略,数值越大,优先级越高

如何在eclipse上配置rest服务啊

在Eclipse里,新建一个web工程

第一步,添加需要用的jar包,如下图

第二步,新建一个class,代码如下

第三步,修改web.xml配置文件,如下图 

启动tomcat, 访问本机测试地址:

这时我们就可以访问到我们发布的rest服务了,如下图

关于restjava实例和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。