Restlet框架– Hello World示例

Restlet是用于Java平台的轻量级,全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输,数据格式和服务描述标准,例如HTTP和HTTPS,SMTP,XML,JSON,Atom和WADL。 客户端库的GWT端口也可用。 (参考:http://en.wikipedia.org/wiki/Restlet)

你好世界的例子


  • 项目结构

Selection_021

  • RestletApplication.java
package com.restlet.demo.application;import org.restlet.Application;
import org.restlet.Restlet;
import org.restlet.routing.Router;import com.restlet.demo.resource.HelloWorldResource;public class RestletApplication extends Application{ public synchronized Restlet createInboundRoot() {Router router = new Router(getContext());router.attach("/helloWorld",HelloWorldResource.class );return router;}
}
  • ResponseParseFactory.java
package com.restlet.demo.core;import java.util.LinkedHashMap;import org.apache.log4j.Logger;
import org.json.simple.JSONValue;public class ResponseParseFactory {static Logger logger = Logger.getLogger(ResponseParseFactory.class);@SuppressWarnings({ "rawtypes", "unchecked" })public String getFailureJsonString(String msg){String jsonString = "";LinkedHashMap list = new LinkedHashMap();list.put("response_status", "false");list.put("result", msg+"");jsonString = JSONValue.toJSONString(list);logger.info(jsonString);return jsonString;}@SuppressWarnings({ "rawtypes", "unchecked" })public String getSuccessJsonString(String msg){String jsonString = "";LinkedHashMap list = new LinkedHashMap();list.put("response_status","true");list.put("result", msg);jsonString = JSONValue.toJSONString(list);logger.info(jsonString);return jsonString;}
}
  • BaseResource.java
package com.restlet.demo.resource;import java.util.HashMap;
import java.util.Map;import org.apache.log4j.Logger;
import org.json.JSONObject;
import org.json.simple.parser.JSONParser;
import org.restlet.data.Form;
import org.restlet.data.MediaType;
import org.restlet.data.Parameter;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.restlet.resource.ServerResource;import com.restlet.demo.core.ResponseParseFactory;public abstract class BaseResource extends ServerResource{protected ResponseParseFactory parseFactory = null;protected Logger logger = Logger.getLogger(BaseResource.class);String jsonString="";@SuppressWarnings("rawtypes")@Post("json")public Representation doPost(Representation entity){Map json =null;jsonString = "";parseFactory = new ResponseParseFactory();try {JsonRepresentation represent = new JsonRepresentation(entity);JSONObject jsonobject = represent.getJsonObject();JSONParser parser = new JSONParser();String jsonText = jsonobject.toString();json = (Map) parser.parse(jsonText);jsonString = processRequest(json,"post");} catch (Exception e) {e.printStackTrace();jsonString = parseFactory.getFailureJsonString(e.getMessage());}return new StringRepresentation(jsonString, MediaType.APPLICATION_JSON);}@SuppressWarnings("rawtypes")@Getpublic Representation doGet(){Map json =null;parseFactory = new ResponseParseFactory();jsonString = "";try {json = getMapFromParam(getRequest().getResourceRef().getQueryAsForm());parseFactory = new ResponseParseFactory();jsonString = processRequest(json,"get");} catch (Exception e) {e.printStackTrace();jsonString = parseFactory.getFailureJsonString(e.getMessage());}return new StringRepresentation(jsonString, MediaType.APPLICATION_JSON);}public abstract String processRequest(Map json,String method);public static Map<String, String> getMapFromParam(Form form) {Map<String, String> map = new HashMap<String, String>();for (Parameter parameter : form) {map.put(parameter.getName(), parameter.getValue());}return map;}}
  • HelloWorldResource.java
package com.restlet.demo.resource;import java.util.Map;import com.restlet.demo.core.ResponseParseFactory;public class HelloWorldResource extends BaseResource {public String processRequest(Map json, String method) {String returnString = "" ;returnString = new ResponseParseFactory().getSuccessJsonString("Hello " + json.get("user"));return returnString;}
}
  • log4j.properties
# -----------------------------
# Appender to write to console.
# -----------------------------
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.CONSOLE.file =${catalina.base}/logs/regularLogging.log
log4j.appender.CONSOLE.MaxFileSize=100KB# ---------------------------------------------
# Appender to write to application log.
# ---------------------------------------------
log4j.appender.APPLICATIONLOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.APPLICATIONLOG.File=${catalina.base}/logs/restlet-demo.log
log4j.appender.APPLICATIONLOG.DatePattern='.'yyyy-MM-dd
#log4j.appender.APPLICATIONLOG.File=/home/devphp/public_html/restletframework/logs/APPLICATION-LOG.log
log4j.appender.APPLICATIONLOG.Encoding=UTF-8
log4j.appender.APPLICATIONLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.APPLICATIONLOG.layout.ConversionPattern=%d [%5p]: %m%n# Turn off root logging.
#log4j.rootLogger=info, APPLICATIONLOG
log4j.rootLogger=info, CONSOLE , APPLICATIONLOG
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>RestletDemo</display-name><servlet><servlet-name>RestletServlet</servlet-name><servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class><init-param><param-name>org.restlet.application</param-name><param-value>com.restlet.demo.application.RestletApplication</param-value></init-param></servlet><servlet-mapping><servlet-name>RestletServlet</servlet-name><url-pattern>/service/*</url-pattern></servlet-mapping>
</web-app>

 

  • 呼叫Hello World Web服务

Selection_022

参考: Restlet Framework –来自Sunil Gulabani博客的JCG合作伙伴 Sunil Gulabani的Hello World示例 。

翻译自: https://www.javacodegeeks.com/2013/09/restlet-framework-hello-world-example.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Servlet 3的异步Servlet功能

在深入了解什么是异步Servlet之前&#xff0c;让我们尝试了解为什么需要它。 假设我们有一个Servlet&#xff0c;处理时间很长&#xff0c;如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.PrintWriter;impo…

excel的宏与VBA入门——代码调试

直接介绍重点&#xff1a; 常用的操作是导航栏的逐句与断点&#xff1a; 添加断点&#xff1a;调试->切换断点 单步运行&#xff1a;调试->逐句 查看变量的窗口&#xff1a;视图->本地窗口 转载于:https://www.cnblogs.com/jiangbei/p/9561352.html

php访问服务器文件路径,PHP与服务器文件系统的简单交互

1、php.ini中关于文件上传的设置指令2、文件上传过程(1)上传文件提交表单html代码&#xff1a;Adminstration - upoload new filesUpload new filesUpload a file(2)php处理上传文件代码①在php脚本中&#xff0c;需要处理的数据保存在超级变量数组$_FILES中&#xff0c;开启re…

django F和Q 关键字使用

F 的使用&#xff1a; 想给表里每个价格加上一百就要用上F&#xff0c;直接加是不行的。 转载于:https://www.cnblogs.com/wuheng-123/p/9561422.html

【刷题】BZOJ 4176 Lucas的数论

Description 去年的Lucas非常喜欢数论题&#xff0c;但是一年以后的Lucas却不那么喜欢了。 在整理以前的试题时&#xff0c;发现了这样一道题目“求Sigma(f(i)),其中1<i<N”&#xff0c;其中 表示i的约数个数。他现在长大了&#xff0c;题目也变难了。 求如下表达式的值&…

Java 8的新增功能(第I部分-JavaFX)

免责声明&#xff1a;我不为Oracle工作&#xff0c;也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”&#xff0c;这只是我研究的一部分。 Java 8已在大约两个月前完成功能&#xff0c;并且开发者预览版即将来临&#xff08;两周后&#xff09;。 这篇博客文…

mysql数据库sql语句优化

昨天帮同事优化了一个sql语句发出来共勉下: SELECT T.*, ( SELECT S.codeName FROM sys_codelist S WHERE S.codeValue T.packagingtype AND S.kindCode PACKAGING ) AS packagingtypeName, S.codeName AS codename, ( SELECT picpath FROM zl_b_gd_pic WHERE 1 1 AND gdid …

java调用外联服务用xml,Spring IOC 依赖注入的两种方式:XML和注解

IoC&#xff0c;直观地讲&#xff0c;就是容器控制程序之间的关系&#xff0c;而非传统实现中&#xff0c;由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器&#xff0c;控制权的转移是所谓反转。IoC还有另外一个名字——“依赖注入…

python第一个程序HelloWorld

在写第一个python程序之前&#xff0c;我们还需要了解的一个东西就是python解释器 解释器&#xff0c;顾名思义&#xff0c;就是解释一段代码的机器&#xff0c;程序运行的平台&#xff0c;例如Java的解释器就是jdk。 我们在写好的python代码&#xff0c;需要在解释器上执行&am…

Python中的__new__()方法的使用

__new__() 函数只能用于从object继承的新式类。 先看下object类中对__new__()方法的定义&#xff1a; class object:staticmethod # known case of __new__def __new__(cls, *more): # known special case of object.__new__""" T.__new__(S, ...) -> a new …

用Java分割大型XML文件

上周&#xff0c;我被要求用Java编写一些东西&#xff0c;该东西能够将单个30GB XML文件拆分为可配置文件大小的较小部分。 该文件的使用者将是一个中间件应用程序&#xff0c;该应用程序存在XML较大的问题。 在后台&#xff0c;它使用某种DOM解析技术&#xff0c;使它在一段时…

信号与线性系统翻转课堂笔记9——傅里叶变换概念

信号与线性系统翻转课堂笔记9——傅里叶变换 The Flipped Classroom9 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&#xff09;…

from 下拉框多个值提交_Git commit 多行信息提交

git commit可接受多个消息标志(-m)来允许多行提交原文地址&#xff1a;https://www.stefanjudis.com/today-i-learned/git-commit-accepts-several-message-flags-m-to-allow-multiline-commits/原文作者&#xff1a;Stephan Schneider在命令行上使用git时&#xff0c;您可能已…

处理缓慢的资源泄漏

使用Java监视器查找资源泄漏 查找缓慢的资源泄漏是使应用程序服务器长时间保持正常运行的关键。 在这里&#xff0c;我解释了如何使用Java监视器来发现缓慢的资源泄漏&#xff0c;以及如何验证它们是实际的泄漏&#xff0c;而不仅仅是额外的预分配到某些HTTP连接器或数据库池中…

jquery简单实现点击弹出层效果实例

先看效果图&#xff1a;完整例子&#xff1a; <!-- 渐变弹出层 --><div id"race"><a href"#">点击</a></div><div id"racePop" class"raceShow">这里是弹出层效果</div> <script type&q…

Openfire源码阅读(一)

本篇先分析openfire源码的主要流程&#xff0c;模块细节后续再继续分析&#xff1b; 一、简介&#xff1a; Openfire是开源的实时协作服务器&#xff08;RTC&#xff09;&#xff0c;它是基于公开协议XMPP&#xff08;RFC-3920&#xff09;&#xff0c;并在此基础上实现了XMPP-…

php 查询方法all,获取多条:all静态方法

查询多条数据&#xff1a;all( )方法all方法与前节课学习的get方法都是静态方法&#xff0c;可用模型类直接访问2. 源码&#xff1a;/*** 查找所有记录* access public* param mixed $data 主键列表或者查询条件(闭包)* param array|string $with 关联预查询* param b…

[译文]过犹不及,别再在编程中高射炮打蚊子

原文链接&#xff1a;Anyway,stop recommending bazookas to kill flies in programming. 众成翻译地址&#xff1a;过犹不及&#xff0c;别再在编程中高射炮打蚊子 译者注&#xff1a;翻译这篇吐槽的文章&#xff0c;主要是为了自省~日常工作中确实会犯类似的错误&#xff0…

Java中的for循环

上一章呢我们学习了一下java中的while循环和do while循环 现在我们来了解一下另外一种循环 for循环 for循环是编程语言中一种开界的循环语句&#xff0c;而循环语句 由循环体及循环的终止条件两部分组成&#xff0c;for循环其在各种编程语言中的实现与表达有所出入&#xff0…

SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看

依赖&#xff1a; <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> <…