您的位置:首页 > 编程语言 > Java开发

设计REST风格的Java MVC框架

2009-10-15 10:06 162 查看
是否对传统的Java MVC框架如Struts,WebWork感到失望?大量的XML配置文件,*.do的映射方式导致不得不编写很多FormBean来传递页面参数?强迫实现的Action接口导致一个类只能处理一个请求,十分不便。



流行的Web站点早已实现了REST风格的URL,例如豆瓣的URL,显示一本书不是subject.do?id=xxx,而是很自然的http://www.douban.com/subject/2129650/之类。



也许你会说,通过Apache的RewriteMod或者自己写一个UrlRewriteFilter也能实现这个目标,不过,为什么不能从MVC框架设计本身就实现这种模式呢?



Express-Wind框架的设计目标就是提供一种非常自然的URL映射,并且不限定处理URL的方法接口。



你可以通过一个简单的@Mapping告诉框架一个方法需要处理的URL:





public class MyPage {

@Mapping("/hello")

public String hello() {

return "<h1>Hello, world</h1>";

}

@Mapping("/hello/$1")

public String hello(String name) {

return "<h1>Hello, " + name + "</h1>";

}

}





URL中的参数通过$1,$2……指定,并且会自动传入到方法参数中。



你会得到以下显示效果,根据URL的不同而不同:







方法的返回值可以是String,例如一小段HTML,可以是void,表示你已经自己处理了HttpServletResponse对象,作为DEMO,用来演示时,以上代码工作地很好,不过,作为实际应用,我们需要一个模板系统来渲染页面,此时,应当返回一个TemplateRenderer对象:



@Mapping("/")

public Renderer index() {

Map<String, Object> model = new HashMap<String, Object>();

return new TemplateRenderer("/index.jsp", model);

}



你不需要知道页面是如何渲染的,只需传入模板文件路径和一个Map作为Model即可。无需任何配置,Express-Wind默认使用JSP作为模板,当然,还可以配置Velocity作为模板。



如何与IoC框架集成?



现在,几乎没有项目不使用IoC框架的,Express-Wind支持并且只支持与IoC框架集成使用,也就是说,不使用IoC框架就无法使用Express-Wind。你需要做的是两件事:



1. 把包含@Mapping的class放到IoC框架里(Spring的XML配置文件或Guice的Module)



2. 告诉Express-Wind你使用的是Spring还是Guice还是其他IoC容器,然后Express-Wind自动扫描IoC容器中所有的Bean,取出那些标记有@Mapping的bean的方法,因此,整个URL是0配置。如果一个URL映射没有起作用,多半是因为你忘记了把这个Bean放到IoC容器里了。



如果你想了解关于Express-Wind的更多信息,请参考:



http://code.google.com/p/express-me/wiki/ExpressWind
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: