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

45、web实验-抽取公共页面

45、web实验-抽取公共页面

在Web开发中,为了提高代码复用性和维护效率,通常会将页面中重复的部分抽取出来,形成公共页面或组件。以下是关于“抽取公共页面”的讲解:

#### 抽取公共页面的原因

- **减少代码重复**:避免在不同页面中重复编写相同的代码。

- **提高维护效率**:修改公共部分后,所有引用该部分的页面都会自动更新。

- **增强代码可读性**:使页面结构更加清晰,便于开发和维护。

#### 抽取公共页面的步骤(以Thymeleaf模板引擎为例)

1. **创建公共页面**

    - 将重复的代码片段(如头部导航、侧边栏、底部等)提取出来,存放在一个独立的HTML文件中,例如`common.html`。

    - 使用`th:fragment`属性为每个公共片段命名,方便后续引用。

   ```html

   <!-- common.html -->

   <div th:fragment="header">

       <!-- 头部导航代码 -->

   </div>

   <div th:fragment="sidebar">

       <!-- 侧边栏代码 -->

   </div>

   <div th:fragment="footer">

       <!-- 底部代码 -->

   </div>

   ```

2. **引用公共页面**

    - 在其他需要使用公共片段的页面中,通过`th:insert`、`th:replace`或`th:include`属性引入公共片段。

   ```html

   <!-- index.html -->

   <html lang="en" xmlns:th="http://www.thymeleaf.org">

   <head>

       <!-- 引入公共的头部代码 -->

       <div th:replace="common :: header"></div>

   </head>

   <body>

       <!-- 引入公共的侧边栏代码 -->

       <div th:replace="common :: sidebar"></div>

       <!-- 页面主要内容 -->

       <!-- 引入公共的底部代码 -->

       <div th:replace="common :: footer"></div>

   </body>

   </html>

   ```

#### 不同引入方式的区别

- **`th:insert`**:将公共片段的内容插入到指定标签内部,保留原标签。

- **`th:replace`**:用公共片段的内容替换指定标签及其内容。

- **`th:include`**:将公共片段的内容插入到指定标签内部,但不保留公共片段的根标签。

#### 示例说明

假设有一个网站,所有页面都有相同的头部导航和底部版权信息。可以将这些公共部分抽取到`common.html`中,然后在每个页面中引用。

- **`common.html`**

  ```html

  <div th:fragment="header">

      <!-- 头部导航代码 -->

  </div>

  <div th:fragment="footer">

      <!-- 底部版权信息 -->

  </div>

  ```

- **`index.html`**

  ```html

  <html lang="en" xmlns:th="http://www.thymeleaf.org">

  <head>

      <title>首页</title>

      <div th:replace="common :: header"></div>

  </head>

  <body>

      <!-- 页面主要内容 -->

      <h1>欢迎访问首页</h1>

      <div th:replace="common :: footer"></div>

  </body>

  </html>

  ```

通过抽取公共页面,可以简化代码,提高开发效率,并确保网站风格的一致性。

http://www.xdnf.cn/news/12198.html

相关文章:

  • 小程序引入deepseek
  • Web-图片上传出现的错误
  • 视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线
  • 【HTML】HTML 与 CSS 基础教程
  • Profinet转CAN网关借助特定配置软件完成子站配置任务
  • Spring 框架之IOC容器加载重要组件
  • label-studio的使用教程(导入本地路径)
  • CppCon 2015 学习:Comparison is not simple, but it can be simpler.
  • SQL进阶之旅 Day 16:特定数据库引擎高级特性
  • Maven的生命周期
  • 【QT】显示类控件
  • 2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题
  • 华硕电脑,全新的超频方式,无需进入BIOS
  • PostgreSQL 技术峰会,为您打造深度交流优质平台
  • 神经网络-Day45
  • 第二十四章 流程控制_ if分支
  • day38 6月5号
  • Tensorrt python api 10.11.0笔记
  • 【新品解读】一板多能,AXRF49 定义新一代 RFSoC FPGA 开发平台
  • Devops系列---python基础篇二
  • 提示词指南 --- 提示词的基本结构
  • 51单片机基础部分——独立按键检测
  • 从零发布一个 Vue 3 Button 组件到 npm(基于 Vite)
  • 【推荐算法】WideDeep推荐模型:融合记忆与泛化的智能推荐引擎
  • Oracle杀进程注意事项
  • 力扣100题之128. 最长连续序列
  • 探秘 MyBatis:开启你的数据库操作「智能之旅」
  • 基于Qt的app开发第十三天
  • 【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
  • 服务器中CC攻击的特点有哪些?