Cetia4 REST 框架使用的处理请求的方法类似于现存的protlet规范。在这种模式中,request被分成两类:render request 和action request。在cetia4框架中,render request 响应 Get http方法的请求; action request 响应post,put ,delete http方法的请求。
Render requests 在REST servlet就是 render 方法。Render 方法可以处理多种请求,在基于web 浏览器的请求中返回html和xhtml,在web service请求中返回xml。在这一节中,我们将主要生成html回应。
在Cetia4 REST servlet ( RestServlet的子类 ) 的render方法不是继承自父类。实质上,在类的实例化过程中他们被发现。这意味着这些方法必须有一个约定为了便于发现和使用。
在Rest servlet中,可以有多个render方法,例如下面的一个:
package com.example.forum.controller;
import com.acsinet_solutions.cetia4.controller.rest.RestServlet;
import com.acsinet_solutions.cetia4.controller.RenderContext;
public class TopicsServlet extends RestServlet
{
public String render( RenderContext context )
{
return "display_topics";
}
}
render method之所以被识别是因为它是以 "render" 为前缀, 并且返回也java.lang.String值。Render方法的参数是动态性的,但是至少有一个类型为
com.acsinet_solutions.cetia4.controller.RenderContext的参数。
在servlet环境中,这个类可以看作是标准的servlet request,response,config( javax.servlet.http.HttpServletRequest等等)对象的综合。
RenderRequest提供了便利的方法访问这些servlet的功能。我们将在后面提供这个接口和方法。
Render 方法返回java.lang.String类型的返回值。这个值指示响应客户的在客户端显示的视图。视图可以是绝对路径值( 以 '/'开始 ),或者是相对路径值。
• 绝对路径值 – 例如:“/jsp/display_topics.jsp”指的是一个固定的文件或者资源。不管请求时传统web 浏览器发送来的请求html或者xhtml,或者是web service发送的请求xml,这个将指向统一的视图资源。视图知道如何区分各种的客户端;当然可以在control中实现这个,不推荐这种方式。文档中也没有这方面的例子。
• 相对路径值 – 象前面的例子的“display_topics”指的是在默认文件夹中有一个默认扩展名的文件。默认的文件路径依赖于servlet的名字,对于web应用来说是以“/WEB-INF/html”开始的(不同于web service),后面是rest servlet的名字。Web请求默认的扩展名是jsp,例如:对于传统的web请求,TopicsServlet的名字是“topics”,如果render方法返回string“display_topics”,那么jsp视图就是/WEB-INF/html/topics/display_topics.jsp。下图展示:
视图文件是一个典型的jsp文件。如果你想测试了上面展示的代码,下面的display_topics.jsp将会展示出来:
<html>
<head><title>Basic GET Request</title></title>
<body>
Hello REST World!
</body>
</html>
前面的介绍render()将会响应GET请求对于基本servlet请求,它会响应这样的url请求http://example.com/forum/topics, 但是却不会响应这样的子资源的请求:例如:http://example.com/forum/topics/234 或者
http://example/forum/topics/235/comments. 如何响应这样的请求将在文档的下面给以介绍。
现在- 如果你实现了TopicsServlet, display_topics.jsp,并且在/WEB-INF/web.xml注册了你的servlet,那么你就可以准备测试他们了。使用你的服务器和端口配置,检查/topics是否可以工作了。