SerfJ REST
SerfJ提供了一个MVC架构,但它不包含任何模型,其主要特点是使用控制器collerlor,通过这些collerlor管理REST请求。可帮助你开发优雅的MVC架构的应用,使用惯例重于配置的思路,无需配置文件和注解。
collerlor代表了应用程序中的可用资源,通过REST风格的请求将消息发送给这些资源 。当一个请求发送给serfj的主servlet(net.sf.serfj.RestServlet),一个能够处理这一请求的资源(控制器)被调用,并响应客户端请求。这个响应可以是一个网页,一个序列化的对象,或HTTP状态代码204(这意味着没有任何内容)。
web.xml
1、要使用SerfJ,在web.xml中做如下配置
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>net.sf.serfj.RestServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
2、新资源要在 web.xml 文件中配置相应的servlet, 类似:
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/accounts/*</url-pattern>
</servlet-mapping>
serfj.properties
# Main package where looking for classes (controllers, serializers)
main.package=org.net.sf.serfj.demo
views.directory=views
packages.style=functional
alias.controllers.package=controllers
alias.serializers.package=serializers
suffix.controllers=Controller
suffix.serializer=Serializer
框架遵循惯例优先原则,所以使用它几乎是不必要的配置。当然,它需要进行配置。
SerfJ有只有一个配置文件就是classpath中的/config/serfj.properties。为了让它开始工作只需要配置一个main.package属性, 此属性必须指向SerfJ将在哪里寻找控制器和序列化器。
main.package:
主要包名(搜索控制器,序列化器的主要依据)。
默认值为net.sf.serfj。
views.directory:
搜索网页的目录。
默认值为web根目录下的views。
package.style:
框架内寻找资源的方式。
有四种可能的值:FUNCTIONAL/functional, FUNCTIONAL_BY_MODEL/functional_by_model, MODEL/model or OFF。
如果该值是OFF,就相当于没有定义此属性。
alias.controllers.package:
控制器包的别名。
当 package.style 为 FUNCTIONAL, FUNCTIONAL_BY_MODEL 时,追加这个名称到main.package属性值后作为控制器包名。
默认值是controllers。
alias.serializers.package:
序列化器包的别名。
当 package.style 为 FUNCTIONAL, FUNCTIONAL_BY_MODEL 时,追加这个名称到main.package属性值后作为序列化器包名。
默认值是serializers。
suffix.controllers:
控制器类名的附加后缀。默认值是off,不使用后缀。
suffix.serializers:
序列化器类名的附加后缀。默认值是Serializer。
controller
控制器是SerfJ的主要特色,REST请求被分派给他们,他们应答这些请求。应答可能是一个页面,一个序列化的对象,或什么也没有(比如HTTP 状态代码)。
有两种方法写一个控制器(下一个SerfJ版本会有更多方法),一个是扩展net.sf.serfj.RestController类,另一个是写了一个JavaBean。
其中,扩展RestController类是写一个控制器的最好方式,虽然处理的请求中不一定包含有参数,但方法可以返回对象并抛出异常。
public class AccountController extends RestController {
@GET
public void index() {
// TODO Auto-generated method stub
}
@POST
public void create() {
// TODO Auto-generated method stub
}
@DELETE
public void delete() {
// TODO Auto-generated method stub
}
@PUT
public void put() {
// TODO Auto-generated method stub
}
}
如果是寻找一个控制器,则controller类的限定名应该是:
main.package + "." + alias.controllers.package + "." + capitalized(singularized(resource name)) + suffix.controllers
如以下配置:
main.package: net.sf.serfj.demo
alias.controllers.package: controllers
suffix.controllers: Controller
Resource: accounts
搜索一个account 资源的控制器类,这个类的全限定名称将是::net.sf.serfj.demo.controllers.AccountController
SerfJ使用注解告诉controller哪些方法能接受哪一类HTTP请求。
@GET: 方法处理 GET 请求.
@POST: 方法处理 POST 请求.
@PUT: 方法处理 PUT 请求.
@DELETE: 方法处理 DELETE 请求.
此外,还有一个注释@DoNotRenderPage告诉控制器的方法执行后,没有呈现页,但将回答一个HTTP204代码。如果方法返回一个对象而不是一个页面,那它并不需要注明@DoNotRenderPage。只有方法不返回任何值(void方法),而开发者又不希望呈现一个结果页时,必须注明。
serializer
一个REST请求到达时,如果在查询字符串之前的部分包含有扩展名,框架会自动搜索能对请求资源进行够序列化的专用序列化类
SerfJ提供XML,JSON和Base64(对应.XML,.JSON和.base64三种扩展名)的序列化,但开发人员可以针对不同的后缀,使用自定义的序列化类。

开发新的序列化类很容易,你只需要实现 net.sf.serfj.serializers.Serializer 接口,不需要更多的解释。
如以下配置:
main.package: net.sf.serfj.demo
alias.serializers.package: serializers
suffix.serializers: Serializer
搜索一个account 资源的JSON序列化器类,这个类的全限定名称将是:net.sf.serfj.demo.serializers.JsonAccountSerializer
view
控制器中的方法执行后总是显示某一个页面,除非该方法返回了对象,或者使用 @DoNotRenderPage 对方法进行了标注。
显示页面保存路径是views.directory/资源名称/方法名称.jsp(.html或.htm)。其中 views.directory 在 serfj.properties 配置文件中定义。
SerfJ REST的更多相关文章
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
随机推荐
- border-radius归纳
一.基本语法 1.1 语法 解释 border-radius:10px 将创建四个大小一样的圆角. border-radius:10px 15px 10px 5px; 四个值分别表示左上角.右上角.右 ...
- [Angular Tutorial] 3-Components
在先前的步骤中,我们看到了一个控制器和一个模板如何一起工作来将一个静态的HTML文件转化为动态页面(view).一般说来,这在单页应用中一种非常常见的模式(在Angular应用中尤其是这样): ·客户 ...
- 汇编语言实现led灯的跑马灯
led实验1.看原理图 看设备工作的原理(可能需要阅读芯片手册),看设备与cpu的连接关系 GPIO具有输入输出功能.输入:cpu想知道io引脚是高电平还是低电平那么就是输入方式输出:cpu想控制io ...
- Spring mvc系列一之 Spring mvc简单配置
Spring mvc系列一之 Spring mvc简单配置-引用 Spring MVC做为SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- Golomb及指数哥伦布编码原理介绍及实现
2017年的第一篇博文. 本文主要有以下三部分内容: 介绍了Golomb编码,及其两个变种:Golomb-Rice和Exp-Golomb的基本原理 C++实现了一个简单的BitStream库,能够方便 ...
- asp.net客户端IP跟踪
/// <summary> /// 获取客户端IP地址(无视代理) /// </summary> /// <returns>若失败则返回回送地址</retur ...
- tbl.js div实现的表格控件,完全免费,no jquery
html上现在有比较好用的表格控件是datatable,但是编辑.按钮等部分是收费的,只有基础功能免费.而且尺寸发生变化时需要手工刷新等繁琐操作较多.所以我开发一个免费的供大家使用. 本项目已用于“虚 ...
- 我的音乐盒子(nodejs7 + koa2 + vue + vuex + vue-router)
你们知道的,nodejs对jser来说,是个好东西,快快的,自从接触nodejs后,总想弄点东西. 这弄个啥了,一天打开百度音乐盒,哟,自己弄一个如何了,好啊好啊. 后台: nodejs 7 + ko ...
- 【求Java工程师/专家】大型互联网公司急招
互联网行业排名Top公司,目前项目扩张阶段,需求数量较多的JAVA中高端后台开发人员,需要有分布式系统开发经验,年后有找工作的同学可以联系我了. 工作地点:杭州 岗位要求: 1.精通Java SE和J ...