本文还有配套的精品资源,点击获取
简介:本书详尽介绍了MyEclipse集成开发环境的基础知识以及其在Java Web应用开发中的高效应用。内容覆盖从MyEclipse界面工作流程、Java Web项目开发设置、Java语言编程实践到Web开发中的Servlet、JSP、JSTL技术及MVC设计模式。还包括数据库操作与ORM框架如Hibernate的集成使用,企业级技术EJB和JMS的介绍,以及项目实践案例。本教程是Java Web开发初学者和进阶者的必备指南,让读者从基础到高级技术全面掌握MyEclipse的使用,提高开发效率与项目质量。
1. MyEclipse界面与工作流程
1.1 MyEclipse的界面布局
MyEclipse的界面设计遵循了Eclipse的标准布局,包含了工作台(Workbench)、透视图(Perspective)、编辑器(Editor)和视图(View)等元素。用户可通过点击菜单栏的“Window”选项,选择“Open Perspective”来切换不同的工作界面,比如Java、Debug、Database等。
1.2 工作流程概览
在MyEclipse中开发Java Web项目,一般工作流程包括新建项目、编写代码、调试程序、测试应用以及打包部署。新建项目时,选择合适的项目类型,比如动态Web项目(Dynamic Web Project),并根据向导完成项目的初始配置。
1.3 开发环境快速启动
首先,启动MyEclipse后,需要创建一个动态Web项目。然后,可以使用MyEclipse提供的快捷键(例如Ctrl+N)来快速生成常用的类、接口或框架配置文件。此外,还可以通过项目右键菜单中的“Run As”选项来快速启动Tomcat服务器,并部署项目。
代码块示例
以下是一个简单的HelloWorld Servlet示例代码块,并附上相应的解释说明:
本章首先介绍了MyEclipse的基本界面布局,接着概括了日常开发工作的流程,并简述了如何快速启动和配置开发环境。通过实践示例,展示了如何创建一个基础的Web应用。这为后续章节中深入探讨Java Web项目开发打下了基础。
2. Java Web项目开发设置
2.1 项目结构与配置
2.1.1 项目的目录结构分析
Java Web项目通常遵循一定的目录结构标准,这样的标准有利于项目的管理以及团队成员间的协作。一个典型的Java Web项目的目录结构如下:
- :存放源代码文件,即Java代码。
- :存放项目中需要使用的资源文件,例如属性文件( )或XML配置文件。
- :存放Web资源文件,包括JSP、HTML、CSS、JavaScript文件以及图片等静态资源。
- :存放配置文件、页面模板、类文件等不直接对用户可见的资源。 文件位于此目录下,负责Web应用的配置。
- :存放应用所需的库文件(jar包)。
- :存放静态资源,如JavaScript、CSS和图片文件等。
- :存放模板文件,如果是使用模板引擎如JSP、Freemarker等,则相关模板文件存放在此处。
上述目录结构是构建Java Web项目的基础,理解并遵循这一结构能够帮助开发者更好地组织代码和资源,使得项目具有良好的可维护性和可扩展性。
2.1.2 Web项目的构建与部署
构建与部署Web项目涉及的步骤包括:
- 清理项目 :删除之前构建过程中产生的旧的构建文件。
- 编译源代码 :将项目中的Java源代码编译成.class文件,并将这些.class文件放在WEB-INF/classes目录下。
- 打包 :将编译后的.class文件和项目的其他资源文件打包成WAR(Web Application Archive)文件。
- 部署 :将WAR文件部署到Web服务器上,如Apache Tomcat。
在MyEclipse或Eclipse等集成开发环境中,开发者可以使用内置的构建和部署工具来自动化这一过程。例如,在MyEclipse中,可以通过以下步骤实现自动化部署:
- 在项目上右键,选择“Run As” -> “Run on Server”。
- 在打开的对话框中,选择合适的服务器实例,通常是一个已经配置好的Tomcat服务器。
- 点击“Finish”,MyEclipse会自动将项目部署到指定服务器,并启动服务器。
这种集成方式大大简化了Web项目的部署过程,使得开发者能够将更多的精力集中在业务逻辑的开发上。部署之后,可以通过在浏览器中输入服务器地址和项目的上下文路径来访问项目。
2.2 开发环境的搭建
2.2.1 JDK与Tomcat服务器的配置
Java开发环境的搭建首先需要安装Java Development Kit(JDK)。JDK包含编译Java代码所需的工具,如 ,以及运行Java程序所需的运行时环境,即Java Runtime Environment(JRE)。安装JDK后,需要配置环境变量,如 ,以及将JDK的 目录添加到系统的PATH环境变量中。
Apache Tomcat是一个开源的Servlet容器,用于运行Java Servlet和JavaServer Pages(JSP)。安装Tomcat后,需要进行以下配置:
- 配置环境变量 :确保Tomcat的 目录在PATH环境变量中,便于在命令行中启动Tomcat服务。
- 启动Tomcat服务器 :通过执行Tomcat目录下的 (在Linux或Mac系统上)或 (在Windows系统上)脚本来启动Tomcat服务器。
- 验证安装 :通过访问 检查Tomcat是否成功启动。
在MyEclipse中,Tomcat服务器也可以通过图形界面进行配置和管理。开发者可以创建一个服务器实例,并将Tomcat作为运行环境添加到项目中,这样就可以在MyEclipse中直接运行和调试Web应用了。
2.2.2 构建路径和运行时环境的设置
在MyEclipse中配置构建路径和运行时环境涉及到以下几个步骤:
- 配置构建路径 :在项目的“Properties” -> “Java Build Path”中设置源代码目录( )、资源文件目录( )以及输出目录(通常是 )。
- 添加外部库依赖 :如果项目中使用了第三方库,如数据库驱动、日志框架等,需要在“Properties” -> “Java Build Path” -> “Libraries”中添加相应的JAR文件。
- 配置运行时环境 :在“Properties” -> “MyEclipse” -> “Application Server”中添加并配置Tomcat服务器,指定项目的部署信息和服务器的本地路径。
此外,可以使用Maven或Gradle这样的构建工具来管理项目依赖和构建过程,这样可以在项目中声明所依赖的库,构建工具会自动下载并管理这些库文件。
2.3 版本控制与项目管理
2.3.1 SVN的集成与使用
版本控制系统是管理项目变更的必要工具。Subversion(SVN)是一个流行的版本控制系统。在MyEclipse中集成SVN,并使用它进行版本控制的基本步骤如下:
- 安装SVN插件 :如果MyEclipse没有自带SVN插件,可以从Eclipse Marketplace安装。
- 创建SVN仓库 :在本地或服务器上创建SVN仓库。
- 项目导入仓库 :在MyEclipse中,可以通过“Team” -> “Share Project”导入项目到SVN仓库。
- 更新与提交更改 :使用“Team”菜单可以更新本地副本到最新版本,或提交更改到仓库。
2.3.2 Maven的配置与管理
Apache Maven是一个项目管理和自动化构建工具。它基于项目对象模型(POM)的概念,通过一个中央信息管理文件( ),能够管理项目的构建、报告和文档。
在MyEclipse中配置Maven:
- 安装Maven集成 :确保已安装Maven,并在MyEclipse中进行配置。
- 创建Maven项目 :在MyEclipse中通过“File” -> “New” -> “Other”创建Maven项目,MyEclipse会自动生成必要的 文件。
- 添加依赖 :在 中声明所需的依赖,Maven会自动从中央仓库下载这些依赖。
- 执行Maven生命周期 :使用“Run As” -> “Maven build”执行Maven命令,如 ,以构建项目和下载依赖。
通过这些配置和管理,Java Web项目的开发环境将变得更加高效,项目结构将更加清晰,团队成员间的协作也将变得更加顺畅。
3. Java编程核心概念与实践
3.1 面向对象编程基础
3.1.1 类与对象的定义
面向对象编程(OOP)是当今编程界最主流的编程范式之一。类是Java语言中的一种基本单位,是创建对象的模板。对象是类的实例,具有状态(由属性表示)和行为(由方法定义)。理解类和对象的概念对于学习Java至关重要。
上述代码展示了如何定义一个Car类,并创建其对象myCar,随后为该对象的属性赋值并调用其方法。在定义类时,属性和方法都封装在类的内部,而创建对象时,实际上是在堆内存中分配空间。
3.1.2 继承、多态与封装的实践
继承、多态和封装是面向对象编程的三大特点,它们各自有不同的实践意义。
- 继承 允许创建一个类的实例,并且这个实例可以访问到它的父类的属性和方法。
- 多态 是指允许不同类的对象对同一消息做出响应。多态可以大大提高程序的可扩展性。
- 封装 隐藏了对象的实现细节,使得操作对象的代码只需要知道对象的接口,而不必知道对象内部的实现细节。
上述代码中, 类继承了 类,继承了 属性和 方法,并覆盖(override)了 方法以提供更具体的行为。同时, 类还增加了一个新的方法 。这展示了多态的一个实际应用,因为 对象可以被视为 类型,也可以调用 类中特有的 方法。
接下来,我们将详细探讨Java核心API中的集合框架与常用数据结构以及I/O流与文件处理的相关知识。这将帮助开发者更有效地管理和操作数据,同时理解Java中数据的输入与输出机制。
4. Servlet、JSP、JSTL动态网页构建
4.1 Servlet技术与Web应用
4.1.1 Servlet生命周期与处理流程
Servlet 是 Java 服务器端组件,用于扩展服务器的功能,处理客户端请求并返回响应。理解 Servlet 生命周期是开发高质量 Web 应用的关键。Servlet 的生命周期可以概括为以下几个阶段:加载和实例化、初始化、请求处理、服务销毁。
加载和实例化由服务器完成,当需要某个 Servlet 处理请求时,服务器加载 Servlet 类,并创建其实例。接下来执行初始化方法 ,通常用于一些初始化工作,如设置初始参数或者资源准备。初始化之后,Servlet 处于可服务状态,直到服务器关闭或手动销毁。
每当有对 Servlet 的请求到来时,服务器将调用 方法。 方法决定调用哪个方法来处理请求,通常是 , , , 等等,这些方法需要由开发者根据需求自行实现。
最终,在 Web 应用程序停止或重新启动之前, 方法会被调用,用于执行一些清理工作,例如释放资源或记录日志。
下面是一个简单的 Servlet 生命周期的代码示例:
在上述代码中,初始化 方法在 Servlet 创建后被调用一次。处理请求的 和 方法可以被多次调用,具体取决于客户端的请求类型。销毁方法 在 Servlet 被卸载前调用,通常是在服务器关闭或 Servlet 映射被删除时。
理解 Servlet 的生命周期对于优化 Web 应用性能非常关键。开发者可以根据不同阶段的特点,合理地进行资源分配和释放,以及初始化参数设置等,以保证应用的高效运行。
4.1.2 请求与响应的管理
在 Servlet 中,请求与响应的管理是构建动态 Web 页面的核心部分。 对象代表客户端的请求, 对象则用于封装服务器对客户端的响应。
对于请求管理, 对象允许开发者获取客户端发送的所有信息,包括请求参数、请求头、cookie、会话信息等。例如:
在响应管理方面, 对象允许开发者设置响应头、状态码、响应内容类型等。开发者可以通过它来控制 Web 页面的输出,例如:
提供的 方法还可以用来将请求重定向到另一个 URL,这在实现 Web 应用的导航逻辑时非常有用。
请求与响应管理是 Web 应用开发的基础,开发者需要深刻理解如何利用 和 对象来编写灵活且高效的代码,从而构建出符合需求的动态网页。
4.2 JSP与EL表达式
4.2.1 JSP页面的编写与执行流程
JavaServer Pages(JSP)是一种用于开发动态 Web 页面的技术。JSP 页面本质上是一个文本文件,包含 HTML 或 XML 标记以及嵌入式的 Java 代码片段。当访问 JSP 页面时,服务器会将其转换成 Servlet,然后编译并执行该 Servlet。
JSP 页面的编写通常包含以下几个基本部分:
- 指令(Directives):用于设置整个 JSP 页面的全局属性,如页面指令、包含指令、标签库指令。例如:
- 脚本元素(Scripting Elements):允许在 JSP 页面中编写 Java 代码,包括声明、脚本片段和表达式。例如:
- 动作(Actions):用于创建和使用对象,以及控制 JSP 页面的流程。例如:
- 表达式语言(EL):提供了一种简便的方式来访问页面上下文中的对象。例如:
JSP 页面执行流程如下:
- 浏览器请求 JSP 页面。
- 服务器检查 JSP 页面的修改时间。如果页面没有修改,直接使用上一次编译后的 Servlet;否则,服务器将重新转换并编译 JSP 页面。
- 编译后的 Servlet 执行并生成 HTML 内容。
- 生成的内容通过服务器发送回浏览器。
通过编写 JSP 页面,开发者可以将页面逻辑与页面显示分离,使得代码更易于维护和修改。JSP 提供了一种直观的方式来创建动态 Web 页面,但随着 MVC 框架的流行,其地位已经逐渐被其他技术所取代,例如 JSP 的角色在 Spring MVC 中通常由 Thymeleaf 或者 JSTL 标签库来承担。
4.2.2 EL表达式的使用与优势
表达式语言(Expression Language,简称 EL)是一种用于访问和操作数据的语言,它在 JSP 中广泛使用,提供了一种简化的方式来访问数据,特别是 JavaBean 和 Map 对象的属性。
EL 表达式通常以 的形式出现,并可以用于 JSP 页面、标签库的表达式属性以及 JSTL 的标签体内。EL 提供了一些隐式对象,如 , , , 等,这些对象代表了 JSP 的作用域范围,可直接用于 EL 表达式中。
EL 的使用优势如下:
- 简洁性:EL 表达式语法简洁,易于编写和阅读。例如,在 JSP 中,传统方式访问一个请求参数需要写成 ,而使用 EL 可以简化为 。
- 标准化:EL 提供了一种标准的方式访问数据,让页面开发者与后端 Java 代码分离,更易于页面设计和逻辑实现的分工合作。
- 可扩展性:EL 允许自定义函数,这意味着开发者可以创建自己的函数库,并在 EL 表达式中使用它们。这大大增强了 EL 的灵活性和表达能力。
- 非侵入式:与 JSP 页面中的 Java 代码相比,使用 EL 不需要进入 Java 代码块,使得页面更易于维护。
尽管 EL 表达式在 JSP 中被广泛使用,但随着其他技术的发展,例如 JSTL 和 Thymeleaf 等模板引擎的流行,开发者在现代 Web 应用中使用 EL 的频率有所下降。然而,了解 EL 仍然是理解 JSP 以及一些旧系统迁移的重要部分。
下面是一个 EL 表达式的使用示例:
在上述示例中,EL 表达式用于访问页面属性 ,用户对象的 属性,以及账户对象的 属性。这些属性通常来自于 JavaBean 或者页面范围内的对象。
4.3 JSTL标签库与自定义标签
4.3.1 JSTL核心标签库的使用方法
JavaServer Pages Standard Tag Library(JSTL)是一个用于 JSP 页面的标签库,它提供了一组标准的标签,用以简化 JSP 页面的编码。JSTL 标签库分为几个不同的子库,最常用的包括核心标签库(Core)、格式化标签库(FMT)以及 SQL 标签库(SQL)。
核心标签库(Core)提供了一些基础功能的标签,例如条件判断、循环控制、国际化处理等。这些标签有助于简化 JSP 页面中的 Java 代码,提高页面的可读性和可维护性。
JSTL 核心标签库的使用需要在 JSP 页面顶部引入标签库定义:
下面是一些常用 JSTL 核心标签的使用示例:
- 条件标签 和 :
- 循环标签 :
- 输出标签 :
- 格式化标签 、 和 :
这些标签通过减少 JSP 页面中嵌入式的 Java 代码,有助于将业务逻辑与页面展示分离,提高了代码的重用性。
4.3.2 自定义标签的创建与应用
除了使用 JSTL 提供的标准标签库外,开发者还可以根据自己的需求创建自定义标签。通过定义自定义标签,开发者可以封装常用的业务逻辑,使其可以在多个 JSP 页面中重用。
创建自定义标签主要分为以下步骤:
- 创建标签处理器类:这个类继承自 或者 ,并实现特定的接口方法。
- 定义 TLD 文件(Tag Library Descriptor):TLD 文件描述了标签库的信息和标签的使用方式。
- 在 JSP 页面中引入自定义标签库并使用标签:
通过这些步骤,开发者可以创建自己的标签库,极大地扩展了 JSP 的功能,并使得 JSP 页面更加清晰、可维护。自定义标签使得代码重用和逻辑封装变得简单,对于大型 Web 应用来说,这可以大幅度提高开发效率和代码质量。
5. MVC设计模式及Spring MVC框架应用
5.1 MVC设计模式解析
5.1.1 MVC各部分的职责与交互
MVC(Model-View-Controller)设计模式是一种经典的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。每部分都承担着特定的职责,以实现应用的业务逻辑、用户界面和输入控制之间的分离。
- 模型(Model) :主要负责数据和业务逻辑。模型通常由多个对象组成,这些对象能够反映系统的数据状态,并包含访问和修改这些数据状态的业务逻辑。
- 视图(View) :负责用户界面的展示。视图向用户展示信息,如一个HTML页面,它从模型中获取数据,并将数据呈现给用户。在Web应用中,视图通常是JSP、HTML、XML或JSON格式的文件。
- 控制器(Controller) :充当模型和视图之间的协调者。控制器处理来自用户的请求,使用模型来更新应用程序的状态,并决定将哪个视图呈现给用户。
在MVC模式中,控制器接收用户的输入并调用模型和视图去完成用户请求。模型拥有数据,而视图负责显示数据,控制器负责业务逻辑和用户请求。三者之间通过接口实现松耦合,使得系统更容易维护和扩展。
5.1.2 设计模式在Web开发中的优势
MVC设计模式为Web开发提供了一个清晰的架构,它将数据处理、业务逻辑和用户界面展示分离开来,这样做的优势有:
- 解耦合 :模型、视图和控制器的分离,使得代码易于理解和维护,也便于团队协作开发。
- 重用性 :由于分离职责,可以在不同的应用中重用模型和视图组件,提高了开发效率。
- 灵活性 :MVC架构允许替换视图技术而无需改变模型和控制器的代码,使得前端技术的选择更加灵活。
- 可维护性 :由于组件是独立的,修改其中一个组件不会影响其他组件,降低了系统维护的复杂性。
- 可测试性 :独立的组件容易被单独测试,提高了代码的测试覆盖率和质量。
5.2 Spring MVC快速入门
5.2.1 Spring MVC的基本组java6基础教程件与配置
Spring MVC是Spring框架的一部分,是一个基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架。它通过提供DispatcherServlet来分发请求并返回响应,实现了MVC模式的组件分离。
- DispatcherServlet :是Spring MVC的核心,负责协调各个组件以满足Web请求,并生成响应。
- 处理器映射(Handler Mapping) :确定请求和对应的控制器(Handler)。
- 控制器(Controller) :处理用户的请求并返回一个ModelAndView对象,这个对象包含了视图和模型数据。
- 视图解析器(View Resolver) :将控制器返回的视图名称解析为实际的视图对象。
- 视图(View) :用于渲染模型数据,最终将渲染结果返回给用户。
要配置Spring MVC,需要在web.xml中定义DispatcherServlet,并在WEB-INF目录下创建一个名为spring-servlet.xml的配置文件,用于配置各组件和组件之间的关系。
5.2.2 控制器、视图解析器与数据绑定
控制器(Controller) :处理业务逻辑并返回ModelAndView对象。例如,一个简单的计算器控制器:
在上面的代码中, 注解定义了URL模式映射, 注解将请求参数绑定到方法的参数上, 对象用于向视图传递数据。
视图解析器(View Resolver) :为了将控制器返回的视图名称转换为实际的视图对象,需要配置视图解析器,如InternalResourceViewResolver:
配置完成后,当控制器返回"result"作为视图名称时,视图解析器将解析出 作为实际的视图。
数据绑定 :Spring MVC提供了强大的数据绑定功能,能够自动将表单提交的数据绑定到控制器方法的参数上。使用 注解即可实现。
5.3 高级特性与项目整合
5.3.1 Spring MVC的表单处理与验证
Spring MVC提供了强大的表单处理和数据验证功能。在控制器中,可以使用 来绑定表单数据到一个POJO(Plain Old Java Object)上,然后通过声明约束来验证数据的正确性。
在上面的代码中,如果用户提交的表单数据不满足 和 等注解的要求, 会捕获错误信息,并将用户重定向回注册表单页面。
5.3.2 整合Spring和Hibernate
整合Spring MVC和Hibernate通常需要配置数据源、事务管理器和Hibernate的会话工厂。在Spring配置文件中添加以下配置:
这样配置后,Hibernate的会话工厂将被Spring管理,可以轻松地在Spring应用中进行数据库操作。通过 注解,可以轻松实现事务管理。
整合Spring MVC和Hibernate可以有效地利用两者的优点,提高应用的数据持久化能力。Spring MVC处理Web请求,而Hibernate负责数据持久化,将业务逻辑与数据访问层完全分离,使得整个应用架构更加清晰和易于维护。
6. 数据库操作与Hibernate框架集成
在现代Web开发中,数据库的操作和集成是不可或缺的一部分。Java作为企业级应用开发的首选语言,与Hibernate框架的集成已成为处理数据库操作的主流方式。本章将深入探讨关系型数据库基础和Hibernate框架集成的实践。
6.1 关系型数据库基础
在深入了解Hibernate之前,我们首先要掌握关系型数据库的基本知识。关系型数据库使用表格来组织数据,这些表格被称为“关系”。
6.1.1 SQL语言的核心概念
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。它包括了数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL)。
- DDL包括用于创建、修改和删除数据库对象(如表、视图、索引等)的语句。
- DML包括用于增加、删除和修改数据的语句。
- DCL用于控制数据访问权限。
6.1.2 数据库设计与规范化
数据库设计主要是指如何高效地组织数据,以确保数据的一致性和减少冗余。规范化是数据库设计的一个过程,目的是消除数据冗余,提高数据完整性。
- 第一范式(1NF)要求每个字段都是不可分割的最小单元。
- 第二范式(2NF)进一步要求表中的非主属性完全依赖于主键。
- 第三范式(3NF)要求非主属性不依赖于其他非主属性。
6.2 Hibernate框架实践
Hibernate是一个开源的对象关系映射(ORM)框架,它通过使用映射文件和注解将Java对象映射到数据库表。
6.2.1 Hibernate的配置与映射关系
Hibernate需要一个配置文件 ,它指定了数据库连接信息、映射文件的位置和一些Hibernate配置参数。
映射关系的建立是通过映射文件或注解来完成的,它定义了Java类与数据库表之间的对应关系。
6.2.2 HQL与Criteria查询的应用
Hibernate查询语言(HQL)是面向对象的查询语言,它允许开发者以面向对象的方式查询数据。
Criteria查询是另一种面向对象的查询方式,它通过创建Criteria实例并设置查询条件来查询数据。
6.3 数据库连接池与事务管理
在Web应用中,数据库连接池和事务管理是提高性能和保证数据一致性的关键因素。
6.3.1 数据源的配置与使用
数据源是管理数据库连接的组件,它在应用服务器启动时初始化并创建一定数量的数据库连接,这些连接可供应用程序重用,从而减少连接开销。
Hibernate可以使用如C3P0、HikariCP等数据源。
6.3.2 事务的隔离级别与传播行为
事务的隔离级别定义了事务在并发环境下数据的一致性级别。不同的隔离级别会导致不同程度的数据不一致问题,如脏读、不可重复读和幻读。
- 事务的传播行为定义了事务的边界如何在方法间传播,它允许事务在方法调用时进行配置。
在本章中,我们讨论了关系型数据库的基础知识和Hibernate框架集成。我们从SQL语言的核心概念讲到数据库设计的规范化,从Hibernate的基本配置和映射关系讲到高级查询技术,最后讲述了数据库连接池和事务管理的配置方法。通过对这些概念和实践的深入学习,开发者可以更有效地利用数据库资源,提升应用性能和稳定性。
本文还有配套的精品资源,点击获取
简介:本书详尽介绍了MyEclipse集成开发环境的基础知识以及其在Java Web应用开发中的高效应用。内容覆盖从MyEclipse界面工作流程、Java Web项目开发设置、Java语言编程实践到Web开发中的Servlet、JSP、JSTL技术及MVC设计模式。还包括数据库操作与ORM框架如Hibernate的集成使用,企业级技术EJB和JMS的介绍,以及项目实践案例。本教程是Java Web开发初学者和进阶者的必备指南,让读者从基础到高级技术全面掌握MyEclipse的使用,提高开发效率与项目质量。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/1536.html