当前位置: 首页 > news >正文

上海高端网站建设服中山蓝图科技网站建设

上海高端网站建设服,中山蓝图科技网站建设,富阳网站建设服务,网站开发工程师招聘信息RequestToViewNameTranslator 组件RequestToViewNameTranslator 组件#xff0c;视图名称转换器#xff0c;用于解析出请求的默认视图名。就是说当 ModelAndView 对象不为 null#xff0c;但是它的 View 对象为 null#xff0c;则需要通过 RequestToViewNameTranslator 组件…RequestToViewNameTranslator 组件RequestToViewNameTranslator 组件视图名称转换器用于解析出请求的默认视图名。就是说当 ModelAndView 对象不为 null但是它的 View 对象为 null则需要通过 RequestToViewNameTranslator 组件根据请求解析出一个默认的视图名称。回顾先来回顾一下在 DispatcherServlet 中处理请求的过程中哪里使用到 RequestToViewNameTranslator 组件可以回到《一个请求的旅行过程》中的 DispatcherServlet 的 doDispatch 方法中看看如下protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {HttpServletRequest processedRequest request;try {ModelAndView mv null;try {// ... 省略相关代码// 6 真正的调用 handler 方法也就是执行对应的方法并返回视图mv ha.handle(processedRequest, response, mappedHandler.getHandler());// ... 省略相关代码// 8 无视图的情况下设置默认视图名称applyDefaultViewName(processedRequest, mv);// ... 省略相关代码}catch (Exception ex) {dispatchException ex; // 10 记录异常}// 11 处理正常和异常的请求调用结果processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);}catch (Exception ex) { // 12 已完成处理 拦截器 }finally { } }private void applyDefaultViewName(HttpServletRequest request, Nullable ModelAndView mv) throws Exception {if (mv ! null !mv.hasView()) {String defaultViewName getDefaultViewName(request);if (defaultViewName ! null) {mv.setViewName(defaultViewName);}} }Nullable protected String getDefaultViewName(HttpServletRequest request) throws Exception {return (this.viewNameTranslator ! null ? this.viewNameTranslator.getViewName(request) : null); } 在上面方法的8处会调用 applyDefaultViewName(HttpServletRequest request, Nullable ModelAndView mv) 方法如果返回的 ModelAndView 对象不为 null但是他的 View 对象为 null则需要通过 viewNameTranslator 的 getViewName(HttpServletRequest request) 方法从请求中获取默认的视图名如果获取到了则设置到 ModelAndView 对象中applyDefaultViewName(HttpServletRequest request, Nullable ModelAndView mv) 这个方法还会在处理异常的时候调用因为处理异常也返回 ModelAndView 对象所以需要做“类似”的处理RequestToViewNameTranslator 接口org.springframework.web.servlet.RequestToViewNameTranslator视图名称转换器用于解析出请求的默认视图名代码如下public interface RequestToViewNameTranslator {/*** 根据请求获得其视图名*/NullableString getViewName(HttpServletRequest request) throws Exception; }Spring MVC 就提供一个实现类org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator我看了一下Spring Boot 没有提供其他的实现类初始化过程在 DispatcherServlet 的 initRequestToViewNameTranslator(ApplicationContext context) 方法初始化 RequestToViewNameTranslator 组件方法如下private void initRequestToViewNameTranslator(ApplicationContext context) {try {this.viewNameTranslator context.getBean(REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME, RequestToViewNameTranslator.class);if (logger.isTraceEnabled()) {logger.trace(Detected this.viewNameTranslator.getClass().getSimpleName());}else if (logger.isDebugEnabled()) {logger.debug(Detected this.viewNameTranslator);}}catch (NoSuchBeanDefinitionException ex) {// We need to use the default./*** 如果未找到则获取默认的 RequestToViewNameTranslator 对象* {link org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator}*/this.viewNameTranslator getDefaultStrategy(context, RequestToViewNameTranslator.class);if (logger.isTraceEnabled()) {logger.trace(No RequestToViewNameTranslator REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME : using default [ this.viewNameTranslator.getClass().getSimpleName() ]);}} } 获得 Bean 名称为 viewNameTranslator类型为 RequestToViewNameTranslator 的 Bean 将其设置为 viewNameTranslator如果未获得到则获得默认配置的 RequestToViewNameTranslator 实现类调用 getDefaultStrategies(ApplicationContext context, ClassT strategyInterface) 方法就是从 DispatcherServlet.properties 文件中读取 RequestToViewNameTranslator 的默认实现类如下org.springframework.web.servlet.RequestToViewNameTranslatororg.springframework.web.servlet.view.DefaultRequestToViewNameTranslatorDefaultRequestToViewNameTranslatororg.springframework.web.servlet.view.DefaultRequestToViewNameTranslator 实现 RequestToViewNameTranslator 接口默认且是唯一的 RequestToViewNameTranslator 实现类构造方法public class DefaultRequestToViewNameTranslator implements RequestToViewNameTranslator {private static final String SLASH /;/*** 前缀*/private String prefix ;/*** 后缀*/private String suffix ;/*** 分隔符*/private String separator SLASH;/*** 是否移除开头 {link #SLASH}*/private boolean stripLeadingSlash true;/*** 是否移除末尾 {link #SLASH}*/private boolean stripTrailingSlash true;/*** 是否移除拓展名*/private boolean stripExtension true;/*** URL 路径工具类*/private UrlPathHelper urlPathHelper new UrlPathHelper(); }getViewName实现 getViewName(HttpServletRequest request) 方法代码如下Override public String getViewName(HttpServletRequest request) {// 获得请求路径String lookupPath this.urlPathHelper.getLookupPathForRequest(request);// 获得视图名return (this.prefix transformPath(lookupPath) this.suffix); }Nullable protected String transformPath(String lookupPath) {String path lookupPath;// 移除开头 SLASHif (this.stripLeadingSlash path.startsWith(SLASH)) {path path.substring(1);}// 移除末尾 SLASHif (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; }通过 urlPathHelper 获取该请求的请求路径调用 transformPath(String lookupPath) 方法获得视图名并添加前后缀默认都是空的。实际上就是你的请求 URI总结本文对 Spring MVC 的RequestToViewNameTranslator 组件进行了分析视图名称转换器用于解析出请求的默认视图名。当 ModelAndView 对象不为 null但是它的 View 对象为 null则需要通过 RequestToViewNameTranslator 组件根据请求解析出一个默认的视图名称。默认的 DefaultRequestToViewNameTranslator 实现类返回的就是请求的 URI。我们目前最常用的 ResponseBody 注解对应的 RequestResponseBodyMethodProcessor 返回值处理器所得到的 ModelAndView 对象为 null所以不会用到该组件也不会进行视图渲染前后端分离嘛~
http://www.hkea.cn/news/14354707/

相关文章:

  • 免费网站设计培训班科技大学全国排名
  • 企业做网站需要提交的资料表格wordpress一键分享微博
  • 网站设计公司长沙婚礼视频制作软件
  • 部门网站建设怎么做建筑企业名单和电话
  • 口子网站怎么做张掖建设网站
  • 删除网站内容嵩明县住房和城乡建设局网站
  • 网站编辑工作内容怎么写烟台广告公司南网站建设评价
  • 俄文视频网站开发苏州集团网站设计公司
  • 苏州企业建设网站服务网站建设外包注意事项
  • 网站开发的项目内容网页设计实训3000字
  • 寻找大连网站建设江苏体育建设场地网站
  • 自助建站英文wordpress下载弹窗
  • 用自己电脑配置服务器做网站静态单页网站wordpress
  • 如东建设局网站公司装修开工仪式需要准备什么
  • 网站返回500错误页面网站建设怎样做好
  • 网站开发人员职能深圳建设营销型网站
  • 网站开发需要注册账户吗如何在微信小程序上开店
  • 常用网站开发工具网站开发未按合同约定工期完工
  • 同一个阿里云可以做两个网站吗南通注册公司
  • 微软网站制作软件wordpress %s
  • 网站如何制作浙江源码编程器
  • 泉州网站建设是什么意思水文化建设网站
  • 漫画驿站网页设计图纸尺寸大小邯郸的互联网公司
  • 哪家公司设计网站好网站建设应列支什么科目
  • app网站开发电子商务网站的建设包含哪些流程
  • 建设彩票开奖网站金溪网站建设制作
  • 教学互动网站开发背景wordpress增加背景图片
  • 西安网站优化招聘网wordpress 增加其它语言
  • 建立网站的公司平台沈阳大十字街附近做网站公司
  • 网站配色的原理和方法怎样去推广一个平台