设计 REST 风格的 MVC 框架
2010-01-08 00:00:00 来源:WEB开发网核心提示: /:匹配默认的 Servlet,当一个 URL 没有匹配到任何 Servlet 时,设计 REST 风格的 MVC 框架(5),就匹配默认的 Servlet,一个 Web 应用程序如果没有映射默认的 Servlet,依次将每个 $n 替换为 ([^\\/]*),其余部分作精确匹配,Web 服务器
/:匹配默认的 Servlet,当一个 URL 没有匹配到任何 Servlet 时,就匹配默认的 Servlet。一个 Web 应用程序如果没有映射默认的 Servlet,Web 服务器会自动为 Web 应用程序添加一个默认的 Servlet。
REST 风格的 URL 一般不含后缀,我们只能将 DispatcherServlet 映射到“/”,使之变为一个默认的 Servlet,这样,就可以对任意的 URL 进行处理。
由于无法像 Struts 等传统的 MVC 框架根据后缀直接将一个 URL 映射到一个 Controller,我们必须依次匹配每个有能力处理 HTTP 请求的 @Mapping 方法。完整的 HTTP 请求处理流程如图 1 所示。
图 1. 请求处理流程
当扫描到标记有 @Mapping 注解的方法时,需要首先检查 URL 与方法参数是否匹配,UrlMatcher 用于将 @Mapping 中包含 $1、$2 ……的字符串变为正则表达式,进行预编译,并检查参数个数是否符合方法参数,代码见清单 5。
清单 5. 定义 UrlMatcherfinal class UrlMatcher {
final String url;
int[] orders;
Pattern pattern;
public UrlMatcher(String url) {
...
}
}
将 @Mapping 中包含 $1、$2 ……的字符串变为正则表达式的转换规则是,依次将每个 $n 替换为 ([^\\/]*),其余部分作精确匹配。例如,“/blog/$1/$2”变化后的正则表达式为:
^\\/blog\\/([^\\/]*)\\/([^\\/]*)$
更多精彩
赞助商链接