个人web服务器器 怎么使用

品牌: 1影响web应用服务器性能的因素  作为一种资源的组织和表达机制,Web已成为Internet最主要的信息传送媒介。因此Web的性能已经成为判断一个网站成功与否的一个重要评估标准。而Web则是决定Web性能的重要环节。  Web服务器性能就是指一个Web服务器响应用户请求的能力。为了提高Web服务器的性能人们进行了诸多尝试,已经取得了可喜的成果。本文通过对前人研究结果的分析,提出了在具体应用环境中优化Web服务器的方法和策略。  Web服务器概述  Web系统在现在网络中广泛使用,而Web服务器则是Web系统的一个重要组成部分。完整的Web结构应包括:HTTP协议,Web服务器,通用网关接口CGI、Web应用程序接口、Web。  Web服务器是指驻留在因特网上某种类型计算机的程序。它是在网络中信息提供者基干HTTP的为实现信息发布、资料查询、数据处理等诸多应用搭建基本平台的服务器,其主要功能是提供网上信息浏览服务。当Web浏览器(客户端)连到服务器并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。  Web服务器在web页面处理中大致可分为三个步骤:第一步,web浏览器向一个特定的服务器发出Web页面请求;第二步,Web服务器接收到web页面请求后,寻找所请求的web页面,并将所请求的Web页面传送给Web浏览器;第三步,Web服务器接收到所请求的web页面,并将它显示出来。  web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。在Web上,常见的大多数表单核搜索引擎上都是用的是CGI脚本。  影响web应用服务器性能的因素  Web服务器的性能就是指一个Web服务器响应用户请求的能力,服务器的性能对于一个Web系统来说至关重要。为了提高Web服务器的性能人们进行了许多尝试,也采用了许多技术和方法,但是这些技术和方法往往缺乏适用性。  通过对前人的研究分析可以发现,在web服务器的优化方而存在这种问题的原因主要有两个:一方面是服务器性能评测造成的,一方面是选用优化方案时考虑不全面造成的。  现行的服务器性能评测工具在对Web服务器进行评测时,其实是由一台或几台计算机模拟客户机,与被测的Web服务器进行通信,它们其实组成的只是一个局域网的环境,这与真正的广域网的环境有一定的差别。  另外,评测工具在选择网络负载时,虽然已经尽可能的接近真实负载,但是与持续的高频率负载要求仍有差距;再者,在性能测试指标的选择与分析上也不够合理,造成了分析结果不够公正、可靠。而在选用优化Web服务器的方法时,往往只是考虑Web服务器这一个方面,很少结合具体的应用环境。所以就造成了评测结果不够科学,应用环境考虑不够全面,Web服务器性能优化缺乏针对性。因此在具体的应用环境下优化Web服务器的性能需要另外考虑以下两个主要因素:网络特性和Web负载特点。  网络特性是指web服务器所在网络情况,是广域网还是局域网,是高速网络(传输速率在1OOMb/s以上的网络就叫做高速网络)还是低速网络,在不同的网络中相关的传输数据的类型、网络相应时间、吞吐量,利用率等网络特性不尽相同,所以要加以区分,具体情况具体分析。  而在Web负载特点方面,由于在对Web服务器进行评测时,一个非常关键的因素就是Web负载的选择。评测工具虽然有多种,但是它们都在选择负载上做足了功课。关于Web负载特点的研究主要目的就在于对Web服务器性能进行评测时,可以根据这些特点,选择模拟最真实的Web负载的评测工具以便获得最贴近事实的Web服务器性能评测数据,以便更好的对其进行分析和得出优化方案。2 Web应用服务器优化方法  Web应用优化方法  在对Web服务器进行优化时要根据真实的Web应用系统的情况和特征来采取有针对性地优化方案。首先根据不同的网络特性来看:在局域网中,降低M T U (最大传输单位)值对可以避免复制数据和求校验,而通过优化select系统调用或在Socket事件处理器中执行计算可以优化请求并发管理,利用HTTP1.1持续连接等都可以使系统性能得到相应的改善,但在广域网的环境下却没有什么大的作用,有的甚至恰恰相反。  例如:减少用户连接的MTU会增加服务器处理开销,采用网络延迟、带宽限制和使用HTTP1.1的持续连接在广域网中不会对服务器性能有什么大的影响。在广域网中,终端用户的请求的等待时间依赖于与网络延迟的程度,连接带宽限制情况。对于广域网,软硬中断在网络处理中占有很大的分量,所以采用适应的中断处理机制将会给服务器的响应能力带来很大的好处;将服务器定位在内核和将基于进程设计改为基于事务处理也可以不同程度的提高服务器的性能。  关于Web负载,除了对Web负载的特征进行分析以便在评测时更好地再现真实负载之外,还要考虑Web服务器所在的网络环境下负载的情况。人们不仅要求服务器满足正常的工作负载要求,而且在高峰时期依然要保持较高的吞吐量。但是,服务器在高负载的情况下的性能表现往往低于人们的期望。  服务器过载的情况分为两种:一种为瞬间过载,即服务器暂时的、短时间的超载,这种情况主要是由服务器负载的特点引起的。大量的研究表明,Web请求的网络通信量分布是自相似的,即Web请求的通信量可以在很大范围内有显著的变化。这就造成服务器常常短时间的超载,但这样情况持续的时间一般很短。一种是服务器长时间的超载,这种情况一般是由某一特殊事件引起的,例如服务器受到拒绝服务攻击或者发生了“活锁”现象。  第一种服务器超载情况是不可避免的,但第二种情况则可以通过对服务器改进来改善。抛开恶意的攻击不算,仔细分析服务器处理信息包的过程可以发现,造成系统在超载情况下性能下降的根本原因是高优先级处理阶段对CPU的不公平抢占。  因此,如果限制高优先级处理阶段对CPU的占用率,或者限制处理高优先级的CPU个数,都可以减轻或者消除收包活锁现象。具体的可以采用以下的方法:  一、采用轮询机制。为了减少中断对系统性能的影响,在负载正常的情况下采用“下半处理” 的方法就非常有效,而在高负荷情况下,采用这个方法仍然会造成活锁现象,这时可以采用轮询机制。虽然这个方法在负载正常的情况下会造成资源的浪费和响应速度降低,但在网络数据频繁到达服务器时就要比中断技术有效的多。  二、减少上下文切换。这种方法不管服务器在什么情况下对性能改善都很有效,这时可以采用引入核心级(kerne1—leve1)或硬件级数据流的方法来达到这个目的。核心级数据流是将数据从源通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程中因为数据在内存中,因此需要CPU操作数据。  硬件级数据流则是将数据从源通过私有数据总线或是虽等DMA通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程不需要CPU操作数据。这样在数据传输过程中不需要用户线程的介入,减少了数据被拷贝的次数,减少了上下文切换的开销。  三、减低中断的频率(主要是针对高负荷情况的方法)。这里主要有两种方法:批中断和暂时关闭中断。批中断可以在超载时有效的抑制活锁现象,但对服务器的性能没有什么根本性的改进;当系统出现接收活锁迹象时,可以采用暂时关闭中断的方法来缓和系统的负担,当系统缓存再次可用时可以再打开中断,但这种方法在接收缓存不够大的情况下会造成数据包丢失。  Web服务器性能是整个Web系统的关键环节,提高Web服务器的性能也是长久以来人们一直关注的课题。这里通过对Web服务器的工作原理和现有的优化方法和技术的分析,得出了对待Web服务器性能的提高也应该具体问题具体分析,要在具体的应用环境中,根据其特点来采取相应的优化措施。超文本传输协议(HTTP)是位于TCP/IP 协议的应用层,是最广为人知的协议,也是互连网中最核心的协议之一,同样,HTTP 也是基于 C/S 或 B/S 模型实现的。事实上,我们使用的浏览器如Netscape 或IE 是实现HTTP 协议中的客户端,而一些常用的Web 服务器软件如Apache、IIS 和iPlanet Web Server 等是实现HTTP 协议中的服务器端。Web 页由服务端资源定位,传输到浏览器,经过浏览器的解释后,被客户所看到。
Web 的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。
一个完整的HTTP协议会话过程包括四个步骤:
◆ 连接,Web浏览器与Web服务器建立连接,打开一个称为Socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功;
◆ 请求,Web浏览器通过Socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递);
◆ 应答,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面;
◆ 关闭连接,应答结束后Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
Java实现Web服务器功能的程序设计
根据上述HTTP协议的会话过程,本实例中实现了GET请求的Web服务器程序的方法,方法如下:
通过创建ServerSocket 类对象,侦听用户指定的端口(为8080),等待并接受客户机请求到端口。创建与Socket相关联的输入流和输出流,然后读取客户机的请求信息。若请求类型是GET,则从请求信息中获取所访问的HTML 文件名;如果HTML 文件存在,则打开HTML 文件,把HTTP 头信息和HTML 文件内容通过Socket 传回给Web浏览器,然后关闭文件,否则发送错误信息给Web 浏览器。最后关闭与相应Web 浏览器连接的Socket。
用Java编写Web服务器httpServer.java文件的源代码如下:
//httpServer.java
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.*;
public class httpServer{
public static void main(String args[]) {
ServerSocket server_
//读取服务器端口号
port = Integer.parseInt(args[0]);
catch (Exception e) {
port = 8080;
//监听服务器端口,等待连接请求
server_socket = new ServerSocket(port);
System.out.println(&httpServer running on port & +
server_socket.getLocalPort());
//显示启动信息
while(true) {
Socket socket = server_socket.accept();
System.out.println(&New connection accepted & +
socket.getInetAddress() +
&:& + socket.getPort());
//创建分线程
httpRequestHandler request =
new httpRequestHandler(socket);
Thread thread = new Thread(request);
//启动线程
thread.start();
catch(Exception e) {
System.out.println(e);
catch (IOException e) {
System.out.println(e);
}
}
class httpRequestHandler implements Runnable
{
final static String CRLF = &\r\n&;
// 构造方法
public httpRequestHandler(Socket socket) throws Exception
this.socket =
this.input = socket.getInputStream();
this.output = socket.getOutputStream();
new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 实现Runnable 接口的run()方法
public void run()
processRequest();
catch(Exception e) {
System.out.println(e);
private void processRequest() throws Exception
while(true) {
//读取并显示Web 浏览器提交的请求信息
String headerLine = br.readLine();
System.out.println(&The client request is &+headerLine);
if(headerLine.equals(CRLF) || headerLine.equals(&&))
StringTokenizer s = new StringTokenizer(headerLine);
String temp = s.nextToken();
if(temp.equals(&GET&)) {
String fileName = s.nextToken();
fileName = &.& + fileN
// 打开所请求的文件
FileInputStream fis =
boolean fileExists =
fis = new FileInputStream( fileName ) ;
catch ( FileNotFoundException e )
fileExists =
// 完成回应消息
String serverLine = &Server: a simple java httpServer&;
String statusLine =
String contentTypeLine =
String entityBody =
String contentLengthLine = &error&;
if ( fileExists )
statusLine = &HTTP/1.0 200 OK& + CRLF ;
contentTypeLine = &Content-type: & +
contentType( fileName ) + CRLF ;
contentLengthLine = &Content-Length: &
+ (new Integer(fis.available())).toString()
statusLine = &HTTP/1.0 404 Not Found& + CRLF ;
contentTypeLine = &text/html& ;
entityBody = &&HTML&& +
&&HEAD&&TITLE&404 Not Found&/TITLE&&/HEAD&& +
&&BODY&404 Not Found&
+&&br&usage:http://yourHostName:port/&
+&fileName.html&/BODY&&/HTML&& ;
// 发送到服务器信息
output.write(statusLine.getBytes());
output.write(serverLine.getBytes());
output.write(contentTypeLine.getBytes());
output.write(contentLengthLine.getBytes());
output.write(CRLF.getBytes());
// 发送信息内容
if (fileExists)
sendBytes(fis, output) ;
fis.close();
output.write(entityBody.getBytes());
//关闭套接字和流
output.close();
br.close();
socket.close();
catch(Exception e) {}
private static void sendBytes(FileInputStream fis, OutputStream os)
throws Exception
// 创建一个 1K buffer
byte[] buffer = new byte[1024] ;
int bytes = 0 ;
// 将文件输出到套接字输出流中
while ((bytes = fis.read(buffer)) != -1 )
os.write(buffer, 0, bytes);
private static String contentType(String fileName)
if (fileName.endsWith(&.htm&) || fileName.endsWith(&.html&))
return &text/html&;
return &fileName&;
编程技巧说明
◆ 主线程设计
主线程的设计就是在主线程httpServer 类中实现了服务器端口的侦听,服务器接受一个客户端请求之后创建一个线程实例处理请求,代码如下:
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.*;
public class httpServer{
public static void main(String args[]) {
ServerSocket server_
//读取服务器端口号
port = Integer.parseInt(args[0]);
catch (Exception e) {
port = 8080;
//监听服务器端口,等待连接请求
server_socket = new ServerSocket(port);
System.out.println(&httpServer running on port &
+server_socket.getLocalPort());
..........
..........
◆ 连接处理分线程设计
在分线程httpRequestHandler 类中实现了HTTP 协议的处理,这个类实现了Runnable 接口,代码如下:
class httpRequestHandler implements Runnable
{
final static String CRLF = &\r\n&;
// 构造方法
public httpRequestHandler(Socket socket) throws Exception
this.socket =
//得到输入输出流
this.input = socket.getInputStream();
this.output = socket.getOutputStream();
new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 实现Runnable 接口的run()方法
public void run()
processRequest();
catch(Exception e) {
System.out.println(e);
◆ 构建processRequest()方法来处理信息的接收和发送
作为实现Runnable 接口的主要内容,在run()方法中调用processRequest()方法来处理客户请求内容的接收和服务器返回信息的发送,代码如下:
private void processRequest() throws Exception
while(true) {
//读取并显示Web 浏览器提交的请求信息
String headerLine = br.readLine();
System.out.println(&The client request is &+ headerLine);
if(headerLine.equals(CRLF) || headerLine.equals(&&))
//根据请求字符串中的空格拆分客户请求
StringTokenizer s = new StringTokenizer(headerLine);
String temp = s.nextToken();
if(temp.equals(&GET&)) {
String fileName = s.nextToken();
fileName = &.& + fileN
.............
.............
在processRequest()方法中得到客户端请求后,利用一个StringTokenizer 类完成了字符串的拆分,这个类可以实现根据字符串中指定的分隔符(缺省为空格)将字符串拆分成为字串的功能。利用nextToken()方法依次得到这些字串;sendBytes()方法完成信息内容的发送,contentType()方法用于判断文件的类型。
显示Web页面
显示 Web 页面的index.html 文件代码如下:
&html&
&head&
&meta http-equiv=&Content-Language& content=&zh-cn&&
&meta name=&GENERATOR& content=&Microsoft FrontPage 5.0&&
&meta http-equiv=&Content-Type& content=&text/ charset=gb2312&&
&title&Java Web 服务器&/title&
&/head&
&body&
&p&********* &font color=&#FF0000&&欢迎你的到来!&/font&*********&/p&
&p&这是一个用 Java 语言实现的 Web 服务器&/p&
&hr&
&/body&
&/html&
为了测试上述程序的正确性,将编译后的httpServer.class、httpRequestHandler.class和上面的index.html文件置于网络的某台主机的同一目录中。
首先运行服务器程序 java httpServer 8080,服务器程序运行后显示端口信息“httpServer runing on port 8080”, 然后在浏览器的地址栏中输入http://localhost:8080/index.html,就可以正确显示网页,同时在显示“httpServer runing on port 8080 ”窗口中服务器会出现一些信息。
??????????????为什么说Tomcat是一个Web服务器而不是一个应用服务器 - ImportNew
很多程序员其实并不太在意他们所使用的一些基础软件设施。对于网络应用程序员来说,一个典型的例子就是:他们很难说清楚Web服务器和应用服务器有什么区别,也不太搞得清楚EAR和WAR部署包之间的不同。类似的例子还有很多。
对于“Web服务器和应用服务器之间的区别”这种问题,其实网上有很多精妙的回答,就是其中之一。在大多数情况下,Web服务器和应用服务器,这两个词语是基本等价的。这篇阐述了典型的Web服务器的工作原理。通常大家纠结的问题是:Tomcat(多被认为是Web服务器)怎么会有能力去运行企业级的应用程序。这样的话,Tomcat到底是Web服务器还是应用服务器?下面就让我来说说我自己的看法。
以前,我曾经在stackoverflow上看到一个让我很纠结的问题就是:到底有什么区别。我回复了这个问题,但是其中有一条回复让我对Java EE规范和Java EE服务器有了更深入和细致的理解。如果你能够了解这些细节,那么区分Web服务器和应用服务器就会变得非常简单。在我的研究过程中,我找到了,对这个问题进行了更深入的讨论。
通过更加细致的阅读JavaEE规范,会给我们的讨论带来更明晰的线索。我们知道,所谓的规范无非就是一套规则而已。也就是定义一些接口。任何一个JavaEE服务器都需要服从这些规范,并实现这些接口。你可以在找到那些“官方认证”的JavaEE服务器的清单。如果你把你的企业级应用程序(就是指使用到JPA,EJB或者其他JavaEE组件功能的应用程序)部署到一个符合JavaEE规范的服务器上,那么真正的应用服务器本身是不需要你的部署包包含对JavaEE组件进行实现的类库的。如果部署的时候你必须要通过自己的应用程序中自带jar文件来支持这些JavaEE组件,那你用的就是Web服务器,就像是Tomcat。
举个例子,如果你在你的程序里使用了JPA,然后你打算把程序部署到JBoss AS7服务器上,你的程序本身是不需要包含支持JPA实现的jar包的。但是如果你想把程序部署到Tomcat服务器上,你就必须要把实现JPA功能的jar包放到你的lib库中,然后再一起部署过去。这就是为什么JBoss AS7是应用服务器而Tomcat是Web服务器的原因。另一个关键的区别是,Tomcat上不能部署EAR文件,而。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
码农级科学家,半吊子艺术爱好者,逻辑和原则控。(新浪微博:)
eclipse安装插件总是不成功的错误提示总是让人痛不欲生
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2016 ImportNew1.3 为什么使用Web服务
本文所属图书&>&
本书是Web服务设计领域的经典著作,Amazon五星级畅销书,Web服务领域资深专家撰写,Maritn Fowler和Ian Robinson等大师级人物亲自作序推荐。本书不仅详细讲解了SOAP、WSDL、RESTful 3种Web服务API的风格和20多&&
通过使用Web服务,在不同类型的客户端(如移动设备、桌面PC、Web应用程序)之间重用和共享共用逻辑就会变得相对容易。Web服务能够触及的范围有可能非常广泛,因为它们依赖于普遍使用的开放标准,在不同的计算平台之间可以互操作,并且独立于底层的执行技术。所有的Web服务,至少都要使用HTTP,并利用一些数据交换标准(如XML、JSON)和常见的媒体类型。除此之外,Web服务可以按两种完全不同的方式来使用HTTP:一种是将HTTP作为一种应用协议,用于定义标准的服务行为;另一种只是简单地将HTTP作为一种传输数据的运输机制。无论如何,这两种Web服务都有助于快速应用集成,因为与之前的技术相比,它们更容易学习和实现。基于Web服务固有的互操作性和简单性,通过服务组合可以方便地创建复杂的业务处理。服务组合就是把多个较简单的服务组装成一个工作流,从而得到一个组合服务。
Web服务建立了一层屏障,很自然地将客户端和用于完成客户端请求的方法隔离开来(如图1.3所示)。这样,只要服务的公共接口不发生破坏性变化(breaking change),客户端和服务就可能在一定程度上互相独立地发展(有关破坏性变化的更多细节,可以参考7.2节)。例如,服务的开发人员可以重新设计服务,用开源库代替原来自己定制开发的库,而客户端不必为此进行修改。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'如何把自己的电脑做成web服务器!用自己的电脑建网站!让别人访问自己电脑上的网站
如何把自己的电脑做成web服务器,让别人能够访问自己的电脑,只需两步,就可以了!
一、【IIS 组件】、用来发布自己的网站,
二、【花生壳】、动态域名解析(DDNS)服务软件
如何让别人来访问自己的网站,况且又是在自己的电脑上呢,这时就需要【花生壳】了,花生壳是完全免费的动态域名解析(DDNS)服务软件,下载并成功安装动态域名客户端,然后凭您已注册的Oray护照成功登录,那么护照下所有激活花生壳服务的域名将与机器的公网IP绑定。您可以利用花生壳动态域名建立主机的远程接入应用,让互联网用户随时随地都可以通过域名找到您的机器的网络地址。
1) 为了测试,需要安装IIS ,如果还没安装的话,继续完成安装
2) 安装好了IIS后,
如果你还没网页的话可以自己做一个页面作为测试,如果自已有的话,
&&& 就 不用做了。
自己做个页面,步骤如下:
& a)在桌面上,新建一个文本文件
& b)在里面随便写点字,并保存。
c)用鼠标右击选择【重命名】。将文件的名字改成【index.htm】,文件将会变成IE浏览器的图标一样。
d)把文件复制到,【IIS的安装目录】,默认是C:\Inetpub\wwwroot,根据自身的情况而定。
打开浏览器,在地址栏数http://localhost/&&
如果看都刚刚输入的文字的内容,则表示 IIS 安装成功。
4)在浏览器地址栏输入http:// 加上 你的免费域名 如
也会看到同样的效果,则表示花生壳可以正常使用了,注意:域名前要加http://才可以访问
&注意:如果你的电脑安装有【杀毒软件】【防火墙】等防护软件的话,你把你的域名地址发给别人访问的时候,别人会打不开你的网页,这时候你需要把所有的防护软件【关闭】,就可以让别人来访问了。
当然前提是,你的花生壳客户端要【保持开启】,如果关闭同样也【无法访问】。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 个人web服务器 的文章

 

随机推荐