静态页面 和 动态页面(Java Web开发)

server/2024/12/4 18:03:08/

1. 静态页面

1.1 什么是静态页面?

  • 静态页面是指 HTML 文件直接存放在服务器上,不依赖后端逻辑处理而生成内容
  • 客户端浏览器请求静态页面时,服务器直接将文件发送到客户端,浏览器负责渲染页面。

特点:

  • 固定内容:页面内容不随用户或请求动态改变。
  • 无需后端处理:页面资源直接通过文件路径加载,Spring Boot 不需要进行映射。
  • 快速响应:由于不需要后端参与逻辑处理,响应速度更快。
  • 适用于简单页面:如关于页面、公司简介、帮助文档等。

1.2 Spring Boot 中的静态页面处理

默认静态资源目录

Spring Boot 默认会从以下目录加载静态资源:

  • src/main/resources/static

  • src/main/resources/public

这些目录中的文件可以直接通过浏览器访问。

目录示例

src/main/resources/static
├── index.html
├── about.html
├── css/
│   └── styles.css
├── js/
│   └── scripts.js
└── images/└── logo.png

访问方式

浏览器访问 URL 时,URL 路径直接映射到 static 目录中的文件。

如果 about.html 位于 static 目录中,则可以通过以下方式访问:

http://localhost:8080/about.html

静态 HTML 示例

文件路径:src/main/resources/static/about.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>About Us</title><!-- 引入 CSS 文件 --><link rel="stylesheet" href="/css/styles.css">
</head>
<body><h1>Welcome to Our Company</h1><p>This is the about page.</p><!-- 引入 JS 文件 --><script src="/js/scripts.js"></script>
</body>
</html>

1.3 静态页面中的 CSS 和 JS 文件

CSS 引用

  • CSS 文件可以存放在 static/css 目录中。
  • 通过 <link> 标签引用:
    <link rel="stylesheet" href="/css/styles.css">
    

JavaScript 引用

  • JS 文件可以存放在 static/js 目录中。
  • 通过 <script> 标签引用:
    <script src="/js/scripts.js"></script>
    

2. 动态页面

2.1 什么是动态页面?

  • 动态页面是由 后端逻辑根据用户请求动态生成的 HTML 页面
  • 页面内容可以根据用户、时间、系统状态等进行动态变化。

特点:

  • 内容动态生成:后端根据业务逻辑提供数据,结合模板生成 HTML。
  • 需要后端参与:通过 Controller 接收请求,调用业务逻辑,返回生成的页面。
  • 依赖模板引擎:如 Thymeleaf、FreeMarker 等,用于将数据填充到 HTML 模板中。
  • 适用于复杂业务场景:如用户个人主页、购物车页面、动态报表等。

2.2 Spring Boot 中的动态页面处理

默认模板目录

Spring Boot 默认将模板文件存放在 src/main/resources/templates 目录中。

目录示例

src/main/resources/templates
├── index.html
├── user/
│   └── profile.html

Controller 映射逻辑

动态页面通过 Spring MVC 的 Controller 处理请求,并返回模板名称。

Controller 示例代码:

java">@Controller
public class PageController {// 主页映射@GetMapping("/")public String homePage(Model model) {model.addAttribute("title", "Welcome to My Website");return "index"; // 渲染 templates/index.html}// 用户信息页映射@GetMapping("/user/profile")public String userProfile(Model model) {model.addAttribute("username", "John Doe");model.addAttribute("email", "john.doe@example.com");return "user/profile"; // 渲染 templates/user/profile.html}
}

动态模板文件示例

模板文件:src/main/resources/templates/index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title th:text="${title}">Default Title</title>
</head>
<body><h1 th:text="${title}">Welcome Page</h1><p>This is the homepage.</p>
</body>
</html>

模板文件:src/main/resources/templates/user/profile.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>User Profile</title>
</head>
<body><h1>User Profile</h1><p>Username: <span th:text="${username}"></span></p><p>Email: <span th:text="${email}"></span></p>
</body>
</html>

访问流程

  1. 用户访问 http://localhost:8080/,请求被映射到 PageController 的 homePage() 方法。

  2. 方法返回模板名称 index

  3. Spring 使用模板引擎渲染 index.html,将数据填充到页面中。

  4. 最终生成的 HTML 页面发送到浏览器。


2.3 动态页面中的 CSS 和 JS 文件

Thymeleaf 的动态路径解析

  • th:href:用于动态解析 CSS 文件路径。
  • th:src:用于动态解析 JS 文件路径。
  • 这些路径可以根据项目上下文或环境动态调整。

示例:动态加载静态资源

<link rel="stylesheet" th:href="@{/css/styles.css}">
<script th:src="@{/js/scripts.js}"></script>

3. 静态页面与动态页面的对比

特性静态页面动态页面
存放位置src/main/resources/static 或 publicsrc/main/resources/templates
访问方式URL 直接指向文件名(如 /about.html)。URL 映射到 Controller 方法,由模板引擎生成 HTML。
内容是否固定内容固定,所有用户访问到的页面相同。内容动态生成,根据请求、用户或业务逻辑返回不同的页面。
是否依赖后端不依赖,直接返回文件。必须依赖后端逻辑,结合模板引擎生成页面。
CSS/JS 引用通过标准 HTML 标签(<link> 和 <script>)引用。使用 Thymeleaf 的 th:href 和 th:src 动态解析路径,适配环境和上下文路径。
典型用途- 静态资源(CSS/JS 文件)。
- 公共页面(如帮助文档)。
- 用户个性化页面(如个人中心)。
- 动态报表、购物车页面等。

http://www.ppmy.cn/server/147339.html

相关文章

Lumos学习王佩丰Excel第十七讲:数学函数

一、认识函数 1、Round函数 Roundup函数 Rounddown函数 Int函数 Round函数&#xff1a;将数字四舍五入到给定的位数。当末位有效数字为 5 或大于 5 时&#xff0c;ROUND 向上舍入&#xff1b;当末位有效数字小于 5 时则向下舍入。ROUND(number, num_digits)&#xff0c;其中“…

python基础(六)

进程和线程 进程 进程就是操作系统中执行的一个程序&#xff0c;操作系统以进程为单位分配存储空间&#xff0c;每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据&#xff0c;操作系统管理所有进程的执行&#xff0c;为它们合理的分配资源。创新的进程…

【系统架构设计师论文】微服务架构设计与实践

一、微服务架构概述 1.1 什么是微服务架构? 微服务架构(Microservices Architecture)是一种将应用程序拆分为多个小型服务的架构模式,每个服务都可以独立开发、部署、扩展,并通过轻量级的通信协议(通常是 HTTP/REST 或 gRPC)进行交互。这种架构的核心思想是将大型单体…

VScode离线下载扩展安装

在使用VScode下在扩展插件时&#xff0c;返现VScode搜索不到插件&#xff0c;网上搜了好多方法&#xff0c;都不是常规操作&#xff0c;解决起来十分麻烦&#xff0c;可以利用离线下载安装的方式安装插件&#xff01;亲测有效&#xff01;&#xff01;&#xff01; 1.找到VScod…

2024.12.2工作复盘

1.今天学了什么&#xff1f; 简单的写了一篇博客&#xff0c;是关于参数校验的问题&#xff0c;参数校验&#xff0c;一个是前后端校验到底一不一致&#xff0c;一个是绕过前端校验&#xff0c;看后台的逻辑到底能不能校验住。 2.今天解决了什么问题&#xff1f; 3.今天完成…

Yagmail邮件发送库:如何用Python实现自动化邮件营销?

目录 一、Yagmail简介 二、安装Yagmail 三、基本使用示例 1. 发送简单文本邮件 2. 发送HTML邮件 3. 发送带有附件的邮件 4. 多收件人处理 5. 自定义邮件头 四、高级功能 1. SMTP配置 2. 邮件模板 3. OAuth2认证 五、自动化邮件营销案例 六、错误处理和调试 七、…

unity读取mysql5.7版本示例

使用了miniexcel插件&#xff0c;与mydata.dll 。 using MiniExcelLibs; using MySql.Data.MySqlClient; using System.Collections.Generic; using System.Data; using System.Text; using UnityEngine;public class LoadMySQL_虚拟仿真 : DataLayerBase<Dictionary<st…

【C语言】结构体(四)

本篇重点是typedef关键字 一&#xff0c;是什么&#xff1f; typedef用来定义新的数据类型&#xff0c;通常typedef与结构体的定义配合使用。 简单来说就是取别名 ▶ struct 是用来定义新的数据类型——结构体 ▶ typedef是给数据类型取别名。 二&#xff0c;为什么&#xf…