My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Project Information
Members
Featured
Downloads
Links

move 公告

Paoding Rest在2007年release 0.1到,2009年5月版本为0.9,目前更名Paoding Rose, 并转到http://code.google.com/p/paoding-rose/ 下,请跳转到新的页面吧过去

原内容

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

HOME: http://code.google.com/p/paoding-rest/ Forum: http://paoding.net/forum

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

Paoding-Rest是什么

Paoding-Rest是使用Java编写的,基于Spring的,标准而又新颖的WEB REST框架。 作者之前多次利用了http method的特性修正传统web框架的使用,这和REST在某种程度上有所吻合。Paoding-Rest可以说是一个具有REST特点的Java Web框架。 Paoding-Rest核心基于Spring容器实现,处理请求的Action必须配置在root-actions.xml文件中,这个文件会自动被Paoding装载, 这是Action能够轻松获取其它层提供的接口服务,也因为基于Spring使,Paoding-Rest能够以较少的代码,提供极其丰富的功能并具有很高灵活性(thanks to Spring)。

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

从0.3开始Paoding Rest提供了轻松的upload支持了!

Paoding-Rest不是什么

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

注意

Paoding-Rest是建立在Spring之上的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 int post(User user) {
		HttpSession session = RestContext.getSession();
		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配置:

	<filter>
		<filter-name>root</filter-name>
		<filter-class>net.paoding.rest.RestFilter</filter-class>
	</filter>

	<!-- RestFilter必须配置在最后,以让前面的Fiter能够起作用,否则会被RestFilter跳过 -->
	<filter-mapping>
		<filter-name>root</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-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=".html" />
	</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>

getting started

请参考paoding Rest提供的example。

tips

1、web.xml需要配置一个或多个net.paoding.rest.RestFilter,但是一般我们只需要一个名为root的Filter

2、只能采用

<url-pattern>
/STAR
</url-pattern>
配置形式该Filter,并且要配置
<dispatcher>
REQUEST
</dispatcher>
<dispatcher>
FORWARD
</dispatcher>

[因为wiki文法的影响,以上STAR实际应为星号]

3、需要在WEB-INF下配置一个root-actions.xml配合文件,放置Action对象,这是一个Spring格式的配置文件。

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

method_name对应Action中的方法是methodName,即下划线会被转化成符合Java习惯的方法名称

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

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

这些参数也可以通过RestContext的静态方法获取。

6、POJO控制器的方法可以放入多个Bean,甚至他们具有同样的类型:

//appPath/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/action_name, appPath/action_name?k=v

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

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

PUT时:由create(...)方法处理(但是目前http对put支持很弱,所以不推荐使用PUT,可以改使用POST,并带method=create调用create方法)

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

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

8、pojo控制器返回串规定: 如果以'/'开头,直接对它进行forward,不经过view name->view page file的转化。 /page/anotherlocation/some.html

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

"f:","file:"开头的处理和'/'一样。 file:/page/anotherlocation/some.html

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

以a:或action:开头表示,forward/redirect到该action a:user/231234 r:a:user/231234

以h:或hosting:开头表示,forward/redirect到另外的一个Action空间 (这个比较少用,这需要配置多个RestFilter)

其它的view都经过viewTransfer转化。

Powered by Google Project Hosting