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")
@Get
public 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服务
翻译自: https://www.javacodegeeks.com/2013/09/restlet-framework-hello-world-example.html