Restlet是用于Java平台的轻量级,全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输,数据格式和服务描述标准,例如HTTP和HTTPS,SMTP,XML,JSON,Atom和WADL。 客户端库的GWT端口也可用。 (参考:http://en.wikipedia.org/wiki/Restlet)
你好世界的例子
- 项目结构
- 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服务
参考: Restlet Framework –来自Sunil Gulabani博客的JCG合作伙伴 Sunil Gulabani的Hello World示例 。
翻译自: https://www.javacodegeeks.com/2013/09/restlet-framework-hello-world-example.html