小工具      在线工具  汉语词典  css  js  c++  java

SerfJ REST Java框架

Java 额外说明

收录于:42天前

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

网络.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>

农奴属性

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只有一个配置文件,即类路径中的/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。

控制器

控制器是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

    }

}

如果您正在寻找控制器,则控制器类的限定名称应该是:

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

搜索帐户资源的控制器类。此类的完全限定名称为:net.sf.serfj.demo.controllers.AccountController

SerfJ 使用注释来告诉控制器哪些方法可以接受哪些类型的 HTTP 请求。

1

2

3

4

@GET: 方法处理 GET 请求.

@POST: 方法处理 POST 请求.

@PUT: 方法处理 PUT 请求.

@DELETE: 方法处理 DELETE 请求.

另外,还有一个注解@DoNotRenderPage,它告诉控制器执行该方法后,页面将不会被渲染,而是会响应HTTP 204代码。如果该方法返回一个对象而不是页面,则不需要使用@DoNotRenderPage进行注释。只有当方法不返回任何值(void方法),并且开发者不想渲染结果页面时,才必须注意。

串行器
一个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

搜索帐户资源的 JSON 序列化程序类。此类的完全限定名称为:net.sf.serfj.demo.serializers.JsonAccountSerializer

看法
控制器中的方法执行后总是显示某一个页面,除非该方法返回了对象,或者使用 @DoNotRenderPage 对方法进行了标注。
显示页面保存路径是views.directory/资源名称/方法名称.jsp(.html或.htm)。其中 views.directory 在 serfj.properties 配置文件中定义。

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

. . .

相关推荐

额外说明

【华为电脑试题JAVA实现详解】——质数因数

 目录 一、题目描述 二、解题代码 一、题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 ) 数据范围:1≤n≤2×109+14  输入描述: 输入一个整数 输出描述: 按照从小

额外说明

C# 8.使用图表控件在新窗口中移动波形显示

1. 添加新窗口 在Form1中新建button控件,名称为buttonStartWaveDisp,这样单击就能调出Form2窗口 在Form1中增加如下: private void buttonStartWaveDisp_Click(object

额外说明

JavaScript 实战(图片切换)【轮播图】

功能描述: 点击下一张换到下一张图片。 点击上一张换到上一张图片。 等到最后一张时,再点击下一张呈现第一张图片。 实现效果: 图片切换 <!DOCTYPE html> <html lang="en"> <head> <meta charset="

额外说明

mysql explain执行计划详解

前言 在日常开发中,经常会碰到mysql性能调优的问题,比如说某个功能一开始使用的时候,响应挺快,但是随着时间的推移,应用的访问量,数据量上去之后,发现越来越慢,甚至更糟糕,通常来说,排除了网络相关的因素之后,大多数情况下都是由sql问题引起的 因此,如

额外说明

C++ debug下情况良好、release下频繁奔溃问题的跟踪与解析

VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新.

额外说明

2023.10.16 关于 死锁 详解

目录 引言 死锁原因 情况一 情况二 情况三 使用 jconsole 定位死锁 死锁四个必要条件 互斥使用 不可抢占 请求和保持 循环等待  死锁解决方法 解决情况二死锁问题 引言 一旦程序出现死锁,就会导致线程无法继续执行后续工作,意味着该程序有严重

额外说明

Java学习笔记:创建线程的两种方法

Java学习笔记:创建线程的两种方法 一、预备工作 1、创建Maven项目ThreadDemo 2、在pom.xml里添加依赖 二、继承Thread类创建子线程

额外说明

【GoWeb项目-个人Blog】个人Blog开篇

1个人blog网站 一直想开发一个属于自己的Blog,以前也尝试开发,但是后来就不了了之了,现在终于来了,这次把开发过程给记录下来。同时记录开发过程中的问题。加油吧!- 第一篇主要就是项目结构搭建和读取配置文件 注意:项目结构后期可能会更新 -1.1 项

额外说明

如何为WordPress中的帖子添加多个作者(共同作者)

您想在 WordPress 中显示一篇文章的多个作者吗?许多网站通常有多个作者撰写同一篇文章。例如,在新闻网站上,有时多个记者会撰写一个故事。在这种情况下,您可能需要向所有参与该帖子的作者致谢。在本文中,我们将向您展示如何允许多个作者与 WordPres

额外说明

如何使用Google Analytics(分析)追踪WordPress中的使用者参与度

您是否正确跟踪 WordPress 网站上的用户参与度?用户参与度是最重要的跟踪指标之一,因为它可以帮助您战略性地规划增长。在本文中,我们将向您展示如何使用 Google Analytics 跟踪 WordPress 中的用户参与度。 您是否正确跟踪 W

ads via 小工具