SerfJ REST Java框架

SerfJ提供了一个MVC架构,但它不包含任何模型,其主要特点是使用控制器collerlor,通过这些collerlor管理REST请求。可帮助你开发优雅的MVC架构的应用,使用惯例重于配置的思路,无需配置文件和注解。
collerlor代表了应用程序中的可用资源,通过REST风格的请求将消息发送给这些资源 。当一个请求发送给serfj的主servlet(net.sf.serfj.RestServlet),一个能够处理这一请求的资源(控制器)被调用,并响应客户端请求。这个响应可以是一个网页,一个序列化的对象,或HTTP状态代码204(这意味着没有任何内容)。

 

web.xml

1、要使用SerfJ,在web.xml中做如下配置

1

2

3

4

5

<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, 类似:

1

2

3

4

<servlet-mapping>

  <servlet-name>RestServlet</servlet-name>

  <url-pattern>/accounts/*</url-pattern>

</servlet-mapping>

   

serfj.properties

1

2

3

4

5

6

7

8

# 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将在哪里寻找控制器和序列化器。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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类是写一个控制器的最好方式,虽然处理的请求中不一定包含有参数,但方法可以返回对象并抛出异常。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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类的限定名应该是: 

1

main.package "." + alias.controllers.package "." + capitalized(singularized(resource name)) + suffix.controllers

如以下配置:

1

2

3

4

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请求。

1

2

3

4

@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 接口,不需要更多的解释。

如以下配置:

1

2

3

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 配置文件中定义。

转自:https://www.cnblogs.com/kofxxf/p/3979080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值