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

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

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 示例代码:

@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.kler.cn/a/416847.html

相关文章:

  • Hexo博客在多个设备同步
  • 手搓一个不用中间件的分表策略
  • LLAVA论文简记
  • Flume 与 Kafka 整合实战
  • JAVA项目-------医院挂号系统
  • Django 路由层
  • 【Linux网络编程】第三弹---UDP网络通信深度解析:构建服务器端、客户端,并实现两端通信的完整步骤与测试
  • 【传感器技术】第6章 压电式传感器
  • [python脚本处理文件入门]-18.使用Python进行PDF文件的合并与拆分
  • 浅谈volatile
  • Mybatis:CRUD数据操作之修改数据update
  • 【QT/MinGW/.a->.lib】如何将一个用QT的MingGW编译dll项目出的dll文件导出一份.lib文件给其他项目链接动态库用
  • docker启动容器,语句名词解释
  • day21:jumpserver配置与搭建
  • 【bug】AttributeError: module ‘openai‘ has no attribute ‘error’
  • 第6章 元素应用CSS
  • 信息与网络安全笔记2
  • 常见靶场的搭建
  • 去中心化物理基础设施网络(DePIN):重塑未来的基石
  • 分析 系统滴答时钟(tickClock),设置72MHz系统周期,如何实现1毫秒的系统时间?
  • SpringBoot源码-spring boot启动入口ruan方法主线分析(二)
  • 如何解决 javax.xml.bind.MarshalException: 在 RMI 中,参数或返回值无法被编组的问题?亲测有效的解决方法!
  • spark读取hbase数据
  • XTuner 微调实践微调
  • java——Netty与Tomcat的区别
  • Android习题第7章广播