基于REST的Web服务及其基于Ajax的客户端
http://tech.ddvip.com 2007年09月20日 社区交流
内容摘要:基于 REST 的 Web 服务是使用 REpresentational State Transfer (REST) 体系结构风格构建的 Web 服务。本文介绍了一种编写基于 REST 的 Web 服务的方法,其中使用一个简单的代理 Servlet 和基于 Asynchronous XML + JavaScript (Ajax) 的客户端。
清单 2. 使用 HTTP GET 调用雇员详细信息
<?xml version='1.0' encoding='UTF-8'?>
< EmpDetail xmlns:p='http://www.employee-details.com'>
<<Emp-ID>00345</Emp-ID>
<Name>David Henry</Name>
<Department>Finance</ Department >
</p:EmpDetail>
清单 3 显示了这个 Servlet 的代码。其中,所有操作都采用了硬编码方式,但是可以很容易地将其扩展为与数据库进行交互,以便成为一个实时的、基于 REST 的服务。
清单 3. Servlet 代码
public class RESTDemoServlet extends HttpServlet implements Servlet {
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#HttpServlet()
*/
Map map =new HashMap();
/* (non-Javadoc)
* @see javax.servlet.GenericServlet#init()
*/
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
Employee emp0 =new Employee("David","Finance");
Employee emp1 =new Employee("Smith","HealthCare");
Employee emp2 =new Employee("Adam","Information technology");
Employee emp3 =new Employee("Stephan","Life Sciences");
map.put("00345",emp0);
map.put("00346",emp1);
map.put("00347",emp2);
map.put("00348",emp3);
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doGet
(HttpServletRequest arg0, HttpServletResponse arg1)
*/
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
arg1.setContentType("text/xml");
PrintWriter out=arg1.getWriter();
System.out.println(map);
if(arg0.getPathInfo()!= null){
String EmpId=arg0.getPathInfo().substring(1,arg0.getPathInfo().length());
System.out.println(EmpId);
out.write("<?xml version='1.0' encoding='UTF-8'? >"+"
");
out.write("<p:EmpDetail xmlns:p='http://www.employee-details.com' >"+"
");
out.write("<Emp-ID>"+EmpId+" </Emp-ID >"+"
");
out.write("<Name>"+((Employee)map.get(EmpId)).name+" </Name >"+"
");
out.write("<Department >"+((Employee)map.get(EmpId)).dept+" </Department >"+"
");
out.write("</p:EmpDetail >"+"
");
out.flush();
}else{
out.write("<?xml version='1.0' encoding='UTF-8'? >"+"
");
out.write("<p:Employees xmlns:p='http://www.employee-details.com' >"+"
");
out.write("<Employee id='00345' href='http://localhost:9080/
AJAX_REST_Demo/RESTDemoServlet/employees/00345'/ >"+"
");
out.write("<Employee id='00346' href='http://localhost:9080/
AJAX_REST_Demo/RESTDemoServlet/employees/00346'/ >"+"
");
out.write("<Employee id='00347' href='http://localhost:9080/
AJAX_REST_Demo/RESTDemoServlet/employees/00347'/ >"+"
");
out.write("<Employee id='00348' href='http://localhost:9080/
AJAX_REST_Demo/RESTDemoServlet/employees/00348'/ >"+"
");
out.write("</p:Employees >");
out.flush();
}
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doPost
(HttpServletRequest arg0, HttpServletResponse arg1)
*/
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
来源:ibm 作者:Shailesh K. Mishra 责编:豆豆技术应用