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

怎么设置网站栏目百度推广营销

怎么设置网站栏目,百度推广营销,综合网站开发设计,长沙官网优化技术文章目录一、视图解析的核心价值二、核心接口设计三、五大核心实现类源码解析1. InternalResourceViewResolver(JSP核心解析器)2. XmlViewResolver(XML配置视图解析器)3. ResourceBundleViewResolver(属性文件配置&…

文章目录

      • 一、视图解析的核心价值
      • 二、核心接口设计
      • 三、五大核心实现类源码解析
        • 1. InternalResourceViewResolver(JSP核心解析器)
        • 2. XmlViewResolver(XML配置视图解析器)
        • 3. ResourceBundleViewResolver(属性文件配置)
        • 4. ContentNegotiatingViewResolver(内容协商解析器)
        • 5. AbstractTemplateViewResolver(模板引擎抽象基类)
      • 四、视图解析链工作机制
        • Ordered接口控制优先级:
      • 五、内容协商机制深度解析
        • 1. 协商策略
        • 2. 支持的协商策略
        • 3. 视图内容协商流程
      • 六、现代模板引擎集成
        • 1. Thymeleaf集成原理
        • 2. FreeMarker集成原理
        • 3. Velocity集成原理
      • 七、视图解析性能优化
        • 1. 视图缓存机制
        • 2. 模板预编译
        • 3. 静态资源优化
      • 八、高级应用场景
        • 1. 多主题支持
        • 2. 设备自适应视图
        • 3. 动态视图选择
      • 九、设计思想总结

本文是Spring MVC九大组件解析系列第七篇,我们将深入探索视图解析的核心机制,揭开逻辑视图名到物理视图的转换奥秘,分析模板引擎集成原理,以及ViewResolver如何支持多视图技术统一抽象。Spring MVC整体设计核心解密参阅:Spring MVC设计精粹:源码级架构解析与实践指南

一、视图解析的核心价值

在Web应用中,视图解析是连接控制器与展示层的关键桥梁:

  • 呈现分离:将业务逻辑与展示逻辑完全解耦
  • 多视图支持:同一数据模型支持多种呈现方式(HTML/JSON/XML等)
  • 灵活扩展:支持各种模板引擎和技术栈的无缝集成
  • 国际化:根据地域和语言动态选择视图资源

Spring MVC通过ViewResolver组件实现四大核心功能:

  1. 视图定位:将逻辑视图名映射到物理视图资源
  2. 技术抽象:统一不同视图技术的访问接口
  3. 内容协商:根据客户端需求选择最佳视图呈现方式
  4. 链式解析:支持多个解析器协同工作

二、核心接口设计

源码位置org.springframework.web.servlet.ViewResolver
核心源码
在这里插入图片描述
源码位置org.springframework.web.servlet.View
核心源码
在这里插入图片描述
设计哲学:通过统一的接口抽象各种视图技术,实现策略模式的可扩展架构。

三、五大核心实现类源码解析

1. InternalResourceViewResolver(JSP核心解析器)

功能:支持JSP、JSTLServlet容器原生视图技术
源码位置org.springframework.web.servlet.view.InternalResourceViewResolver
核心源码
在这里插入图片描述
在这里插入图片描述

配置示例

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>
2. XmlViewResolver(XML配置视图解析器)

功能:通过XML文件定义视图bean
源码位置org.springframework.web.servlet.view.XmlViewResolver
核心源码
在这里插入图片描述
在这里插入图片描述
XML视图定义

<beans><bean id="userList" class="org.springframework.web.servlet.view.JstlView"><property name="url" value="/WEB-INF/views/user/list.jsp"/></bean><bean id="productDetail" class="org.springframework.web.servlet.view.JstlView"><property name="url" value="/WEB-INF/views/product/detail.jsp"/></bean>
</beans>
3. ResourceBundleViewResolver(属性文件配置)

功能:通过properties文件配置视图映射
源码位置org.springframework.web.servlet.view.ResourceBundleViewResolver
核心源码
在这里插入图片描述
在这里插入图片描述
属性文件配置(views.properties):

userList.(class)=org.springframework.web.servlet.view.JstlView
userList.url=/WEB-INF/views/user/list.jspproductDetail.(class)=org.springframework.web.servlet.view.JstlView
productDetail.url=/WEB-INF/views/product/detail.jsp
4. ContentNegotiatingViewResolver(内容协商解析器)

功能:根据客户端请求选择最佳视图
源码位置org.springframework.web.servlet.view.ContentNegotiatingViewResolver
核心源码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. AbstractTemplateViewResolver(模板引擎抽象基类)

功能:为各种模板引擎提供统一抽象
源码位置org.springframework.web.servlet.view.AbstractTemplateViewResolver
核心源码
在这里插入图片描述
在这里插入图片描述

四、视图解析链工作机制

Spring MVC支持多个ViewResolver组成解析链:
在这里插入图片描述

Ordered接口控制优先级:
@Configuration
public class ViewResolverConfig {@Bean@Order(1)public ViewResolver contentNegotiatingViewResolver() {return new ContentNegotiatingViewResolver();}@Bean@Order(2)public ViewResolver thymeleafViewResolver() {return new ThymeleafViewResolver();}@Bean@Order(3)public ViewResolver jspViewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}

五、内容协商机制深度解析

1. 协商策略

在这里插入图片描述

2. 支持的协商策略
策略类型实现类检测方式
路径扩展PathExtensionContentNegotiationStrategy.html, .json, .xml
参数指定ParameterContentNegotiationStrategy?format=json
请求头HeaderContentNegotiationStrategyAccept: application/json
固定类型FixedContentNegotiationStrategy默认配置
3. 视图内容协商流程

在这里插入图片描述

六、现代模板引擎集成

1. Thymeleaf集成原理
// 关键源码:org.thymeleaf.spring5.view.ThymeleafViewResolver
// 试图加载
protected View loadView(String viewName, Locale locale) throws Exception {// 构建ThymeleafViewThymeleafView view = new ThymeleafView(viewName);view.setTemplateEngine(this.templateEngine);view.setLocale(locale);return view;
}// 视图渲染
public class ThymeleafView extends AbstractView {protected void renderMergedOutputModel(Map<String, Object> model,HttpServletRequest request,HttpServletResponse response) throws Exception {// 创建Thymeleaf上下文WebContext context = new WebContext(request, response, request.getServletContext(), getLocale(), model);// 渲染模板this.templateEngine.process(this.viewName, context, response.getWriter());}
}
2. FreeMarker集成原理
// 关键源码:org.springframework.web.servlet.view.freemarker.FreeMarkerView
// 视图渲染
protected void doRender(Map<String, Object> model,HttpServletRequest request,HttpServletResponse response) throws Exception {// 暴露Spring宏支持if (this.exposeSpringMacroHelpers) {model.put("spring", SpringMacroRequestContext(request, response));}// 渲染FreeMarker模板getTemplate().process(model, response.getWriter());
}
3. Velocity集成原理
// 关键源码:org.springframework.web.servlet.view.velocity.VelocityView
// 视图渲染
protected void doRender(Map<String, Object> model,HttpServletRequest request,HttpServletResponse response) throws Exception {// 创建Velocity上下文VelocityContext velocityContext = createVelocityContext(model, request, response);// 合并模板mergeTemplate(getTemplate(), velocityContext, response);
}

七、视图解析性能优化

1. 视图缓存机制
// 关键源码:org.springframework.web.servlet.view.AbstractCachingViewResolver
public View resolveViewName(String viewName, Locale locale) throws Exception {// 生成缓存键Object cacheKey = getCacheKey(viewName, locale);// 检查缓存View view = this.viewAccessCache.get(cacheKey);if (view == null) {synchronized (this.viewCreationCache) {view = this.viewCreationCache.get(cacheKey);if (view == null) {// 创建新视图并缓存view = createView(viewName, locale);if (view != null) {this.viewCreationCache.put(cacheKey, view);this.viewAccessCache.put(cacheKey, view);}}}}return view;
}
2. 模板预编译
@Configuration
public class TemplatePrecompilationConfig {@PostConstructpublic void precompileTemplates() {// 启动时预编译常用模板String[] templates = {"index", "user/list", "product/detail"};for (String template : templates) {precompileTemplate(template);}}private void precompileTemplate(String templateName) {try {// 触发模板编译Template template = templateEngine.getTemplate(templateName);// 缓存编译结果templateCache.put(templateName, template);} catch (Exception e) {logger.warn("Failed to precompile template: " + templateName, e);}}
}
3. 静态资源优化
@Configuration
public class ResourceHandlingConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 启用资源版本控制和缓存registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/").setCachePeriod(3600).resourceChain(true).addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));}@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {// 启用视图缓存registry.jsp("/WEB-INF/views/", ".jsp").cache(true);}
}

八、高级应用场景

1. 多主题支持
public class ThemeAwareViewResolver extends InternalResourceViewResolver {@Overrideprotected View loadView(String viewName, Locale locale) throws Exception {// 获取当前主题String theme = ThemeContextHolder.getCurrentTheme();// 构建主题化视图路径String themedViewName = "/themes/" + theme + viewName;return super.loadView(themedViewName, locale);}
}
2. 设备自适应视图
public class DeviceAwareViewResolver extends ContentNegotiatingViewResolver {@Overrideprotected View getBestView(List<View> candidateViews, List<MediaType> requestedMediaTypes,ServerWebExchange exchange) {// 检测设备类型Device device = DeviceUtils.getCurrentDevice();// 优先选择设备适配视图for (View view : candidateViews) {if (view.supportsDevice(device)) {return view;}}return super.getBestView(candidateViews, requestedMediaTypes, exchange);}
}
3. 动态视图选择
@Controller
public class DynamicViewController {@GetMapping("/content/{id}")public String getContent(@PathVariable String id, HttpServletRequest request) {// 根据业务逻辑动态选择视图ContentType type = contentService.getContentType(id);switch (type) {case ARTICLE:return "articleTemplate";case VIDEO:return "videoTemplate";case GALLERY:return "galleryTemplate";default:return "defaultTemplate";}}
}

九、设计思想总结

  1. 策略模式扩展
    多种视图解析策略满足不同技术栈需求

  2. 链式职责分配
    多个ViewResolver组成处理链,各司其职

  3. 内容协商智能
    根据客户端能力自动选择最佳视图呈现方式

  4. 缓存性能优化
    视图缓存和模板预编译大幅提升渲染性能

  5. 统一抽象架构
    为各种视图技术提供一致的编程模型


下一篇预告
九大组件源码剖析(八):RequestToViewNameTranslator - 视图名转换的奥秘
我们将深入分析默认视图名生成机制,揭秘如何从请求路径自动推导视图名称。


思考题:在前后端分离架构下,ViewResolver的角色发生了怎样的演变?如何设计一套同时支持服务器端渲染和客户端渲染的混合视图解析方案?

http://www.dtcms.com/a/542401.html

相关文章:

  • 国产MCU芯片在船舶压力传感器中的应用探索与实践
  • 关于网站建设的软文做球球棒棒糖网站源码
  • 网站开发教程pdf网络销售
  • 网站图片上传却不显示不出来亳州网站网站建设
  • 工商网站备案办法深圳 网站托管
  • 【元器件专题】电容核心知识-无极性电容(二)
  • progen2 docker镜像打包命令文档
  • 陇南市城乡建设局网站佛山网站建设 合优
  • 门户网站推广方案台州品牌设计公司
  • 临沧市住房和城乡建设局网站类模板模板下载网站有哪些
  • 网站备案幕布要求广西柳州网站建设
  • 广西住房与城乡建设部网站在线探测网站开发语言
  • 余姚市住房和城乡建设局网站网站优化推广哪家好
  • 稍微写了个屏保(GXDE 一言屏保)
  • 广州h5网站建设公司wordpress 100万数据
  • 【工具】llama factory默认的optimizer
  • (论文速读)HVI:一种用于弱光图像增强的新色彩空间
  • 随笔|富在术数,不在劳身
  • server2008做DNS与网站带论坛的网站模板下载地址
  • OpenObserve轻量化监控:10分钟部署全链路观测平台,资源占用降低70%!
  • 网站用图要怎么做怎么查有做网站的公司
  • 电子商务网站怎么备案网上购物网站建设的实训报告
  • RocketMQ 消费模式
  • 广东网站开发公司网店运营计划书
  • 网站备案注意网站分为
  • 菠菜网站如何做推广wordpress中常用插件安装包
  • HTML基础语法
  • 网站建设发布雅安移动网站建设
  • 王梓同亮相IMX国际音乐季,畅谈音乐创作理念
  • 企业网站管理百度网站打开