Tomcat服务器常用配置和HTTP简介

系统 1812 0

Web服务器常用配置
1.Web系统采用B/S结构通信的:Browser --- Server
1)浏览器向服务器发送访问目标资源请求(请求)
2)服务器根据请求的目标资源路径,在服务器端进行查找(请求查找)
3)服务器会将查找结果返回给客户端浏览器(响应)
通信结构图:

Tomcat服务器常用配置和HTTP简介

2.什么是Web服务器?
包括硬件环境和软件环境,在网络中安装web服务器软件的计算机
3.Tomcat服务器安装和配置
1)在Apache官网上下载tomcat服务器
*一般采用zip格式的(可直接解压使用)
2)解压缩tomcat
*不要使用含有空格和中文目录的文件夹
3)启动tomcat之前,配置JAVA_HOME环境变量 ---- 配置JDK安装路径
*注意JAVA_HOME使用下划线
4)启动tomcat服务器
双击bin/startup.bat(如果使用linux双击bin/startup.sh)
输入http://localhost:8080/ 访问tomcat网站主页
5)因为网站通过HTTP协议访问,HTTP协议默认端口80 ---- 修改tomcat服务器启动端口80
修改conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />  将8080修改为80
访问localhost:80端口  ----- 省略端口写法 http://localhost访问站点
4.tomcat启动问题
1)窗口一闪然后消失 ----- 编辑startup.bat,在文件末尾加入pause指令,再次运行,读取错误原因,根据原因解决
*JAVA_HOME路径必须是JDK不可以是JRE
2)端口占用问题
发现端口被占用后,通过cmd命令行,查看占用端口进程 ----  netstat –ano
在任务管理器关闭该进程
3)CATALINA_HOME环境变量
指定tomcat安装位置(该环境变量可以不配置) ----  如果配置出错,tomcat将无法启动

5.各种版本对应问题
Tomcat版本    Servlet/JSP版本    JavaEE版本    运行环境
4.1              2.3/1.2            1.3            JDK1.3
5.5              2.4/2.0            1.4            JDK1.4
6.0              2.5/2.1            5.0            JDK5.0
7.0              3.0/2.2            6.0            JDK6.0
Tomcat 支持Servlet和JSP规范,Servlet技术属于JavaEE规范 
* 随着javaEE 版本提升 -- Servlet版本提升 --- 运行Servlet环境Tomcat版本提升 
* tomcat运行需要JDK 环境版本 

如果编写 JavaEE5.0工程 需要哪个版本tomcat可以运行? 6.0 7.0

6.Tomcat目录结构
bin --- 存放tomcat启动关闭程序
conf --- 存放tomcat配置文件
lib --- tomcat运行需要jar包
logs --- tomcat日志文件
webapps --- 网站发布目录(所有网站可以发布到该目录)
work --- 存放工程运行时,产生数据文件(JSP翻译Servlet、Session持久化数据)
7.网站的标准目录结构
站点根目录
    -------  静态web资源、jsp
    -------  WEB-INF目录
                  -------  classes目录 (保存,class文件)
                  --------  lib  目录 (当前网站需要jar包) 
                  -------- web.xml (网站配置文件)
* WEB-INF目录不是必须的,没有java动态程序代码, 可以没有WEB-INF 目录
* WEB-INF目录下资源不能被浏览器直接访问
8.网站开发好后,如果想让网站被外界访问,需要将网站发布到 web服务器tomcat上 (虚拟目录映射)
Tomcat发布网站三种方式
原理:
配置<Context>元素
1)配置tomcat/conf/server.xml
在<Host name=”localhost”>内部添加<Context>元素
<Context path="/aa" docBase="C:\AA" /> ---- 为网站配置虚拟目录 /aa ------映射到 c:\AA目录
*修改server.xml 重启tomcat
2)$CATALINA_HOME/conf/[enginename]/[hostname]/xxx.xml
    tomcat/conf/Catalina/localhost/xxx.xml
    在conf下新建Catalina
在Catalina下新建 localhost
在localhost下 新建 bb.xml 
<Context docBase="C:\BB" /> --- 为什么不需要写path --- 虚拟目录就是文件名bb ,path默认/bb
*添加bb.xml,不用重启tomcat
*推荐第二种写法(不需要重启服务器,而且出错不会影响其它工程运行),尽量不要使用第一种
3)将网站复制到tomcat/webapps
*不用重启tomcat
*tomcat会根据文件夹名称,自动生成虚拟路径
9.虚拟目录?
当浏览器访问网站采用访问路径 /aa /bb /abc ----- 这些路径不一定是服务器真实存在目录,只是浏览器在访问这些路径时,映射到指定网站跟目录
10.WAR包制作?
先用压缩软件将网站制作xx.zip --- 重命名 xx.wat ---- 复制war到tomcat/webapps
11. Tomcat Manager 使用 (程序员管理已经发布到tomcat网站)
*conf/tomcat-users.xml  加入
<role rolename="manager"/>
<user username="tomcat" password="s3cret" roles="manager"/>
* 重启服务器 
* 这个功能默认不要开启 (安全问题)

12.域名解析完整过程图:

在tomcat内部同时 架设多个网站 --- 百度网站、谷歌网站 
* 虚拟主机技术  ---- 在tomcat中配置 <Host> 元素 
1)搭建tomcat中网站 --- baidu
2)在c盘 新建虚拟主机目录 baidu , 在虚拟主机目录中新建网站根目录 main , 将百度网站复制main 目录中
3)在tomcat中新建

      
        <
      
      
        Host
      
      
        >
      
      
         

Host name="www.baidu.com"  appBase="C:\baidu"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


      
      
        </
      
      
        Host
      
      
        >
      
    

* 重启tomcat
4)修改本机hosts文件 
* win7 系统 ,将hosts文件复制到桌面修改,改后复制回去 
192.168.1.145   www.baidu.com
5)将c:\baidu\main 网站根目录 配置为缺省虚拟目录

      
        <
      
      
        Context 
      
      
        path
      
      
        =""
      
      
         docBase
      
      
        ="main"
      
      
        />
      
    

----- 配置缺省虚拟目录 /main 省略 
http://www.baidu.com/baidu.htm ---- 访问本机百度 
6)将main目录 baidu.htm 配置 网站欢迎页面 
新建WEB-INF目录 下新建web.xml

      
        <?
      
      
        xml version="1.0" encoding="ISO-8859-1"
      
      
        ?>
      
      
        <
      
      
        web-app 
      
      
        xmlns
      
      
        ="http://java.sun.com/xml/ns/javaee"
      
      
        

    xmlns:xsi
      
      
        ="http://www.w3.org/2001/XMLSchema-instance"
      
      
        

    xsi:schemaLocation
      
      
        ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      
      
        

    version
      
      
        ="2.5"
      
      
        >
      
      
        <
      
      
        welcome-file-list
      
      
        >
      
      
        <
      
      
        welcome-file
      
      
        >
      
      baidu.htm
      
        </
      
      
        welcome-file
      
      
        >
      
      
        </
      
      
        welcome-file-list
      
      
        >
      
      
        </
      
      
        web-app
      
      
        >
      
    

hosts应用
1、限制用户上网 ,网站禁止访问
2、软件破解

13.缺省虚似主机 DefaultHost 
<Engine name="Catalina" defaultHost="localhost"> ----- 一个tomcat中可以配置多台虚拟主机,但是只有一台虚拟主机。客户端可以直接通过ip访问
http://www.baidu.com ---- 客户端通过域名访问
http://192.168.1.145 ---- 通过ip访问 

只有缺省虚拟主机可以通过ip访问

14. MyEclipse 整合 tomcat 进行 web 程序开发 
1)配置myeclipse 内部tomcat 插件
配置tomcat6 在 window - preferences -- tomcat6 
检查JDK 版本是否符合
Launch 默认采用 debug model 
2)将tomcat插件设置为enable  浏览tomcat目录后 配置ok
3)在MyEclipse中通过插件 tomcat6 --- start  实际上 运行tomcat/bin/startup.bat 
4)在console窗口 查看tomcat日志 
* tomcat6 --- stop server 正常关闭tomcat  调用 tomcat/bin/shutdown.bat 
* 如果直接点击 myeclipse console 窗口 红色按钮 --- 强行停止tomcat 

应用:
在myeclipse中编写一个web工程
1)创建web project
context root url 默认工程名 
Javaee 规范版本 
* 在使用javaee5 规范版本时,默认支持jstl技术
2)新建html 将html编辑器 设置 html editor 
window -- preference ---- general ---- editor --- File Associations 
3)发布工程到tomcat 
原理:将当前web工程复制tomcat/webapps 
* 修改 发布虚拟目录名称 --- 右键工程属性 --- myeclipse ---web ----修改Web Context-root

HTTP协议
1.HTTP协议特征
1)基于TCP传输协议
OSI七层网络体系结构
TCP是传输层协议
HTTP是应用层协议,基于TCP协议

TCP特征:三层握手
例如
A给B说话:能听到我说话吗?
B回应:我能听到,能听到我说话吗?
A回应:我也能听到

确保通信畅通 ----  数据传输不允许丢包
A给B发数据,如果B没有回应,A选择重新发送 ----- 超时
2)默认端口80
3)基于请求 – 响应模式的协议
先请求,在出现响应 ----- 请求和响应一一对应

2.两个实验
实验一 : 通过telnet 连接服务器,进行协议操作 
XP 自动安装telnet 
win7 系统 安装telnet插件 
* telnet 采用 传输层连接原理方式  通信内容必须严格按照应用层协议 
语法:telnet ip port 
1、 cmd> telnet localhost 80 
2、手动输入HTTP协议请求 
telnet乱码解决:ctrl+] 回车
3、输入协议内容
GET / HTTP/1.0
HOST: localhost
回车

实验二  : 安装Httpwatch
完成访问web页面时 http协议数据包 抓取 
3.查看网络连接过程中 http协议内容
请求内容
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
Accept-Language: zh
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive

响应内容
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"7347-1184876416000"
Last-Modified: Thu, 19 Jul 2007 20:20:16 GMT
Content-Type: text/html
Content-Length: 7347
Date: Sat, 09 Jun 2012 07:02:35 GMT

<?xml version="1.0" encoding="ISO-8859-1"?>

...
4.HTTP和HTML关系?
HTTP通信协议,规定数据传输格式
HTML网页设计语言,静态网页数据
HTTP 传输格式、 HTML传输内容
5.HTTP/1.0、HTTP/1.1区别?
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源
HTTP1.1协议,运行客户端与web服务器建立连接后,在一个连接上获取多个web资源
6.一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求?
*三幅图片地址是否相同
如果三幅图片地址都不相同 --- 4次请求

HTTP请求
请求完整格式包括三个部分:请求行、头信息、请求体
1.请求行:请求中第一行信息 --- 包括三个部分  请求方式、资源路径、HTTP协议版本
例如:GET / HTTP/1.1
HTTP请求方式有七种:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用两种:GET、POST
1)客户端网页哪些是GET方式请求?哪些是POST请求
GET方式:1、用户直接在浏览器上手动输入url地址 2、<a href="url"></a> 
3、<form method="get">   *form表单默认提交方式就是get
POST方式:1、<form method="post">
2)GET提交方式和POST提交方式区别?
GET提交方式后携带数据有大小限制1K,提交数据在url上显示
*http://localhost/day04/url?username=zhangsan 格式 url?name=value&name=value&name=value... 
以?分隔url和参数,参数采用键值对格式,多个参数使用&符号分隔
POST数据在请求体重,不再url上显示,没有数据大小限制
*uesrname=zhangsang 请求体和信息头直接存在一个空行
2.头信息
Accept: text/html,image/*   ----- 客户端可以接收文件类型 text/html->HTML文件 image/* 任意格式图片
Accept-Charset: ISO-8859-1 ----- 客户端可以识别编码字符集
Accept-Encoding: gzip ----- 客户端可以识别压缩数据格式,gzip是一种压缩格式
Accept-Language:zh-cn ----- 客户端浏览器语言
Host: www.itcast.com:80  ----- 访问服务器地址 
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT ----- 该请求的资源在客户端保存最后访问时间(缓存有关)
Referer: http://www.itcast.com/index.jsp ---- 上一次请求访问页面
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) ---- 客户端浏览器类型版本 
Connection: close/Keep-Alive    ---- 该请求连接后,连接是保持还是关闭 1.0关闭 1.1保持
Date: Tue, 11 Jul 2000 18:23:51 GMT ---- 请求时间
3.请求体:存放客户端提交post请求数据
key=value&key=value&key=value ....  
例如:username=sss
4.Referer防止客户盗链数据
eg:模拟浏览器访问服务器获得refererServlet当中信息
1)URL连接 --- HTTP协议
2)Socket连接 --- TCP协议

eg:

      
        package
      
      
         cn.lsl.servlet;




      
      
        import
      
      
         java.io.IOException;


      
      
        import
      
      
         java.io.PrintWriter;




      
      
        import
      
      
         javax.servlet.ServletException;


      
      
        import
      
      
         javax.servlet.http.HttpServlet;


      
      
        import
      
      
         javax.servlet.http.HttpServletRequest;


      
      
        import
      
      
         javax.servlet.http.HttpServletResponse;




      
      
        public
      
      
        class
      
       RefererServlet 
      
        extends
      
      
         HttpServlet {



    

    
      
      
        public
      
      
        void
      
      
         doGet(HttpServletRequest request, HttpServletResponse response)

            
      
      
        throws
      
      
         ServletException, IOException {

        String referer 
      
      = request.getHeader("referer");     
      
        //
      
      
        获得头信息
      
      

        response.setContentType("text/html;charset=gbk"
      
        );

        
      
      
        if
      
      (referer == 
      
        null
      
       || !referer.startsWith("http://localhost"
      
        )){

            
      
      
        //
      
      
        盗链
      
      

            response.getWriter().println("盗链!"
      
        );

            
      
      
        return
      
      
        ;

        }
      
      
        else
      
      
        {

            response.getWriter().println(
      
      "XX网站欢迎您。。。。"
      
        );

        }

    }



    

    
      
      
        public
      
      
        void
      
      
         doPost(HttpServletRequest request, HttpServletResponse response)

            
      
      
        throws
      
      
         ServletException, IOException {

        doGet(request, response);

    }



}
      
    

直接输入网址,则会被当做盗链
从该网站的某个页面点进去则能正常访问

      
        <%
      
      
        @ page language
      
      
        =
      
      
        "
      
      
        java
      
      
        "
      
      
         import
      
      
        =
      
      
        "
      
      
        java.util.*
      
      
        "
      
      
         pageEncoding
      
      
        =
      
      
        "
      
      
        ISO-8859-1
      
      
        "
      
      
        %>
      
      
        <!
      
      
        DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
      
      
        >
      
      
        <
      
      
        html
      
      
        >
      
      
        <
      
      
        head
      
      
        >
      
      
        </
      
      
        head
      
      
        >
      
      
        <
      
      
        body
      
      
        >
      
      
        <
      
      
        a 
      
      
        href
      
      
        ="referer"
      
      
        >
      
      link
      
        </
      
      
        a
      
      
        >
      
      
        </
      
      
        body
      
      
        >
      
      
        </
      
      
        html
      
      
        >
      
    

模拟客户端,绕过防盗链逻辑,获得需要信息

      
        package
      
      
         cn.lsl.servlet;


      
      
        import
      
      
         java.io.InputStream;


      
      
        import
      
      
         java.net.URL;


      
      
        import
      
      
         java.net.URLConnection;




      
      
        public
      
      
        class
      
      
         URLTest {

    
      
      
        public
      
      
        static
      
      
        void
      
       main(String[] args) 
      
        throws
      
      
         Exception {

        
      
      
        //
      
      
        创建URL对象
      
      

        URL url = 
      
        new
      
       URL("http://localhost:8080/HTTPTest/referer"
      
        );

        
      
      
        //
      
      
        链接目标资源
      
      

        URLConnection connection=
      
         url.openConnection();

        connection.addRequestProperty(
      
      "referer", "http://localhost/index.jsp"
      
        );

        
      
      
        //
      
      
        获得网站输入流
      
      

        InputStream in =
      
         connection.getInputStream();

        
      
      
        byte
      
      [] buf = 
      
        new
      
      
        byte
      
      [1024
      
        ];

        in.read(buf);    
      
      
        //
      
      
        将流数据读取buf中
      
      
        for
      
      (
      
        byte
      
      
         b : buf){

            System.out.write(b);

        }

        System.out.flush();

    }

}
      
    

HTTP响应
响应数据 分为三个部分:状态行、头信息、响应体
1.状态行分为三个部分:HTTP协议版本、状态码、描述信息
例如:HTTP/1.1 200 OK
100~199 Informational 请求信息不足,还需要其他信息才能处理
200~299 Success 请求处理成功
300~399 Redirection 服务器已经处理完毕,客户端还需要进一步动作
400~499 Client Error 客户端错误
500~599 Server Error 服务器端错误

200 请求处理成功 302 客户端进行重定向 304 客户端访问资源没有被修改后,客户端访问本地缓存
404 访问资源不存在 500 服务器内部出错
2.响应头
Location: http://www.it315.org/index.jsp ---- 重定向地址 结合302一起使用
*重定向两次请求,两次响应
Server:apache tomcat ----- 服务器类型 
Content-Encoding: gzip ---- 设置响应数据压缩格式
*如果响应数据经过压缩,传输体积更小,性能更好
例如:
在没有压缩情况下,13605字节 http://localhost/docs/
如何设置tomcat压缩
*通过设置tomcat/conf/server.xml设置响应数据压缩
<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" compressableMimeType="text/html,text/xml,text/plain" compression="on"/>
清楚浏览器缓存,重启tomcat
4244字节 http://localhost/docs
Content-Length: 80  ----- 响应数据长度
Content-Language: zh-cn  ----- 响应数据语言
Content-Type: text/html; charset=GB2312  ----- 响应数据类型
*数据类型采用Mime协议规定类型  html文件 ---- text/html、jpg文件 ---- image/jpeg
*在tomcat/conf/web.xml中查看文件mime类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  ----- 和请求头信息If-Modified-Since一起使用,控制服务器缓存
* ETag: W/"13397-1184876416000" tomcat生成Etag 13397文件大小 1184876416000文件最后修改时间(精确毫秒)
* 客户端下次请求时通过If-None-Match 携带刚刚 Etag信息
Refresh: 1;url=http://www.it315.org ----- 网页自动跳转
Content-Disposition: attachment; filename=aaa.zip ----- 文件下载时指定文件附件名称
控制该程序在客户端不缓存(以下三个一起使用)
Expires: -1 
Cache-Control: no-cache  
Pragma: no-cache  
*对于动态程序,经常修改,禁止浏览器缓存内容
Connection: close/Keep-Alive   ---- 响应后连接是否关闭
Date: Tue, 11 Jul 2000 18:23:51 GMT --- 响应时间
3.响应体
通常为HTML文件内容 --- 如果设置响应体进行gzip压缩,看到gzip压缩内容

重定向:

eg:

      
        package
      
      
         cn.lsl.servlet;




      
      
        import
      
      
         java.io.IOException;


      
      
        import
      
      
         java.io.PrintWriter;




      
      
        import
      
      
         javax.servlet.ServletException;


      
      
        import
      
      
         javax.servlet.http.HttpServlet;


      
      
        import
      
      
         javax.servlet.http.HttpServletRequest;


      
      
        import
      
      
         javax.servlet.http.HttpServletResponse;




      
      
        public
      
      
        class
      
       RedirectServlet 
      
        extends
      
      
         HttpServlet {



    
      
      
        public
      
      
        void
      
      
         doGet(HttpServletRequest request, HttpServletResponse response)

            
      
      
        throws
      
      
         ServletException, IOException {

        response.setStatus(
      
      302
      
        );

        response.setHeader(
      
      "Location", "index.jsp");  
      
        //
      
      
        重定向index.jsp
      
      
            }



    

    
      
      
        public
      
      
        void
      
      
         doPost(HttpServletRequest request, HttpServletResponse response)

            
      
      
        throws
      
      
         ServletException, IOException {

        doGet(request,response);

    }



}
      
    

设置浏览器不缓存

eg:

      
        package
      
      
         cn.lsl.servlet;




      
      
        import
      
      
         java.io.IOException;


      
      
        import
      
      
         java.io.PrintWriter;




      
      
        import
      
      
         javax.servlet.ServletException;


      
      
        import
      
      
         javax.servlet.http.HttpServlet;


      
      
        import
      
      
         javax.servlet.http.HttpServletRequest;


      
      
        import
      
      
         javax.servlet.http.HttpServletResponse;




      
      
        public
      
      
        class
      
       NoCacheServlet 
      
        extends
      
      
         HttpServlet {



    
      
      
        public
      
      
        void
      
      
         doGet(HttpServletRequest request, HttpServletResponse response)

            
      
      
        throws
      
      
         ServletException, IOException {

        
      
      
        //
      
      
        需要三句禁止缓存,防止浏览器兼容问题
      
      

        response.setDateHeader("expires", -1
      
        );

        response.setHeader(
      
      "Cache-Control", "no-cache"
      
        );

        response.setHeader(
      
      "Pragma", "no-cache"
      
        );

        response.getWriter().println(
      
      "aabbcc"
      
        );

    }



    

    
      
      
        public
      
      
        void
      
      
         doPost(HttpServletRequest request, HttpServletResponse response)

            
      
      
        throws
      
      
         ServletException, IOException {

        doGet(request,response);

    }



}
      
    

通过HTTP协议Range头信息,实现断点下载功能
在连接服务器目标资源进行下载过程中,传递Range头信息,指定下载目标资源部分内容  ---  实现断点下载功能
断点下载:使用URL类模拟客户端访问WebRoot/info.txt,下载文件中内容

      
        package
      
      
         cn.lsl.servlet;


      
      
        import
      
      
         java.io.FileOutputStream;


      
      
        import
      
      
         java.io.InputStream;


      
      
        import
      
      
         java.io.OutputStream;


      
      
        import
      
      
         java.net.URL;


      
      
        import
      
      
         java.net.URLConnection;




      
      
        public
      
      
        class
      
      
         RangeTest {

    
      
      
        //
      
      
        通过Range头信息实现断点下载
      
      
        public
      
      
        static
      
      
        void
      
       main(String[] args) 
      
        throws
      
      
         Exception {

        URL url 
      
      = 
      
        new
      
       URL("http://localhost:8080/HTTPTest/info.txt"
      
        );

        URLConnection connection 
      
      =
      
         url.openConnection();

        
      
      
        //
      
      
        通过addRequestProperty添加头信息,Range实现断点下载
      
      

        connection.addRequestProperty("Range", "bytes=100-"
      
        );

        InputStream in 
      
      =
      
         connection.getInputStream();

        OutputStream out 
      
      = 
      
        new
      
       FileOutputStream("download.txt"
      
        );

        
      
      
        byte
      
      [] buf = 
      
        new
      
      
        byte
      
      [1024
      
        ];

        
      
      
        int
      
      
         len;

        
      
      
        while
      
      ((len = in.read(buf)) != -1
      
        ){

            out.write(buf, 
      
      0
      
        , len);

        }

        in.close();

        out.close();

    }

}
      
    

Tomcat服务器常用配置和HTTP简介


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论