[按需印刷]Struts2技术内幕:深入解析Struts架构设计与实现原…|198891

[按需印刷]Struts2技术内幕:深入解析Struts架构设计与实现原…|198891 pdf epub mobi txt 电子书 下载 2025

陆舟 著
图书标签:
  • Struts2
  • Java
  • Web开发
  • 开源框架
  • 技术内幕
  • 架构设计
  • 源码分析
  • 按需印刷
  • 计算机图书
  • 编程技术
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 互动出版网图书专营店
出版社: 机械工业出版社
ISBN:9787111366966
商品编码:15542669076
出版时间:2012-01-01
页数:379

具体描述

>
 书[0名0]: Struts2技术内幕:深入解析Struts架构设计与实现原理[按需印刷]|198891
 图书定价: 69元
 图书作者: 陆舟
 出版社: 机械工业出版社
 出版日期: 2012/1/1 0:00:00
 ISBN号: 9787111366966
 开本: 16开
 页数: 379
 版次: 1-1
 作者简介
陆舟(downpour)资深Java技术专家,擅长企业级Java应用开发和Java Web应用开发,对Struts、Spring和Seam等开源Java框架有十分深入的研究,积累了丰富的经验。在Java和Web开发社区非常活跃,撰写了[0大0]量与JavaEE相关的技术文章,其著[0名0]的“忘记李刚,一步一步跟我[0学0]Struts2”系列技术文章广受好[0评0],在ITeye等技术社区留下了深远的影响。此外,他还是开源技术的积[0极0]倡导者和推动者,参与过Spring中文文档重要章节的翻译,为众多开源框架在[0国0]内的普及和发展做出了很[0大0]贡献。
 内容简介
《Struts2技术内幕:深入解析Struts架构设计与实现原理》由[0国0]内[0极0]为资深的Struts2技术专家(网[0名0]:downpour)亲自执笔,iteye兼CSDN产[0品0]总监范凯(网[0名0]:robbin)以及51CTO等技术社区鼎力推荐。
《Struts2技术内幕:深入解析Struts架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲[0学0],对从宏观上和微观上去了解Struts2的技术内幕提供了[0大0]量真[0知0]灼见。同样重要的是,本书还深入挖掘并分析了Struts2源代码实现中蕴含的[0大0]量值得称道的编程技巧和设计模式,这对开发者从Struts2的设计原理上去掌握和悟透Web层开发的要点和本质提供了的指导。
《Struts2技术内幕:深入解析Struts架构设计与实现原理》主要分为3[0大0]部分,内容安排具有[0极0]强的逻辑推理性,章和章之间互相呼应且互为印证。[0知0]识准备篇[0首0]先介绍了获取、阅读和调试Struts2源代码的方[0法0],以及Struts2源代码的组织形式;然后厘清了Web开发中[0极0]易混淆的一些重要概念,以及Struts2的核心技术、宏观视图、微观元素、配置元素等,提纲挈[0领0]地对Struts2进行了多角度的讲解。核心技术篇[0首0]先分析了Struts2中多种具有代表性的设计模式,然后对Struts2中的精华——OGNL表达式引擎和XWork框架的原理及机制进行了全面深入的分析和讲解。运行主线篇[0首0]先对Struts2的两[0大0]运行主线——初始化主线和HTTP请求处理主线进行了深入的剖析,然后对Struts2的扩展机制进行了解读和抽象。
 目录

《Struts2技术内幕:深入解析Struts架构设计与实现原理》
前 言
部分 [0知0]识准备篇
[0第0]1章 厉兵秣马—开发环境准备 / 3
1.1 准备源代码阅读环境 / 3
1.1.1 安装与配置JDK / 3
1.1.2 安装Eclipse与源码调试 / 5
1.1.3 安装与配置Web服务器 / 7
1.1.4 在Eclipse中使用Jetty搭建Web开发环境 / 8
1.2 获取Struts2 / 12
1.2.1 Struts2的相关资源下载 / 12
1.2.2 Struts2项目的目录组织结构 / 13
1.3 Struts2源码的初步研究 / 14
1.3.1 源码的组织形式 / 14
1.3.2 调试Struts2源码 / 15
1.4 小结 / 18
[0第0]2章 固本清源—Web开发浅谈 / 20
2.1 面向对象浅谈 / 20
2.1.1 对象构成模型 / 21
2.1.2 对象关系模型 / 25
2.1.3 面向对象编程的基本观点 / 28
2.2 框架的本质 / 30
2.3 佳实践 / 34
2.4 Web开发的基本模式 / 36
2.4.1 分层开发模式 / 36
2.4.2 MVC模式 / 38
2.5 表示层的困惑 / 40
2.6 如何[0学0]习开源框架 / 45
2.7 小结 / 49
[0第0]3章 提纲挈[0领0]—Struts2概览 / 50
3.1 Struts2的来世今生 / 50
3.2 Struts2面面观 / 51
3.2.1 Struts2的运行环境 / 52
3.2.2 Struts2的应用场景 / 53
3.2.3 Struts2的核心技术 / 54
3.3 多视角透析Struts2 / 56
3.3.1 透视镜 — Struts2的宏观视图 / 56
3.3.2 显微镜 — Struts2的微观元素 / 60
3.4 Struts2的配置元素 / 64
3.4.1 Struts2配置详解 / 65
3.4.2 Struts2配置元素定义 / 67
3.4.3 Struts2配置元素的分类 / 71
3.5 小结 / 72
[0第0]二部分 核心技术篇
[0第0]4章 源头活水—Struts2中的设计模式 / 75
4.1 ThreadLocal模式 / 75
4.1.1 线程安全问题的由来 / 75
4.1.2 ThreadLocal模式的实现机理 / 78
4.1.3 ThreadLocal模式的应用场景 / 81
4.1.4 ThreadLocal模式的核心元素 / 82
4.2 装饰(Decorator)模式 / 85
4.2.1 装饰模式的定义 / 85
4.2.2 装饰模式的构成要素 / 86
4.2.3 装饰模式的应用案例 / 87
4.3 策略(Strategry)模式 / 90
4.3.1 策略模式的定义 / 90
4.3.2 策略模式的应用场景 / 91
4.3.3 策略模式的深入思考 / 93
4.4 构造(Builder)模式 / 95
4.4.1 构造模式的核心要素 / 95
4.4.2 构造模式的应用场景 / 97
4.4.3 对象构造步骤 / 100
4.5 责任链(Chain Of Responsibility)模式 / 101
4.5.1 责任链模式的定义 / 101
4.5.2 责任链模式的逻辑意义 / 102
4.6 小结 / 103
[0第0]5章 生命之源—XWork中的容器 / 105
5.1 容器,对象生命周期管理的基石 / 105
5.1.1 对象的生命周期管理 / 105
5.1.2 容器(Container)的引入 / 106
5.1.3 容器(Container),不是容器(Collection) / 107
5.2 XWork容器概览 / 108
5.2.1 XWork容器的定义 / 108
5.2.2 XWork容器的管辖范围 / 111
5.2.3 XWork容器操作详解 / 113
5.3 深入浅出XWork容器 / 117
5.3.1 XWork容器的存储结构 / 117
5.3.2 XWork容器的实现机理 / 124
5.4 统一的容器操作接口—ObjectFactory / 129
5.5 小结 / 135
[0第0]6章 灵丹妙药—OGNL,数据流转的催化剂 / 136
6.1 架起数据沟通的桥梁 — 表达式引擎 / 136
6.1.1 数据流转的困境 / 136
6.1.2 数据访问的困境 / 138
6.1.3 表达式引擎 / 138
6.2 强[0大0]的OGNL / 140
6.2.1 深入OGNL的API / 140
6.2.2 OGNL三要素 / 142
6.2.3 OGNL的基本操作 / 143
6.2.4 深入this指针 / 146
6.2.5 有关#符号的三种用途 / 147
6.3 深入OGNL内部 / 147
6.3.1 深入OgnlContext / 147
6.3.2 深入OGNL的计算规则 / 150
6.3.3 深入OGNL的扩展方式 / 164
6.4 小结 / 173
[0第0]7章 别具匠心—XWork设计原理 / 175
7.1 请求-响应的哲[0学0] / 175
7.1.1 请求-响应的基本概念 / 175
7.1.2 请求-响应的实现模式 / 177
7.1.3 分歧和职责 / 181
7.2 数据流和控制流 / 184
7.2.1 再谈MVC / 184
7.2.2 数据载体的战争 / 186
7.2.3 控制流的细节 / 191
7.3 XWork概览 / 193
7.3.1 XWork的宏观视图 / 193
7.3.2 XWork的微观视图 / 195
7.4 小结 / 199
[0第0]8章 庖丁解牛—XWork元素详解 / 200
8.1 深入XWork宏观视图 / 200
8.1.1 数据流体系 / 200
8.1.2 控制流体系 / 203
8.2 数据流体系 — 相互依存 / 205
8.2.1 ActionContext — 一个平行世界 / 205
8.2.2 ValueStack — 对OGNL的扩展 / 216
8.2.3 深入ValueStack的实现 / 225
8.2.4 形影不离、相互依存的Actioncontext与ValueStack / 231
8.3 控制流体系 — 有条不紊 / 233
8.3.1 Action — 革命性突破 / 233
8.3.2 Interceptor—腾飞的翅膀 / 238
8.3.3 ActionInvocation—核心调度 / 247
8.3.4 ActionProxy—执行窗口 / 254
8.4 交互体系—水乳交融 / 258
8.4.1 数据环境的生命周期 / 259
8.4.2 三军[0会0]师之地 / 260
8.4.3 Action交互体系 / 261
8.5 小结 / 268
[0第0]三部分 运行主线篇
[0第0]9章 包罗万象—Struts2初始化主线 / 273
9.1 配置元素与初始化主线 / 273
9.1.1 从入口程序开始 / 273
9.1.2 初始化主线的核心驱动力 / 276
9.1.3 初始化主线的构成元素 / 277
9.2 核心分发器 — Dispatcher / 278
9.2.1 核心分发器的核心驱动作用 / 278
9.2.2 核心分发器的数据结构 / 280
9.3 配置元素的加载器(Provider) / 282
9.3.1 配置元素加载器的作用 / 282
9.3.2 容器加载器—ContainerProvider / 283
9.3.3 事件映射加载器—PackageProvider / 285
9.4 配置元素的构造器(Builder) / 288
9.4.1 容器构造器—ContainerBuilder / 289
9.4.2 事件映射构造器 — PackageConfig.Builder / 290
9.5 配置元素的管理类 / 295
9.5.1 配置管理元素 — Configuration / 296
9.5.2 配置操作接口 — ConfigurationManager / 299
9.6 Struts2初始化主线详解 / 300
9.6.1 核心分发器的初始化 / 301
9.6.2 容器的初始化 / 306
9.7 小结 / 313
[0第0]10章 井然有序—与Http请求的战斗 / 314
10.1 制定作战计划 / 314
10.1.1 战斗资源 / 314
10.1.2 战斗进程 / 315
10.2 战场—Http请求的预处理阶段 / 317
10.2.1 三探入口程序 / 317
10.2.2 Http请求预处理类—PrepareOperations / 320
10.2.3 Http请求的执行类—ExecuteOperations / 326
10.3 [0第0]二战场 — XWork处理阶段 / 330
10.3.1 执行控制[0权0]的移交 / 330
10.3.2 ActionInvocation调度的再分析 / 334
10.4 小结 / 338
[0第0]11章 展翅高飞 — 让视图放开手脚 / 339
11.1 视图(View)概述 / 339
11.1.1 视图表现技术 / 339
11.1.2 视图的本质 / 343
11.1.3 视图的职责 / 344
11.2 深入Result机制 / 345
11.2.1 Result的不同视角 / 345
11.2.2 Result职责分析 / 348
11.3 标签库,永恒的争论话题 / 349
11.3.1 标签库产生的初衷 / 350
11.3.2 标签库,毒药还是解药 / 350
11.3.3 标签库的发展趋势 / 352
11.3.4 标签的分类 / 353
11.4 数据访问的哲[0学0] / 354
11.4.1 不要问我从哪里来 / 354
11.4.2 不要问我长什么样 / 358
11.5 小结 / 359
[0第0]12章 三头六臂—Struts2的扩展机制 / 360
12.1 程序扩展机制的深入思考 / 360
12.1.1 插件模式的基本概念 / 360
12.1.2 常见的插件模式 / 362
12.1.3 插件模式的利弊分析 / 364
12.2 Struts2的插件模式 / 366
12.2.1 深入Struts2插件 / 366
12.2.2 Struts2插件分类 / 369
12.2.3 Struts2的插件加载机制 / 372
12.3 小结 / 379
后记 / 380

深入探索Java Web开发基石:从Servlet到Spring MVC的演进之路 在日新月异的互联网技术浪潮中,Java Web开发始终占据着举足轻重的地位。从最初的Servlet API,到MVC(Model-View-Controller)设计模式的广泛应用,再到如今百花齐放的各种框架,Java Web技术的演进史,是一部不断追求效率、可维护性和可扩展性的奋斗史。本书并非简单罗列某个特定框架的API用法,而是旨在带领读者深入理解Java Web开发的核心理念,剖析主流框架背后的设计思想,帮助开发者构建更健壮、更优雅的Web应用。 第一章:Java Web开发的基石——Servlet API的奥秘 任何Java Web应用都离不开Servlet。本章将从最底层的Servlet API入手,详细讲解其工作原理。我们将深入理解`Servlet`接口的生命周期(`init()`, `service()`, `destroy()`),解析`HttpServletRequest`和`HttpServletResponse`对象如何封装客户端请求和服务器响应,掌握`ServletContext`在Web应用中的作用,以及`ServletConfig`如何为Servlet提供初始化参数。通过对Servlet API的透彻理解,读者将为后续学习更高级的框架打下坚实的基础。我们将通过具体代码示例,演示如何编写一个简单的Servlet,以及如何处理GET和POST请求,并初步接触到请求转发(forward)和请求包含(include)的概念。此外,本章还将简要介绍Servlet的部署描述符`web.xml`的关键配置项,以及`Filter`和`Listener`在请求处理链中的作用,为后续理解更复杂的拦截和事件机制埋下伏笔。 第二章:MVC设计模式的优雅——构建清晰分明的Web架构 Model-View-Controller(MVC)是现代Web应用开发的黄金标准。本章将深入剖析MVC设计模式的内涵,探讨其如何将应用程序的数据、用户界面和逻辑处理分离,从而提高代码的可读性、可维护性和可重用性。我们将详细讲解Model(模型)在数据管理和业务逻辑中的角色,View(视图)如何负责用户界面的展示,以及Controller(控制器)如何充当模型和视图之间的桥梁,处理用户输入并协调数据更新。我们会通过图示和伪代码,清晰地展示MVC模式的协作流程,并探讨不同MVC实现方式的优劣,例如单向数据流与双向数据绑定。本章还将涉及如何将MVC模式应用到实际的Java Web项目中,并引入一些常见的MVC实践,如数据验证、错误处理和页面导航策略,帮助读者构建出结构清晰、易于扩展的Web应用程序。 第三章:从Servlet到框架——Java Web框架的兴起与演进 Java Web框架的出现极大地简化了Web应用的开发流程,提高了开发效率。本章将回顾Java Web框架的发展历程,从早期的Servlet API的局限性出发,介绍Struts、Spring MVC等经典框架的诞生背景和核心设计理念。我们将重点分析Struts框架如何通过Action、ActionForm、ActionForward等组件,有效地封装了Servlet API的复杂性,并提供一种声明式的配置方式来管理请求处理流程。接着,我们将探讨Spring MVC框架的出现,它如何进一步引入了IoC(Inversion of Control)和DI(Dependency Injection)等Spring核心概念,实现了更灵活、更解耦的组件管理,以及其强大的数据绑定、类型转换和异常处理能力。本章将对比不同框架的设计哲学,分析它们在性能、易用性、功能丰富度等方面的差异,帮助读者理解选择合适框架的重要性。 第四章:Spring MVC的深度解析——现代Java Web开发的核心引擎 Spring MVC作为当前Java Web开发的主流框架,其强大之处不言而喻。本章将对Spring MVC进行深度解析。我们将从`DispatcherServlet`(前端控制器)的工作流程入手,详细讲解请求如何被Spring MVC层层处理,包括`HandlerMapping`(处理器映射)、`HandlerAdapter`(处理器适配器)、`ViewResolver`(视图解析器)等关键组件的作用。我们将深入理解Spring MVC的数据绑定机制,如何将HTTP请求参数自动映射到Java对象,以及其丰富的数据验证和类型转换功能。此外,本章还将探讨Spring MVC的异常处理机制,如何通过`HandlerExceptionResolver`统一处理各种运行时异常,以及如何利用拦截器(`Interceptor`)实现诸如登录认证、权限控制、日志记录等横切关注点。通过丰富的代码示例和配置说明,本章旨在帮助读者掌握Spring MVC的方方面面,能够独立构建复杂且健壮的Web应用。 第五章:RESTful Web Services的实践——构建现代化的API接口 随着移动互联网和前后端分离架构的普及,RESTful API已成为构建Web服务的标准。本章将深入讲解RESTful设计原则,包括资源的 URI 表示、HTTP 方法的使用(GET, POST, PUT, DELETE)、无状态性、以及使用标准的状态码进行通信。我们将重点介绍如何在Spring MVC框架中高效地实现RESTful Web Services,包括使用`@RestController`注解、`@RequestMapping`的HTTP方法映射、`@PathVariable`和`@RequestParam`参数绑定,以及如何利用Jackson等库进行JSON数据的序列化和反序列化。本章还将涵盖API的版本控制、请求与响应的格式统一、以及使用Postman等工具进行API测试的实践。通过本章的学习,读者将能够设计和实现符合行业标准的、可维护的RESTful API。 第六章:数据访问层与持久化——与数据库高效交互的艺术 Web应用离不开与数据库的交互。本章将聚焦于Java Web应用中的数据访问层,重点讲解如何与关系型数据库进行高效、安全的交互。我们将深入理解JDBC API的使用,并在此基础上介绍MyBatis等持久化框架。我们将详细讲解MyBatis的XML映射和注解方式,如何编写Mapper接口和SQL语句,以及MyBatis的缓存机制和延迟加载策略。此外,本章还将介绍ORM(Object-Relational Mapping)框架如Hibernate(及其在Spring中的集成,如JPA)的原理和使用,探讨其如何简化数据库操作,并分析不同持久化技术在性能和开发效率上的权衡。我们将通过实际案例,演示如何设计数据访问层,实现CRUD(Create, Read, Update, Delete)操作,以及如何处理事务和并发控制,确保数据的完整性和一致性。 第七章:安全性与健壮性——打造无懈可击的Web应用 Web应用的安全性至关重要。本章将从多个维度探讨Web应用的安全性问题,并介绍相应的防护措施。我们将深入理解常见的Web安全威胁,如SQL注入、XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等,并讲解如何在Java Web应用中有效地防御这些攻击。我们将重点介绍Spring Security框架,它如何提供强大的认证(Authentication)和授权(Authorization)功能,实现基于角色的访问控制,以及如何集成OAuth2等现代认证协议。此外,本章还将关注Web应用的健壮性,包括输入验证、异常处理、日志记录、以及如何进行性能优化和资源管理,确保应用在各种负载和异常情况下都能稳定运行。 第八章:部署与运维——将Web应用推向生产环境 开发完成的Web应用最终需要部署到生产环境,并进行日常运维。本章将讲解Web应用的部署流程,包括选择和配置Web服务器(如Tomcat, Jetty),打包部署(WAR/JAR文件),以及容器化部署(Docker)的初步介绍。我们将探讨如何进行性能监控和故障排查,包括分析日志文件、使用性能分析工具,以及理解JVM调优的基本概念。此外,本章还将涉及CI/CD(持续集成/持续部署)的流程,以及如何通过自动化构建和部署,提高开发效率和应用交付速度。本章旨在帮助读者理解从开发到生产的整个生命周期,为项目的成功上线和持续运行提供指导。 通过对以上各个章节内容的深入学习和实践,读者将能够建立起对Java Web开发深厚而全面的理解,掌握构建现代、高性能、安全的Web应用程序所需的关键技术和设计理念,从而在职业生涯中更上一层楼。

用户评价

评分

我喜欢这本书的实践导向。虽然它深入解析了技术背后的原理,但并没有因此而脱离实际应用。相反,我觉得它恰恰是理论与实践结合得最好的那种。在讲解完某个核心概念后,作者往往会立刻给出相关的代码示例,甚至是一些小型的项目案例,让我们能够亲手去验证和实践。我翻到某个章节,作者介绍了一个非常实用的设计模式,然后紧接着就展示了如何在实际项目中应用它,并且给出了完整的代码片段,这让我印象深刻。通过这些实践性的内容,我不仅仅理解了理论,更学会了如何在实际开发中运用这些知识。这种“学以致用”的感觉,是学习技术最令人满足的方面之一,而这本书恰恰能给我带来这样的体验,让我觉得学到的东西是有价值的,能够直接应用到我的工作中去。

评分

这本书的插图和图表做得非常出色,这绝对是它的一大亮点。我一直觉得,对于复杂的技术概念,如果能配上清晰、直观的图示,理解起来会事半功倍。这本书在这方面做得非常到位,无论是类图、流程图,还是数据流图,都设计得非常精美,而且逻辑性很强,能够准确地传达作者想要表达的信息。我尤其喜欢那些能够展示组件之间交互关系的图,它们帮助我快速地勾勒出整个框架的骨架,理解不同部分是如何协同工作的。而且,图中的标注也很清晰,不会让人产生歧义。有时候,我看一段文字觉得有些晦涩,但只要看看旁边的图,立刻就豁然开朗了。这种图文并茂的设计,极大地降低了阅读门槛,让一些原本可能望而却步的概念变得触手可及。

评分

这本书给我的感觉是,作者在编写的过程中,真的站在了初学者的角度去思考。我知道,很多技术书籍,尤其是深入讲解某个框架的书,很容易写得过于高深,让没有经验的读者一头雾水。但这本书不同,它会从最基础的概念讲起,循序渐进,一点点地引导你进入核心。我翻到后面一些比较复杂的章节,发现即使是涉及到一些比较底层的实现细节,作者也会用非常通俗易懂的语言来解释,并且会给出很多代码示例,让我能够跟着代码一起去理解。而且,我注意到,书中很多地方都会提到一些“陷阱”或者“误区”,提醒读者注意,这对我来说非常宝贵,避免了我走很多弯路。感觉就像是有一位经验丰富的老师在手把手地教你一样,让人充满信心。

评分

我一直对软件架构方面的东西很感兴趣,尤其是一些经典框架的设计思路,总觉得里面蕴含着很多宝贵的经验。这本书给我的第一印象就是,它不像市面上很多技术书籍那样,只是简单地罗列API的使用方法,而是更侧重于“为什么”要这么设计,以及“如何”实现。我喜欢这种深入探究事物本质的精神。我翻到某个章节,作者在讲解一个组件的设计原理时,会追溯到它诞生的初衷,分析当时面临的挑战,然后解释为什么选择了这样的实现方式,这对我理解框架的演进非常有帮助。而且,书中还会穿插一些作者个人的思考和见解,甚至会引用一些业界大牛的观点,这种多元化的视角,让整个阅读过程更加丰富和有启发性。我感觉自己不仅仅是在学习一个技术框架,更是在学习一种解决问题的思路,一种对复杂系统进行拆解和优化的能力。

评分

这本书的封面设计挺有意思的,那种深邃的蓝色调,搭配上抽象的线条,很容易让人联想到复杂的系统和精妙的设计。拿到手里的时候,纸张的质感也出乎意料地好,那种哑光的触感,不是市面上很多廉价书籍的亮面纸,感觉很扎实,翻阅起来也不会觉得刺眼。我刚开始翻了几页,就被里面的排版吸引住了,字体大小适中,行间距也恰到好处,阅读起来非常舒适,不会有那种密密麻麻压迫感。而且,章节的划分也很清晰,标题的设计也很有引导性,让人一眼就能大致了解每个部分讲的是什么内容。我特别欣赏那种在讲解一些核心概念时,会用粗体字或者不同的颜色来突出重点,这种细节上的处理,确实能提升阅读的效率。我还在目录部分停留了很久,看到那些细致入微的章节标题,就觉得作者在内容组织上花了很多心思,不是简单地堆砌知识点,而是有逻辑地层层递进,引导读者一步步深入理解。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有