`
Qieqie
  • 浏览: 340011 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Paoding Rest for Java

阅读更多

Paoding-Rest is a java web rest framework based on spring.

HOME: http://code.google.com/p/paoding-rest/
示例应用: http://paoding.net/rest-demo

Paoding-Rest是Paoding中文分词作者的又一个开源项目。目前版本为0.2。


Paoding-Rest是什么

Paoding-Rest是使用Java编写的,基于Spring的,标准而又新颖的WEB REST框架。
作者之前多次利用了http method的特性修正传统web框架的使用,这和REST在某种程度上有所吻合。Paoding-Rest可以说是一个具有REST特点的Java Web框架。
Paoding-Rest的核心类RestSerlvet继承于Spring提供的FrameworkServlet, 使Paoding-Rest能够以相当少的代码量,提供极其丰富的功能并具有很高灵活性(thanks to Spring)。

如果您熟悉Spring,眨两眼就上手Paoding-Rest了。使用Paoding-Rest,您可以抛弃很多无聊、故弄玄虚的工作了。

Paoding-Rest不是什么

Paoding-Rest不是一个页面技术,所以您还需要结合其它页面技术来完成整个web应用。
默认的Paoding-Rest是使用jsp来展现页面的,不过您只要稍稍配置一下,就可以使用velocity,freemark之类的其它页面展现技术了。

注意

Paoding-Rest是建立在Spring FrameworkServlet之上的web框架,如果您不喜欢Spring或者因为其它原因不能使用Spring,那么Paoding-Rest并不适合您。

Paoding-Rest的显著特点

1) Rest风格的url和处理

2) POJO的Controller and Model

Controller:
public class SessionAction {
	
	private UserBo userBo;
	
	public void setUserBo(UserBo userBo) {
		this.userBo = userBo;
	}

	/**
	 * 展现会话开始页面(即登录页面)
	 */
	public String get(HttpServletRequest request, HttpSession session) {
		if (session.getAttribute("user_id") != null) {
			// 如果已经登录过了,直接到产品列表资源页面
			return "r:action:product";
		} else {
			// 如果还没有登录,则展现登录页面
			return "login";
		}
	}

	/**
	 * 执行用户登录认证
	 * 
	 * @param user
	 *            登录者信息
	 * @return
	 */
	public String post(User user, HttpSession session) {
		user = userBo.auth(user.getLogonName(), user.getPassword());
		if (user != null) {
			// 验证正确
			session.setAttribute("user_id", user.getId());
			return "@:1";
		} else {
			// 报告用户名和密码错误
			return "@:-1";
		}
	}

	/**
	 * 登出
	 * 
	 * @return
	 */
	public String delete(HttpSession session) {
		// 使会话失效
		session.invalidate();
		// 重定向到登录会话开始页面(即登录页面)
		return "r:action:session";
	}
}


Model

public class User {

	private Long id;
	private String logonName;
	private String password;
	private String name;
	private String address;
	private String postalCode;
	private double balance = Integer.MAX_VALUE;

	//getter & setting here
}


3)简单的web.xml配置:
	<servlet>
		<servlet-name>shopping</servlet-name>
		<servlet-class>net.paoding.rest.RestServlet</servlet-class>
		<init-param>
			<param-name>defaultAction</param-name>
			<param-value>home</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>shopping</servlet-name>
		<url-pattern>/shopping/*</url-pattern>
	</servlet-mapping>


4) Controller基于Spring配置(ServletName-servlet.xml=>shopping-servlet.xml),并轻松连接到中间层:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<bean name="viewTransfer"
		class="net.paoding.rest.SimpleViewTransfer">
		<property name="prefix" value="/page/shopping/" />
		<property name="suffix" value=".vm" />
	</bean>

	<bean name="home" class="net.paoding.rest.examples.shopping.action.HomeAction"
		autowire="byName" />

	<bean name="session" class="net.paoding.rest.examples.shopping.action.SessionAction"
		autowire="byName" />
</beans>





[b]getting started[b]


现在您需要准备这些工作:

1)web容器,比如Tomcat,Resin,用以运行web app;

2)一个IDE环境,比如Eclipse,NetBean,当然这不是必须的。

我们可以开始工作了。

----------------------------------------------------

搭建并开始使用Paoding-Rest:

1、创建一个普通的Java工程,名为HelloRest.

2、把Paoding-Rest/examples目录及其子目录和文件整个copy到HelloRest/src

3、把Paoding-Rest/war目录及其子目录和文件整个copy到HelloRest/war

4、把Paoding-Rest/paoding-rest.jar copy到HelloRest/war/WEB-INF/lib下

5、HelloRest/war/WEB-INF/lib下的jar文件,架到您工程的class path中。

6、设置该工程的编译路径为war/WEB-INF/classes,并重新编译代码

OK,现在可以使用Paoding-Rest了,将HelloRest/war部署到web容器了,
并通过127.0.0.1:8080/appPath/ 访问。
如果显示了一些列的链接列表清单,则表示一切顺利。


[b] tips [b]

1、web.xml需要配置一个或多个net.paoding.rest.RestServlet

2、每个 RestServlet 需要一个serlvetName-servlet.xml的Spring配置文件,用于配置POJO控制器servletName]要替换成实际配置时该Servlet的名称。

3、每个 RestServlet 都需要一个servlet-mapping配置,并只能采用<url-pattern>/shopping/*</url-pattern>这样的配置形式


4、POJO控制器就是一个普通的Java对象,命名、方法名、方法参数的个数和类型没有任何限制,每个方法可以返回任何对象(Paoding使用toString()获取其view name),也可以返回null。但有一个限制:不能有同名的方法。浏览器使用appPath/servlet-path/pojo_action/method_name/xxx地址时候,方法名为method_name的方法将被调用,处理请求

5、POJO控制器的方法可以含有全部或部分 HttpServletRequest,HttpServletResponse,HttpSession,HttpServlet等参数,且顺序可任意:

public String login(User user, HttpSession session, int h, HttpServletRequest req, HttpServletResponse resp,  HttpServlet servlet){
    return "home";
}


6、POJO控制器的方法可以放入多个Bean,甚至他们具有同样的类型:
//aooPath/servlet/action/hello/110/xyz?user.id=123&user1.name=wang&user2.name=antherwang
public String hello(int a, String b, User c, User d, Company e, HttpServletRequest req) {
    return "hello";
}


URI中的110,xyz按照hello方法声明的顺序分别设置给a和b

user.xxx以及user1.xxx的属性设置到第1个user对象中(也就是User c)

user2.xxx的属性设置到第2个user对象中(也就是User d)

company.xxx的属性设置到Campany对象中。

7、支持http method语义:

对只有action name,没有method name的请求,如:appPath/servlet/action_name, appPath/servlet/action_name?k=v

GET时: 如果POJO控制器有声明index(...)方法,由该方法负责处理此请求,否则由get(...)方法处理

POST时:由post(...)方法处理

PUT时:由put(...)方法处理

DELETE时:由delete(...)处理

这些请求只要没有被用到,POJO控制器都可以不声明它们。

8、pojo控制器返回串规定:

如果以"r:","redirect:","!:"开头,表示使用redirect,此时不经过view name->view page file的转化。

其它表示使用forward到对应的page file。

如果以"f:","file:"开头,表示不需要经过viewTransfer,比如可以直接返回"file:/page/anotherlocation/some.html"

以"@:"开头,表示返回随后的字符串,这一般用于ajax操作的返回值,如"@:1",用于返回1给ajax客户端。

其它的view都经过viewTransfer转化。
分享到:
评论
8 楼 cnoss 2008-03-27  
http://www.iteye.com/topic/176755,这是一个同类项目,大家有兴趣可以去看看
7 楼 轮回的猫 2008-02-18  
关注Paoding,关注Qieqie
6 楼 zlt820107 2008-01-22  
我们现在的一个项目搜索引擎用的是Paoding的分词,感觉很好

关注Paoding,关注Qieqie
5 楼 crazycode 2007-12-18  
嗯,想法不错,构造方法参数的思路和我在最近一个框架的设计想到一块去了,不过我使用了annotation而不是rest来定位变量。希望能够交流一下
4 楼 Qieqie 2007-11-22  
rojazz1999 写道
又冒出来一个轮子。。。

你错了,Paoding-Rest不是造出一个新的轮子,而只是在原有的轮子上换了个轮胎
3 楼 rojazz1999 2007-11-22  
又冒出来一个轮子。。。
2 楼 Qieqie 2007-11-22  
使用Cetia4,可能会吐血:

1、developer要继承于它提供的抽象的RestServlet,编写自己的Servlet控制器,并配置到web.xml中
就这一点,就很不理想了
2、每个控制器都需要依赖Cetia4,活生生引入一个RenderContext类,难道java servlet规范的各种类还不够吗?

public class TopicsServlet extends RestServlet {
	public String render( RenderContext context ) {
		return "display_topics";
	}
}


Paoding-Rest,提供了更理想的方式:

1、开发者不需要继承或实现Paoding-Rest的任何一个类或接口,控制器(C)和模型(M)都是POJO,且很漂亮的
2、持续开发过程中,不用再编辑web.xml了,各个控制器管各自的[ServletName]-servlet.xml配置文件
3、控制器的方法定义可以很随意,最简单的Action可以如下:
public class SomeAction {
	public String index() {return "r:http://paoding.net/rest-demo/main/user";}
	public String get(String id, HttpServletRequest req) {return "profile";}
}

4、和Spring的完美结合,使用[ServletName]-servlet.xml,利用Spring的承诺可以和中间层无缝连接。
[ServletName]-servlet.xml本身是Spring的规范要求。
1 楼 dingyuan 2007-11-22  
恩,不错,已经很想Cetia4了

相关推荐

    庖丁解牛分词 java包

    "庖丁解牛分词" 是一款针对中文文本处理的分词工具,主要适用于Java环境。这个工具包的名称形象地借用中国古代故事“庖丁解牛”,寓意对文本的精细处理,如同庖丁对牛肉的熟练分解。在Java开发中,分词是自然语言...

    庖丁解牛 中文分词工具

    "lib"文件夹包含的Jar包是"庖丁解牛"的运行库,其中集成了所有必要的类和资源,使得该工具能在Java环境中无缝运行。用户需要确保Java环境已经正确配置,以便能够运行这个工具。对于开发人员来说,理解并熟悉这些库中...

    Lucene3.0以上版本庖丁解牛分词法demo

    最新庖丁解牛分词法的使用demo,支持Lucene3.3、3.4等3.0以上版本,庖丁解牛的分词包为自己编译生成的,之前的2.0的版本不能支持Lucene3.0以上版本,所以需要从svn下载最新的庖丁解牛源码,生成jar文件(我同样已...

    庖丁解牛jarbao

    "庖丁解牛jarbao"是一个专为中文分词设计的工具,它的核心是"庖丁解牛中文分词器"。在Java开发环境中,它通常以jar包的形式提供,如"paoding-analysis - 3.1.jar",这表明它是基于Java语言实现的,并且是版本3.1的...

    庖丁解牛 源码 for Lucene 2.4

    《庖丁解牛 源码 for Lucene 2.4》是一份针对开源全文搜索引擎Lucene 2.4版本的深度解析资料。这个压缩包包含的文件名为"paoding-for-lucene-2.4",很可能是针对中文处理的Paoding Lucene库的源代码分析或扩展。...

    lucene中文分词(庖丁解牛)庖丁分词

    《Lucene中文分词——庖丁解牛》 在自然语言处理领域,中文分词是基础且关键的一环。在Java开发中,Apache Lucene是一个强大的全文搜索引擎库,但默认并不支持中文,这就需要借助第三方分词工具。本文将深入探讨...

    庖丁分词jar包

    庖丁分词是一款高效、灵活且易用的中文分词工具,主要针对Java平台设计。在中文信息处理领域,分词是基础性的工作,它将连续的汉字序列切分成具有语义的词汇,为后续的文本分析、信息检索、情感分析等任务提供支持。...

    lucene3.0庖丁+索引搜索程序

    《深入剖析Lucene3.0:庖丁解牛与索引搜索实践》 在IT行业中,搜索引擎技术扮演着至关重要的角色,而Lucene作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene3.0版本,结合“庖丁解...

    最新庖丁分词源代码(for lucene3.0)

    庖丁分词是Java实现的高性能中文分词库,其名称来源于《庄子·养生主》中的“庖丁解牛”故事,寓意在处理复杂问题时,如庖丁解牛般游刃有余。它以其高效的分词速度和准确的分词结果在开源社区中受到好评。 2. **与...

    庖丁分词.jar

    庖丁分词.jar 庖丁分词.jar 庖丁分词.jar 庖丁分词.jar

    庖丁解牛工具

    "庖丁解牛工具"是一款基于Java开发的文本分析工具,尤其在中文分词领域有着广泛的应用。这个工具的名字来源于中国古代寓言故事“庖丁解牛”,寓意对文本的精细处理和深入理解,就像庖丁对牛肉的熟练切割一样。在IT...

    lucene3.0 整合庖丁解牛实例

    实例是一个java实例,可直接导入到MyEclipse中使用。 其中是lucene3.0整合了庖丁解牛分词法,添加了高亮显示。因为lucene3.0无法整合paoding-analysis.jar 所以我已经把paoding-analysis中的源码整合进来了避免无法...

    庖丁分词jar包和dic目录

    庖丁分词是基于Java开发的一个高效、可扩展的中文分词库,它借鉴了Lucene的分词技术,并在此基础上进行了优化,以提高对中文文本的处理效率。 描述中的链接指向了GitHub上的项目“chubbyjiang/MapReduce”,这可能...

    庖丁解牛分词源码

    4. **Java编程**:作为Java实现的分词工具,庖丁解牛分词器利用了Java的面向对象特性,可能包含了大量的类和接口设计。例如,它可能会有词典类、分词器类、匹配算法类等,这些类之间的关系和协作是理解源码的关键。 ...

    Auto.js庖丁_3.5.0.apk

    Auto.js庖丁_3.5.0

    lucene 中文分词 庖丁解牛

    Lucene是Java语言编写的一个高性能、可扩展的信息检索库,它提供了完整的搜索功能,包括索引构建、查询解析、评分以及结果排序等。在处理中文文档时,Lucene需要依赖于第三方的分词器,以便对中文文本进行有效的切分...

    Auto.js庖丁3.2.0最新版.rar

    Auto.js庖丁是一款基于JavaScript的自动化工具,专为Android设备设计,允许用户编写脚本来实现各种自动化的任务。3.2.0版本是该软件的一个更新版本,可能包含了一些新功能、性能优化或修复了已知问题。在当前场景中...

    庖丁解牛分词之自定义词库、庖丁解牛配置

    在IT行业中,分词是文本处理的一个重要环节,特别是在自然语言处理(NLP)和搜索引擎优化(SEO)等领域...对于Java开发者来说,能够熟练运用庖丁解牛分词并结合自定义词库,可以极大地增强其在文本处理项目中的竞争力。

    autojs庖丁3.2.0.rar

    《AutoJS庖丁3.2.0加密详解》 在移动应用开发领域,尤其是自动化脚本编写中,AutoJS是一款非常流行的JavaScript编程工具,它允许用户在Android设备上编写脚本来实现各种自动化任务。提到“庖丁3.2.0 加密”,这很...

Global site tag (gtag.js) - Google Analytics