先转载下中文文档的前几页cetia4学习笔记(1)
tou3921
2008-09-18
http://our.bizairshop.com/note/post/cetia4-1.html
cetia4学习笔记(1) 学习cetia4,下面是随手记录的笔记 (1) (水平有限,语句很多不通顺,别骂俺就行) Cetia4使用简单而强大的抽象来很容易地创建基于Java Servlet的应用程序,可以做到 1. 可以被web浏览器或者任何web状态支持的客户端 和 2. 可以应答HTTP无序状态请求的Rest web service应用 HTTP URL概念是REST构架风格的核心。 在Cetia4框架中,render请求应答HTTP的Get请求,action请求应答HTTP的POST,PUT和DELETE方法请求。 http://www.xxx.com/forum/topics/123 这样的url中 forum是web app部署目录,/topics/* 是映射到 TopicsServlet (继承RestServlet) 这样的servlet必须映射到/topics/和它的所有子路径。 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方法能被识别因为以“render”开头,并且返回String值。 此方法参数是可变的,通常接受至少一个参数RenderContext。在servlet 环境中,RenderContext可以看成是servlet请求、应答和配置对象 (javax.servlet.http.HttpServletRequest等对象)的标准接收者。 RenderRequest很方便地提供可以访问那些servlet相关对象的方法 ------------------------------------------------------------------------------------------- 【注意配置】 比较特殊的 web.xml中 <servlet-name> 必须跟 匹配的url中字符串一致! (有些javax.servlet.ServletConfig.getServletName()方法返回这个配置值) 我开始servlet-name配置错了,一直出问题,例如: com.xxx.AdminServlet 你想映射到 /admin/* ,那么servlet-name 必须配置成 admin 的名字! 我开始以为servlet-name值无所谓配置成AdminServlet,结果一直出错 ------------------------------------------------------------------------------------------- render方法返回String对象,这个值代表客户端响应要显示的view,可以 是绝对路径,也可以是相对路径。 ★ 绝对路径值,比如 /jsp/display_topics.jsp 指向一个固定文件 或资源。因为有接收html的传统浏览器客户或接收XML的Web service。 因此通过绝对路径指定的View需要知道如何适应不同客户端,这不是 view,而是controller的工作,所以不推荐使用绝对路径作返回值 ★ 相对路径,比如 "display_topics",指向一个在默认目录和 默认扩展名的文件, 对于传统的web请求是 /WEB-INF/html和REST servlet对应的路径。默认扩展名是.jsp。 例如"topics"的servlet返回 "display_topics",则指向 /WEB-INF/html/topics/display_topics.jsp 如果是header accept txt/xml的web service客户端访问,则调用到 /WEB-INF/html/topics/display_topics.jspx 如果想web service和web浏览器到达的view都是一个,则render方法返回值 指定后缀名,例如***.jsp 即可 如果请求有时候需要html返回,有时候需要xml返回,例如ajax应用中, 则需要使用参数 _type 显式的传统web响应url例子: http://example.com/forum/topics?_type=web 显示的xml web service响应例子: http://example.com/forum/topics?_type=ws_stateless 或者用短参数: http://example.com/forum/topics?_type=ws RenderContext是ServletConfig,HttpServletRequest,HttpServletResponse 这些对象的facade,可以方便的和这些servlet相关的对象以及ServletContext, HttpSession对象。但是它又远不止是简单的facade,他还抽象了一些不同于 传统的web模型和web service模型的方法。 在他们之间最大的区别是传统的web模型是有状态的,通过session来保存用户的 状态,在web service模型中,交互是无状态的,session不被允许。 RenderContext的获取HTTP参数的方法是: public String getParameter( String param ) public Map<String,String[]> getParameterMap() cetia4也可以实现自动的参数映射,后续讨论。 得到request,session,application级别的attribute存储值: public Object getRequestAttribute( String key ) public Object getSessionAttribute( String key ) public Object getContextAttribute( String key ) 前面说过,在无状态的web service环境,是不允许拿到session的, 所以调用 getSessionAttribute()和调用getRequestAttribute()方法 是一样的效果。 这一开始看起来很怪异,但是可以使用一个方法同时处理 web和web service两种请求, |
|
VonNeumann
2008-10-22
顶完再看
用过RESTlet正好对比一下 |