JSP技术概述与应用框架外文翻译.docx

上传人:b****6 文档编号:8855899 上传时间:2023-05-15 格式:DOCX 页数:30 大小:44.35KB
下载 相关 举报
JSP技术概述与应用框架外文翻译.docx_第1页
第1页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第2页
第2页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第3页
第3页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第4页
第4页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第5页
第5页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第6页
第6页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第7页
第7页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第8页
第8页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第9页
第9页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第10页
第10页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第11页
第11页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第12页
第12页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第13页
第13页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第14页
第14页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第15页
第15页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第16页
第16页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第17页
第17页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第18页
第18页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第19页
第19页 / 共30页
JSP技术概述与应用框架外文翻译.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JSP技术概述与应用框架外文翻译.docx

《JSP技术概述与应用框架外文翻译.docx》由会员分享,可在线阅读,更多相关《JSP技术概述与应用框架外文翻译.docx(30页珍藏版)》请在冰点文库上搜索。

JSP技术概述与应用框架外文翻译.docx

JSP技术概述与应用框架外文翻译

xx大学xx学院

毕业设计(论文)外文资料翻译

系:

专业:

班级:

姓名:

学号:

附件:

1.外文资料翻译译文;2.外文原文

指导教师评语:

 

签名:

2014年3月15日

注:

请将该封面与附件装订成册。

附件一:

外文资料翻译译文

JSP技术概述与应用框架

作者:

Zambon,Giulio/Sekler,Michael

出处:

Springer-VerlagNewYorkInc

JavaServerPages(JSP)是一种基于web的脚本编程技术,类似于网景公司的服务器端Java脚本语言——server-sideJavaScript(SSJS)和微软的ActiveServerPages(ASP)。

与SSJS和ASP相比,JSP具有更好的可扩展性,并且它不专属于任何一家厂商或某一特定的Web服务器。

尽管JSP规范是由Sun公司制定的,但任何厂商都可以在自己的系统上实现JSP。

在Sun正式发布JSP(JavaServerPages)之后,这种新的Web应用开发技术很快引起了人们的关注。

JSP为创建高度动态的Web应用提供了一个独特的开发环境。

按照Sun的说法,JSP能够适应市场上包括ApacheWebServer、IIS4.0在内的85%的服务器产品。

本文将介绍JSP相关的知识,以及JavaBean的相关内容,当然都是比较粗略的介绍其中的基本内容,仅仅起到抛砖引玉的作用,如果读者需要更详细的信息,请参考相应的JSP的书籍。

一、JSP的好处

JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,其在动态网页的建设中有其强大而特别的功能。

JSP与Microsoft的ASP技术非常相似。

两者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。

下面我们简单的对它进行介绍。

JSP页面最终会转换成servler。

因而,从根本上,JSP页面能够执行的任何任务都可以用servler来完成。

然而,这种底层的等同性并不意味着servler和JSP页面对于所有的情况都等同适用。

问题不在于技术的能力,而是二者在便利性、生产率和可维护性上的不同。

毕竟,在特定平台上能够用Java编程语言完成的事情,同样可以用汇编语言来完成,但是选择哪种语言依旧十分重要。

1.1和单独使用servler相比,JSP提供下述好处:

•JSP中HTML的编写与维护更为简单。

JSP中可以使用常规的HTML:

没有额外的反斜杠,没有额外的双引号,也没有暗含的Java语法。

•能够使用标准的网站开发工具。

即使对那些对JSP一无所知的HTML工具,我们也可以使用,因为它们会忽略JSP标签(JSPtags)。

•可以对开发团队进行划分。

Java程序员可以致力于动态代码。

Web开发人员可以将经理集中在表示层(presentationlayer)上。

对于大型的项目,这种划分极为重要。

依据开发团队的大小,及项目的复杂程度,可以对静态HTML和动态内容进行弱分离(weakerseparation)和强分离(strongerseparation)。

在此,这个讨论并不是让您停止使用servlets,只使用JSP。

几乎所有的项目都会同时用到这两种技术。

针对项目中的某些请求,您可能会在MVC构架下组合使用这两项技术。

我们总是希望用适当的工具完成相对应的工作,仅仅是servlet并不能填满您的工具箱。

1.2JSP的特点

按照脚本语言是服务于某一个子系统的语言这种论述,JSP应当被看作是一种脚本语言。

然而,作为一种脚本语言,JSP又显得过于强大了,在JSP中几乎可以使用全部的Java类。

作为一种基于文本的、以显示为中心的开发技术,JSP提供了JavaServlet的所有好处,并且,当与一个JavaBeans类结合在一起时,JSP提供了一种使内容和显示逻辑分开的简单方式。

分开内容和显示逻辑的好处是,更新页面外观的人员不必懂得Java代码,而更新JavaBeans类的人员也不必是设计网页的行家里手,就可以用带JavaBeans类的JSP页面来定义Web模板,以建立一个由具有相似的外观的页面组成的网站。

JavaBeans类完成数据提供,这样在模板中就没有Java代码,这意味着这些模板可以由一个HTML编写人员来维护。

当然,也可以利用JavaServlet来控制网站的逻辑,通过JavaServlet调用JSP文件的方式来将网站的逻辑和内容分离。

一般来说,在实际的JSP引擎中,JSP页面在执行时是编译式,而不是解释式的。

解释式的动态网页开发工具如ASP、PHP3等由于速度等原因已经满足不了当前大型电子商务应用的需要了,传统的开发技术都在向编译执行的方式改变,如ASP→ASP+;PHP3→PHP4。

在JSP规范书中,并没有明确要求JSP中的程序代码部分(称为Scriptlet)一定要用Java来写。

实际上,有一些JSP引擎就是采用的其他脚本语言,如EMAC-Script、WebL等,但实际上这几种脚本语言也是构建在Java上面,编译为Servlet来实现的。

按照JSP规范书写,和Java没有任何关系的Scriptlet也是可以的,不过,由于JSP的强大功能主要在于能和JavaBeans、EnterpriseJavaBeans共同运转,所以即使是Scriptlet部分不使用Java,编译成的执行代码也应该是与Java相关的。

二、JSP相对于竞争技术的优势

许多年前,Marty受到邀请,参加一个有关软件技术的小型(20个人)研讨会,做在Marty旁边的人是JamesGosling---Java编程语言的发明者。

隔几个位置,是来自华盛顿一家大型软件公司的高级经理。

在讨论过程中,研讨会的主席提出了Jini的议题,这在当时是一项新的Java技术.主席向该经理询问他的想法.他继续说,他们会持续关注这项技术,如果这项技术变得流行起来,他们会遵循公司的“接受并扩充(embraceandextend)”的策略.此时,Gosling随意地插话说“你的意思其实就是不接受且不扩充(disgraceanddistend)。

在此,Gosling的抱怨显示出,他感到这个公司会从其他公司那里拿走技术,用于他们自己的目的.但你猜这次怎么样?

这次鞋子穿在了另一只脚上。

Java社团没有发明这一思想----将页面设计成由静态HTML和用特殊标签标记的动态代码混合组成.。

ColdFusion多年前就已经这样做了。

甚至ASP(来自于前述经理所在公司的一项产品)都在JSP出现之前推广了这种方式。

实际上,JSP不只采用了这种通用概念,它甚至使用许多和ASP相同的特殊标签。

因此,问题变成:

为什么使用JSP,而不使用其他技术呢?

我们的第一反应是我们不是在争论所有的人应该做什么。

其他这些技术中,有一些也很不错,在某些情况下也的确是合情合理的选择.然而,在其他情形中,JSP明显要更好一些。

下面给出几个理由。

2.1与.NET和ActiveServerPages(ASP)相比

.NET是Microsoft精心设计的一项技术。

ASP.NET是与servlets和JSP直接竞争的技术。

JSP的优势体现在两个方面。

首先,JSP可以移植到多种操作系统和Web服务器,您不必仅仅局限于部署在Windows和IIS上尽管核心.NET平台可以在好几种非Windows平台上运行,但ASP这一部分不可以。

您不能期望可以将重要的ASP.NET应用部署到多种服务器和操作系统。

对于某些应用,这种差异没有什么影响。

但有些应用,这种差异却非常重要。

其次,对于某些应用,底层语言的选择至关重要。

例如,尽管.NET的C#语言设计优良,且和Java类似,但熟悉核心C#语法和众多工具库的程序员很少。

此外,许多开发者依旧使用最初版本的ASP。

相对于这个版本,JSP在动态代码方面拥有明显的优势。

使用JSP,动态部分是用Java编写的,而非VBScript过其他ASP专有的语言,因此JSP更为强劲,更适合于要求组件重用的复杂应用。

当将JSP与之前版本的ColdFusion对比时,您可能会得到相同的结论。

应用JSP,您可以使用Java编写“真正的代码”,不必依赖于特定的服务器产品。

然而,当前版本的ColdFusion满足J2EE服务器的环境,允许开发者容易的混合使用ColdFusion和Servlet/JSP代码。

2.2与PHP相比

PHP(“PHP:

HypertextPreprocessor”的递归字母缩写词)是免费的、开放源代码的、HTML嵌入其中的脚本语言,与ASP和JSP都有某种程度的类似。

JSP的一项优势是动态部分用Java编写,而Java已经在联网、数据库访问、分布式对象等方面拥有广泛的API,而PHP需要学习全新的、应用相对广泛的语言。

JSP的第二项优势是,和PHP相比,JSP拥有极为广泛的工具和服务器提供商的支持。

2.3与纯Servlet相比

原则上,JSP并没有提供Servlet不能完成的功能。

实际上,JSP文档在后台被自动转换成Servlet。

但是编写(和修改)常规的HTML,要比无数println语句生成HTML要方便得多。

另外,通过将表示与内容分离,可以为不同的人分配不同的任务:

网页设计人员使用熟悉的工具构建HTML,要么为Servlet程序员留出空间插入动态内容,要么通过XML标签间接调用动态内容。

这是否表示您只可以学习JSP,将Servlet丢到一边呢?

当然不是!

由于以下4种原因,JSP开发人员需要了解Servlet:

(1)JSP页面会转换成Servlet。

不了解Servlet就无法知道JSP如何工作。

(2)JSP由静态HTML、专用的JSP标签和Java代码组成。

哪种类型的Java代码呢?

当然是Servlet代码!

如果不了解Servlet编程,那么就无法编写这种代码。

(3)一些任务用Servlet完成比用JSP来完成要好。

JSP擅长生成由大量组织有序的结构化HTML或其他字符数据组成的页面。

Servlet擅长生成二进制数据,构建结构多样的页面,以及执行输出很少或者没有输出的任务(比如重定向)。

(4)有些任务更适合于组合使用Servlet和JSP来完成,而非单独使用Servlet或JSP。

2.4与JavaScript相比

JavaScript和Java编程语言完全是两码事,前者一般用于在客户端动态生成HTML,在浏览器载入文档时构建网页的部分内容。

这是一项有用的功能,一般与JSP的功能(只在服务器端运行)并不发生重叠。

和常规HTML页面一样,JSP页面依旧可以包括用于JavaScript的SCRIPT标签。

实际上,JSP甚至能够用来动态生成发送到客户端的JavaScript。

因此,JavaScript不是一项竞争技术,它是一项补充技术。

JavaScript也可以用在服务器端,最因人注意的是SUNONE(以前的iPlanet)、IIS和BroadVision服务器。

然而,Java更为强大灵活、可靠且可移植。

2.5与WebMacro和Velocity相比

JSP决非完美。

许多人都曾指出过JSP中能够改进的功能。

这是一件好事,JSP的优势之一是该规范由许多不同公司组成的社团控制。

因此,在后续版本中,这项技术能够得到协调的改进。

但是,一些组织已经开发出了基于Java的替代技术,试图弥补这些不足。

据我们的判断,这样做是错误的。

使用扩充JSP和Servlet技术的第三方工具,如ApacheStructs,是一种很好的思路,只要该工具带来的好处能够补偿工具带来的额外复杂性。

但是,试图使用非标准的工具代替JSP则不理想。

在选择一项技术时,需要权衡许多方面的因素:

标准化、可移植性、集成性、行业支持和技术特性。

对于JSP替代技术的争论几乎只是集中在技术特性上,而可移植性、标准化和集成性也十分重要。

例如,Servlet和JSP规范为Web应用定义了一个标准的目录结构,并提供用于部署Web应用的标准文件(.war文件)。

所有JSP兼容的服务器必须支持这些标准。

我们可以建立过滤器作用到任意树木的Servlet和JSP页面上,但不能用于非标准资源。

Web应用安全设置也同样如此。

此外,业界对JSP和Servlet技术的巨大支持使得这两项技术都有了巨大的进步,从而减轻了对JSP的许多批评。

例如,JSP标准标签库和JSP2.0表达式语言解决了两种最广泛的批评:

缺乏良好的迭代结构;不使用显式的Java代码或冗长的jsp:

useBean元素难以访问动态结果。

三、对JSP的误解

忘记JSP技术是服务器端技术

下面是Marty收到的一些典型问题(大部分问题不止一次的出现)。

·我们的服务器正在运行JDK1.4。

我如何将Swing组件用到JSP页面呢?

·我如何将图像放到JSP页面中?

我不知道读取图像文件应该使用哪些JavaI/O命令。

·Tomcat不支持JavaScript,当用户在图像上移动鼠标时,我如何使图像突出显示呢?

·我们的客户使用不理解JSP的旧浏览器。

我应该怎么做?

当我们的客户在浏览器中使用“ViewSource”(查看源代码)时,如何阻止他们看到JSP标签?

所有这些问题都基于浏览器对服务器端的过程在有所了解的假定之上。

但事实上浏览器并不了解服务器端的过程。

因此:

·如果要将使用Swing组件的applet放到网页中,重要的是浏览器的Java版本,和服务器的Java版本无关。

如果浏览器支持Java2平台,您可以使用正常的APPLET(或Java插件)标签,即使在服务器上使用了非Java技术也须如此。

·您不需要JavaI/O来读取图像文件,您只需将图像放在存储Web资源的目录中(即WEB-INF/classes向上两级的目录),并输出一个正常的IMG标签。

·您应该用SCRIPT标签,使用客户端JavaScript创建在鼠标下会更改的图像,这不会由于服务器使用JSP而改变。

·浏览器根本不“支持”JSP----它们看到的只是JSP页面的输出。

因此,如同对待静态HTML页面一样,只需确保JSP输出的HTML与浏览器兼容。

·当然,您不需要采取什么措施来阻止客户看到JSP标签,这些标签在服务器上进行处理,发送给客户的输出中并不出现。

混淆转换期间和请求期间

·JSP页面需要转换成servlet。

Servlet在编译后,载入到服务器的内容中,初始化并执行。

但是每一步发生在什么时候呢?

要回答这个问题,要记住以下两点:

·JSP页面仅在修改后第一次被访问时,才会被转换成servlet并进行编译;载入到内存中、初始化和执行遵循servlet的一般规则。

最常被误解的项已经突出标示出来。

在参考该表时,要注意,由JSP页面生成的servlet使用_jspService方法(GET和POST请求都调用该函数),不是doGet或doPost方法。

同样,对于初始化,它们使用jspInit方法,而非init方法。

将JSP页面转换成servlet编译Servlet将Servlet载入到服务器内存中调用jspInit调用_jspService。

四、什么是应用框架:

框架(framework)是可重用的,半成品的应用程序,可以用来产生专门的定制程序。

象人一样,软件应用的相似性比不同点要多。

它们运行在相似的机器上,期望从相同的设备输入信息,输出到相同的显示设备,并且将数据存储到相同的硬盘设备。

开发传统桌面应用的开发人员更习惯于那些可以涵盖应用开发同一性的工具包和开发环境。

构架在这些公共基础上的应用框架可以为开发人员提供可以为他们的产品提供可重用服务的基础架构。

框架向开发人员提供一系列具有以下特征的骨架组件:

已经知道它们在其它程序上工作得很好;

(2)它们随时可以在下一个项目中使用;

(3)它们可以被组织的其它团队使用;

对于框架是典型的构建还是购买命题。

如果你自己构建它,在你完成时你就会理解它,但是在你被融入之前又将花费多长时间呢?

如果要购买,你必须得克服学习曲线,同样,在你可以用它进行工作之前又得花多长时间?

这里没有所谓正确答案,但许多观察者都会同意,像Struts这样的框架能提供比从头开始开发更显著的投资回报,特别是对于大型项目来说。

五、其它类型的框架:

框架的概念不仅用于应用程序也可用于组件。

在其它的资料里面,我们也介绍了一些可以和Struts一起使用的框架。

这些包括Lucene搜索引擎,Scaffold工具包,Struts验证器,以及Tiles标签库。

与应用框架一样,这些工具也提供了一些半完成的版本,可以用在用户的定制组件之中。

某些框架被限制于专门的开发环境中。

Struts以及本文中涉及的组件却不是这样。

你可以在很多环境中来开发Struts:

VisualAgeforJava,JBuilder,Eclipse,Emacs,甚至使用Textpad。

对于你的工具,如果你可以用来开发Java,你就可以用它来开发Struts。

六、使用的技术:

使用Struts的应用开发使用了大量的其他基础技术。

这些技术并不是专门针对Struts,而是所有Javaweb应用都可以使用的。

开发者使用Struts之类的框架是为了隐藏在诸如HTTP,CGI,以及JSP之类技术后面的繁琐的细节。

作为一个Struts开发者,你并不需要知晓所有的相关知识,但是这些基本技术的工作原理可能有助于你针对棘手问题设计出创造性的方案。

6.1超文本传输协议(HTTP):

当两个国家之间进行调解时,外交官们总是遵循一定的正式协议。

外交协议主要设计来避免误解,以及防止谈判破裂。

同样,当计算机间需要对话,它们也遵循一个正式的协议。

这个协议定义数据是如何传输,以及它们到达后如何进行解码。

Web应用程序就是使用HTTP协议在运行浏览器的计算机和运行的服务器的程序间传输数据。

很多服务器应用程序使用HTTP之外的其他协议。

他们在计算机之间维护一个持久性的连接。

应用服务器可以清楚的知道是谁连接上来,而且何时中断连接。

因为它们知道每一个连接的状态,以及每一个使用它的人。

这称之为状态协议。

相反,HTTP是一个无状态协议。

HTTPServer可以接受来自于各种客户的各种请求,并提供各种响应,即使是这个响应仅仅是说No。

没有大量的协商和连接持久性,无状态协议可以处理大量的请求。

这也是Internet可以扩展到很多计算机的原因。

HTTP成为通用标准的原因是其简单性。

HTTP请求看起来就像一个平常的文本文档。

这使应用程序很容易创建HTTP请求。

你甚至可以通过标准的程序如Telnet来手动传递一个HTTP请求。

当HTTP响应返回时,它也是一个开发者可以直接阅读的平面文本。

HTTP请求的第一行包含方法,其后是请求的来源地址和HTTP版本。

HTTP请求头跟在首行后面,可以没有也可以有多个。

HTTP头向服务器提供额外的信息。

可以包括浏览器的种类和版本,可接受的文档类型,浏览器的cookies等等。

7种请求方法中,GET和POST是用得最多的。

一旦服务器接收到请求,它就要产生一个HTTP响应。

响应的第一行称为状态行,包含了HTTP协议的版本,数字型状态,以及状态的简短描述。

状态行后,服务器将返回一个HTTP响应头,类似于HTTP请求头。

如上所述,HTTP并不在请求间保持状态信息。

服务器接受请求,发出响应,并且继续愉快地处理文本请求。

因为简单和效率,无状态协议不适合于需要跟踪用户状态的动态应用。

Cookies和URL重写是两个在请求间跟踪用户状态的方式。

cookie是一种特殊的信息包,存储于用户的计算机中。

URL重写是在页面地址中存储一个特殊的标记,Java服务器可以用它来跟踪用户。

这两种方法都不是无缝的,是用哪一个都意味着在开发时都要进行额外的工作。

对其本身来说,标准的HTTPweb服务器并不传输动态内容。

它主要是使用请求来定位文件资源,并在响应中返回此资源。

通常这里的文件使用HypertextMarkupLanguage(HTML)[W3C,HTML]格式化,以使浏览器可以显示它们。

HTML页面通常包含一些到其他页面的超文本连接,也可以显示其他一些内容比如图像和视频等等。

用户点击连接将产生另一个请求,就开始一个新的处理过程。

标准web服务器处理静态内容处理得很好,但处理动态内容时则需要额外的帮助手段了。

定义:

静态内容直接来自于文本或数据文件,比如HTML或者JPEG文件。

这些文件可以随时改变,但通过浏览器请求时,却不能自动改变。

相反,动态内容是临时产生的,典型地,它是针对浏览器的个别请求的响应。

6.2公共网关接口(CGI):

第一个普遍用来产生动态内容的标准是通用网关接口(CommonGatewayInterface(CGI))。

CGI使用标准的操作系统特征,比如环境变量和标准输入输出,在Web服务器间以及和主机系统间创建桥接和网关。

其他程序可以看到webserver传递过来的请求,并创建一个定制的响应。

当web服务器接收到一个对CGI程序的请求时,它便运行这个程序并向其提供它请求里面所包含的信息。

CGI程序运行,并将输出返回给Webserver,webserver则将输出响应给浏览器。

CGI定义了一套关于什么信息将作为环境变量传递,以及它希望怎样使用标准输入和输出的惯例。

与HTTP一样,CGI是灵活和易于实现的,并且已经有大量现成的CGI程序。

CGI的主要缺点是它必须为每个请求运行一个程序。

这是一个相对昂贵的处理方法,对大容量站点来说,每分钟有数千个请求,有可能使站点瘫痪。

CGI程序的另一个缺点是平台依赖性,一个平台上开发的程序不一定在另一个平台上能运行。

6.3Javaservlet:

Sun公司的JavaServlet平台直接解决了CGI程序的两个主要缺点:

首先,servlet比常规CGI程序提供更好的性能和资源利用。

其次,一次编写,随处运行的JAVA特性意味着servlet在有JVM的操作系统间是轻便的可移动的。

Servlet看起来好像是一个微小的webserver。

它接受请求并产生响应。

但,和常规webserver不同,servletAPI是专门设计来帮助Java开发人员创建动态应用的。

Servlet本身是要编译成字节码的Java类,就像其他Java对象一样。

Servlet访问HTTP特定服务的API,但它仍然是一个运行于程序之中的Java对象,并可以利用所有的Java资产。

为了使常规webservers能访问servlet,servlet被安插在一个容器之中。

Servlet容器连接到Web服务器。

每servlet都可以声明它可以处理何种样式的URL。

当符合所注册样式的请求到达,webserver将请求传递给容器,容器则调用响应的servlet。

但和CGI程序不同,并不是针对每个请求都要创建一个新的servlet。

一旦容器实例化了一个servlet,它就仅为每个新的请求创建一个新的线程。

Java线程可比使用CGI程序的服务器处理开销小多了。

一旦servlet被创建,使用它处理额外的请求仅带来很小的额外开销。

Servlet开发人员可以使用init()方法保持对昂贵资源的引用,比如到数据库或者EJBHome接口的连接,以便它们可以在不同的请求之间进行共享。

获得这些资源要耗费数秒时间,这比大多数冲浪者愿意等的时间要长些。

Servlet的另一个好处是,它是多线程的,servlet开发人员必须特别注意确保它们的servlet是线程安全的。

学习servlet编

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2