1. 概述
本文,我们来分享 RequestToViewNameTranslator 组件。在 《精尽 Spring MVC 源码分析 —— 组件一览》 中,我们对它已经做了介绍:
org.springframework.web.servlet.RequestToViewNameTranslator
,请求到视图名的转换器接口。代码如下:
// RequestToViewNameTranslator.java |
- 在 DispatcherServlet 中,我们已经看到,在 ModelAndView 不存在对应的视图时,会通过 RequestToViewNameTranslator 来获取默认的视图名,作为其视图。
2. DefaultRequestToViewNameTranslator
org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
,实现 RequestToViewNameTranslator 接口,默认且是唯一的 RequestToViewNameTranslator 实现类。
2.1 构造方法
// DefaultRequestToViewNameTranslator.java |
- 不要看变量这么多,实际灰常简单。一起继续往下瞅瞅。
2.2 getViewName
实现 #getViewName(HttpServletRequest request)
方法,代码如下:
// DefaultRequestToViewNameTranslator.java |
<1>
处,获得请求路径。<2>
处,调用#transformPath(String lookupPath)
方法,转换请求路径,后续在拼接上prefix
和suffix
,形成最终的视图名。代码如下:// DefaultRequestToViewNameTranslator.java
protected String transformPath(String lookupPath) {
String path = lookupPath;
// 移除开头 SLASH
if (this.stripLeadingSlash && path.startsWith(SLASH)) {
path = path.substring(1);
}
// 移除末尾 SLASH
if (this.stripTrailingSlash && path.endsWith(SLASH)) {
path = path.substring(0, path.length() - 1);
}
// 移除拓展名
if (this.stripExtension) {
path = StringUtils.stripFilenameExtension(path);
}
// 替换分隔符
if (!SLASH.equals(this.separator)) {
path = StringUtils.replace(path, SLASH, this.separator);
}
return path;
}- 好咧,这就是这个类的核心。😈 没有其它代码了。哈哈哈哈。
666. 彩蛋
开心么???哈哈哈哈????
参考和推荐如下文章: