<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Web on ZRJ | 学习笔记</title>
        <link>https://blog.zrj.me/tags/web/</link>
        <description>Recent content in Web on ZRJ | 学习笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sat, 18 Aug 2012 17:34:51 +0800</lastBuildDate><atom:link href="https://blog.zrj.me/tags/web/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Apache ab 压力测试</title>
        <link>https://blog.zrj.me/posts/2012-08-18-apache-ab-%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/</link>
        <pubDate>Sat, 18 Aug 2012 17:34:51 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-08-18-apache-ab-%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/</guid>
        <description>&lt;p&gt;apache 的 ab 真的是非常容易用，直接的说，就是下面这条命令就够了&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:Program FilesApache Software FoundationApache2.2bin&amp;gt;ab -n 100 -c 10 http://localhost/index2.html
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里我 index 的 html 文件就是 apache 的 it works 文件，在我的机子上，测试结果的吞吐率是 2000 多，应该算是比较低的一个数字了，对于这么简单的文本来说，正式的服务器，应该有 5000 左右，不过我的平台是 Windows 嘛。。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:Program FilesApache Software FoundationApache2.2bin&amp;gt;ab -n 100 -c 10 http:/
/localhost/index2.html
This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        localhost
Server Port:            80

Document Path:          /index2.html
Document Length:        44 bytes

Concurrency Level:      10
Time taken for tests:   0.049 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      32000 bytes
HTML transferred:       4400 bytes
Requests per second:    2040.69 [#/sec] (mean)
Time per request:       4.900 [ms] (mean)
Time per request:       0.490 [ms] (mean, across all concurrent requests)
Transfer rate:          637.72 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.4      0       1
Processing:     2    4   2.5      3      20
Waiting:        1    4   2.5      3      19
Total:          2    5   2.5      4      20

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      5
  80%      6
  90%      8
  95%      8
  98%      9
  99%     20
 100%     20 (longest request)

C:Program FilesApache Software FoundationApache2.2bin&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;对于一个打印 phpinfo 的 php 页面来说，成绩就更加惨不忍睹了，只有 90 多&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:Program FilesApache Software FoundationApache2.2bin&amp;gt;ab -n 100 -c 10 http:/
/localhost/index2.php
This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        localhost
Server Port:            80

Document Path:          /index2.php
Document Length:        67839 bytes

Concurrency Level:      10
Time taken for tests:   1.015 seconds
Complete requests:      100
Failed requests:        45
   (Connect: 0, Receive: 0, Length: 45, Exceptions: 0)
Write errors:           0
Total transferred:      6801290 bytes
HTML transferred:       6783990 bytes
Requests per second:    98.57 [#/sec] (mean)
Time per request:       101.454 [ms] (mean)
Time per request:       10.145 [ms] (mean, across all concurrent requests)
Transfer rate:          6546.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.2      0       8
Processing:     3   50 153.5     15    1012
Waiting:        3   49 153.6     13    1011
Total:          3   51 153.4     15    1012

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     18
  75%     21
  80%     25
  90%     88
  95%    348
  98%   1012
  99%   1012
 100%   1012 (longest request)

C:Program FilesApache Software FoundationApache2.2bin&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;那么，如果我们把 it work 用 php echo 出来呢，就是说，送进 php 解释器里面转一圈，来看看，依然只有 90 多&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:Program FilesApache Software FoundationApache2.2bin&amp;gt;ab -n 100 -c 10 http:/
/localhost/index3.php
This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        localhost
Server Port:            80

Document Path:          /index3.php
Document Length:        8 bytes

Concurrency Level:      10
Time taken for tests:   1.049 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      18100 bytes
HTML transferred:       800 bytes
Requests per second:    95.32 [#/sec] (mean)
Time per request:       104.906 [ms] (mean)
Time per request:       10.491 [ms] (mean, across all concurrent requests)
Transfer rate:          16.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       1
Processing:     2   18  99.6      8    1004
Waiting:        2   18  99.7      8    1004
Total:          2   19  99.6      9    1004

Percentage of the requests served within a certain time (ms)
  50%      9
  66%      9
  75%     10
  80%     11
  90%     13
  95%     14
  98%     31
  99%   1004
 100%   1004 (longest request)

C:Program FilesApache Software FoundationApache2.2bin&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;再来看看 php 访问数据库的时候的成绩，访问数据我们就用一条 select 语句，php 代码如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mysql_connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;die&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mysql_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mysql_select_db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mailbox&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mysql_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;set names gbk&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysql_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;select * from mail where id = 118593&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$row&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysql_fetch_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;算是非常中规中矩的读取了，结果如下，吞吐率只有 80 多&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:Program FilesApache Software FoundationApache2.2bin&amp;gt;ab -n 100 -c 10 http:/
/localhost/index4.php
This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        localhost
Server Port:            80

Document Path:          /index4.php
Document Length:        6108 bytes

Concurrency Level:      10
Time taken for tests:   1.157 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      628100 bytes
HTML transferred:       610800 bytes
Requests per second:    86.43 [#/sec] (mean)
Time per request:       115.707 [ms] (mean)
Time per request:       11.571 [ms] (mean, across all concurrent requests)
Transfer rate:          530.12 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.4      0       1
Processing:     6  100 301.8     10    1154
Waiting:        6   99 301.8     10    1154
Total:          6  100 301.7     11    1154

Percentage of the requests served within a certain time (ms)
  50%     11
  66%     16
  75%     16
  80%     16
  90%     22
  95%   1145
  98%   1153
  99%   1154
 100%   1154 (longest request)

C:Program FilesApache Software FoundationApache2.2bin&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;那么，如果我们用 apache 把 php 的结果缓存起来呢？这个想法非常赞，可惜我这里配的是 apache fastcgi php 的模式，简单 google 了一下并没有发现相关的文章，倒是 nginx fastcgi php 的缓存有很多的讨论，也是，人家本来就是做反向代理的嘛，不过，根据高性能 web 那本书的记载，应该是可以有 5 倍左右的提升的，还是很垂涎的，呵呵。强烈推荐这本高性能 web 的书，&lt;a class=&#34;link&#34; href=&#34;http://book.douban.com/subject/3924175/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://book.douban.com/subject/3924175/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后插播一下，对于一台 debian 的虚拟机，成绩其实没有想象中的飞跃，这台虚拟机开的内存是 256，一样请求一个静态文件，结果如下，顺便一提，虚拟机里面跑着的是 nginx，不是 apache&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:Program FilesApache Software FoundationApache2.2bin&amp;gt;ab -n 1000 -c 10 http:
//192.168.128.133:8080/index.html
This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.128.133 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        Apache/2.2.20
Server Hostname:        192.168.128.133
Server Port:            8080

Document Path:          /index.html
Document Length:        12 bytes

Concurrency Level:      10
Time taken for tests:   0.632 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      297000 bytes
HTML transferred:       12000 bytes
Requests per second:    1582.19 [#/sec] (mean)
Time per request:       6.320 [ms] (mean)
Time per request:       0.632 [ms] (mean, across all concurrent requests)
Transfer rate:          458.90 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.5      1       2
Processing:     1    6   1.1      6      19
Waiting:        0    4   1.5      4      17
Total:          2    6   1.1      6      20

Percentage of the requests served within a certain time (ms)
  50%      6
  66%      6
  75%      6
  80%      7
  90%      7
  95%      8
  98%      9
  99%     10
 100%     20 (longest request)

C:Program FilesApache Software FoundationApache2.2bin&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description>
        </item>
        <item>
        <title>Apache 控制台输出</title>
        <link>https://blog.zrj.me/posts/2012-08-15-apache-%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BE%93%E5%87%BA/</link>
        <pubDate>Wed, 15 Aug 2012 16:19:15 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-08-15-apache-%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BE%93%E5%87%BA/</guid>
        <description>&lt;p&gt;在 wamp 套装中，apache 的错误日志一般是放在这样的路径下，D:Documentscodewamplogs ，这个错误日志在大多数时候是可以帮助排查错误的，但是，如果在改写 httpd.conf 文件过程中出错了话，那么在 wamp 中启动 apache 是直接就启动不起来的，错误日志也没有，这个时候可以通过控制台，直接定位到 apache 的 httpd 程序，在那里，可以看到明确的错误提示， httpd 的程序一般在 D:DocumentscodewampbinapacheApache2.2.17bin 类似的目录下面&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/08/Unnamed-QQ-Screenshot20120815161702.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/Unnamed-QQ-Screenshot20120815161702.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>iframe 中元素的居中问题</title>
        <link>https://blog.zrj.me/posts/2012-08-10-iframe-%E4%B8%AD%E5%85%83%E7%B4%A0%E7%9A%84%E5%B1%85%E4%B8%AD%E9%97%AE%E9%A2%98/</link>
        <pubDate>Fri, 10 Aug 2012 00:07:19 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-08-10-iframe-%E4%B8%AD%E5%85%83%E7%B4%A0%E7%9A%84%E5%B1%85%E4%B8%AD%E9%97%AE%E9%A2%98/</guid>
        <description>&lt;p&gt;今晚在折腾 iframe 中元素的居中问题，问题是这样的：在腾讯开放平台上的应用，嵌入平台是使用 iframe 的方式，当一个应用的高度比较长的时候，需要滚动屏幕，那么有两种选择，一种是父级窗口不产生滚动条，在子框架上产生滚动条，另外一种，就是及时的加长 iframe 框架的高度，让框架能够容纳里面的全部内容，从而子框架上可以不出现滚动条，那么就是父级窗口出现滚动条。&lt;/p&gt;
&lt;p&gt;问题出在使用的一个叫 fancybox 的 jquery 插件上，这个插件的作用是生成一个浮层，可以用来显示一些图片组啊，或者地图，或者外部视频等等之类的内容，应该说，这个插件还是不错的，只可惜我们应用的场景比较奇葩。他生成的浮层窗口，是相对于当前页面的可视窗口部分居中的，这个特性在一般的情况下没有问题，但是，如果页面是被嵌在一个 iframe 中的话，那么，就会造成他计算出错，从而，浮层窗口是生成在框架页面的中间，如果框架页面很长的话，就会造成浮层窗口父级窗口的可视窗口以下，需要滚动父级窗口才能看到。&lt;/p&gt;
&lt;p&gt;我本身前端也就是水一水的水平，遇到问题大概想了想，没有什么非常有把握的思路，于是就 google ，看到这里有讨论，&lt;a class=&#34;link&#34; href=&#34;https://groups.google.com/forum/?fromgroups#!topic/fancybox/KPq4mAQn2qc%5B1-25%5D&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://groups.google.com/forum/?fromgroups#!topic/fancybox/KPq4mAQn2qc%5B1-25%5D&lt;/a&gt;，这位仁兄给了一个方法&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have the same problem: a page includes an iframe that is pretty long and scrollable and inside that iframe I open a fancybox (which also includes yet another iframe, but this is irrelevant here). Fancybox calculates the center of the iframe inside which it has to display itself and positions quite low on the screen because the iframe is long. I&amp;rsquo;d like it to be positioned in the center of the browser viewport instead. What I found to (somewhat) work is to use this callback when defining the attributes of fancybox (using version 1.3.1):&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;onComplete&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#fancybox-wrap&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;css&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;s1&#34;&gt;&amp;#39;top&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;10px&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;s1&#34;&gt;&amp;#39;left&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;10px&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;})}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;It works - moves the fancybox where I want it inside the iframe, but one problem is that it first shows it in the original position and then repositions it which is mildly annoying. I haven&amp;rsquo;t found a good way to show it in the position I want it when it first gets drawn. Replacing &amp;lsquo;onComplete&amp;rsquo; with &amp;lsquo;onStart&amp;rsquo; doesn&amp;rsquo;t do anything. I guess one way would be to have somehow make it invisible on onStart and then make it visible on onComplete when it has been repositioned. Any suggestions would be appreciated!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;思路倒也算是清晰易懂，可惜随后就被楼下的另一位仁兄踢馆了，囧&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Not that obvious. &lt;a class=&#34;link&#34; href=&#34;http://fancybox.net/faq&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://fancybox.net/faq&lt;/a&gt; No. 3 also says : &amp;ldquo;&amp;hellip;&amp;hellip;. You can modify FancyBox source to suit your needs&amp;rdquo; And a fellow fancybox fan did try modifying it to his needs &amp;hellip; see below copy of the email (that I haven&amp;rsquo;t tried it yet but it makes sense to me)&lt;/p&gt;
&lt;p&gt;&amp;gt;forget about the iframe: Basically it &amp;gt;would be great if we had another &amp;gt;two public attributes &amp;hellip;etc let&amp;rsquo;s the developer answer what he thinks of your suggestions&lt;/p&gt;
&lt;p&gt;***copy of email ************** hi JFK it work, ive tried it using just a simple tweak, using the on load example $(&amp;ldquo;a.sample&amp;rdquo;).trigger(&amp;ldquo;click&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;here what ive done;&lt;/p&gt;
&lt;p&gt;in my iframe page i called the parent window with the href e.g. onClick=&amp;ldquo;callMe(&amp;lsquo;&lt;a class=&#34;link&#34; href=&#34;https://www.google.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;www.google.com&lt;/a&gt;&amp;rsquo;)&amp;rdquo; or if pics &amp;ldquo;/images/pics.png&amp;rdquo;&lt;/p&gt;
&lt;p&gt;and call this script in my parent page&lt;/p&gt;
&lt;script type=&#34;text/javascript&#34;&gt;// &lt;![CDATA[ function callMe(site){ $(&#34;.sample&#34;).fancybox({ &#39;width&#39; : &#39;97%&#39;, &#39;height&#39; : &#39;97%&#39;, &#39;href&#39; : &#39;&#39;+site+&#39;&#39; //force href to change its site from the call function in the iframe page }); readyFancy() call to trigger the decoy link page } function readyFancy(){ $(&#34;a.sample&#34;).trigger(&#34;click&#34;); } &lt;div&gt;&lt;/div&gt; // ]]&gt;&lt;/script&gt;
&lt;p&gt;in my parent html we right a decoy link (this one is from the example on load fancybox) ******&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这里牵扯到要修改父级窗口，这个在我们这个案例里自然是行不通的，而且我也没怎么看懂他的思路，不过我确实试了试前面的方法，是真的不行的，浮层窗口在单步调试可以被设置到上面来，但是一往下运行就又被自动居中了。&lt;/p&gt;
&lt;p&gt;于是没办法，仔细的看了看插件的官网，&lt;a class=&#34;link&#34; href=&#34;http://fancybox.net/api&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://fancybox.net/api&lt;/a&gt; ，api 文档，连后面的 tops 和 tricks 都看完了，还是没有解决问题，在官方的 FAQ 里面说道，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;3. Can the script be called from an iframe?&lt;/p&gt;
&lt;p&gt;This is not supported as FancyBox is attached to page body. You can modify FancyBox source to suit your needs&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;于是打算换一个思路，既然父级滚动条变化的时候，我们需要重新定位浮层窗口，那么直接取父级滚动条的属性就行了吧，甚至可以给父级窗口的滚动条上一个 OnScroll 事件，在这里看到类似的思路，&lt;a class=&#34;link&#34; href=&#34;http://hi.baidu.com/bing2liuliu/item/5de3b80a914e41ee359902af&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://hi.baidu.com/bing2liuliu/item/5de3b80a914e41ee359902af&lt;/a&gt; ，可惜，试了一下，好像是不行的，于是上线问了问金泉，金泉给了官方的 js 的 sdk 的文档，&lt;a class=&#34;link&#34; href=&#34;http://wiki.open.qq.com/wiki/API%E5%88%97%E8%A1%A8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://wiki.open.qq.com/wiki/API%E5%88%97%E8%A1%A8&lt;/a&gt; ，在其中有一个 api 是 &lt;a class=&#34;link&#34; href=&#34;http://wiki.open.qq.com/wiki/fusion2.canvas.getClientRect&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://wiki.open.qq.com/wiki/fusion2.canvas.getClientRect&lt;/a&gt; ，应该就是他了，不过，悲剧的在服务器上写代码，vim 用起啦真是各种痛苦啊，改着改着，代码就在 chrome 下乱了，明明页面上是有东西的，在 script 标签下居然变空白了，&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/08/Unnamed-QQ-Screenshot20120809235840.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/Unnamed-QQ-Screenshot20120809235840.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;而且单步跟也诡异&lt;/p&gt;
&lt;p&gt;首先是在这里&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/08/Unnamed-QQ-Screenshot20120810000003.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/Unnamed-QQ-Screenshot20120810000003.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;按理说，单步下去，应该到下一个断点啊，但是，。。。。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/08/Unnamed-QQ-Screenshot20120810000013.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/Unnamed-QQ-Screenshot20120810000013.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;神奇的地球还没完，继续单步，&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/08/Unnamed-QQ-Screenshot20120810000022.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/Unnamed-QQ-Screenshot20120810000022.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;让人不得不感叹，绳命，是入刺的井猜&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;ldpcm3&lt;/strong&gt; (2013-04-18 18:45:23):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你好，请问这个问题，你后来解决了吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2013-04-19 09:22:53):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;呃，不好意思，这个过去太久了。印象中后来是绕开了这个问题，找了另外一种实现，不过我现在基本不怎么写前端 JS 了，所以也不清楚这个问题现在有没有解法，不好意思哈&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>跨域请求时的 cookie 传送情况</title>
        <link>https://blog.zrj.me/posts/2012-08-07-%E8%B7%A8%E5%9F%9F%E8%AF%B7%E6%B1%82%E6%97%B6%E7%9A%84-cookie-%E4%BC%A0%E9%80%81%E6%83%85%E5%86%B5/</link>
        <pubDate>Tue, 07 Aug 2012 18:38:14 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-08-07-%E8%B7%A8%E5%9F%9F%E8%AF%B7%E6%B1%82%E6%97%B6%E7%9A%84-cookie-%E4%BC%A0%E9%80%81%E6%83%85%E5%86%B5/</guid>
        <description>&lt;p&gt;自己动手做了一个实验，跨域的时候，确实是可以送出远方域名的 cookie 的：&lt;/p&gt;
&lt;p&gt;首先在本地配两个域名，先修改 apache 的配置文件 httpd.conf ，加入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NameVirtualHost 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;VirtualHost&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DocumentRoot &amp;#34;D:Documentscodewampwwwdm1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ServerName dm1.local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;VirtualHost&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DocumentRoot &amp;#34;D:Documentscodewampwwwdm2&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ServerName dm2.local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后还需要修改 hosts 文件，一般在 C:WindowsSystem32driversetc 加入：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;127.0.0.1		dm1.local
127.0.0.1		dm2.local
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后构造两个域名下的文件，首先分别在各自的域名下设置一个 greeting 的字符串，即在 dm1 下准备好：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;setcookie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;greeting&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同样的在 dm2 下准备好：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;setcookie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;greeting&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;分别访问一次，来写入 cookie ，然后在 dm1 下准备：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_COOKIE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;greeting&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alert(&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$val&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在 dm2 下准备：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://dm1.local/index.php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;访问 dm2 下的文件，可以看到弹出了写在 dm1 域名下的 cookie：&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/08/Unnamed-QQ-Screenshot20120807183657.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/Unnamed-QQ-Screenshot20120807183657.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Apache 多虚拟主机 | ZRJ&lt;/strong&gt; (2012-08-15 16:40:48):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[&amp;hellip;] cookie 传送情况，http://zrj.me/archives/187，记过了 apache [&amp;hellip;]&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Python 入门环境配置</title>
        <link>https://blog.zrj.me/posts/2012-07-28-python-%E5%85%A5%E9%97%A8%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</link>
        <pubDate>Sat, 28 Jul 2012 15:30:54 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-07-28-python-%E5%85%A5%E9%97%A8%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</guid>
        <description>&lt;p&gt;最近几天在碰 python ，配了一些环境，为了防止以后忘记，记下来吧：&lt;/p&gt;
&lt;p&gt;python 用的是 2.7，在这里下载，&lt;a class=&#34;link&#34; href=&#34;http://www.python.org/download/releases/2.7.3/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.python.org/download/releases/2.7.3/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;跟着 django 的教程写了一些 demo ，写之前要先安装 django ，看这里，&lt;a class=&#34;link&#34; href=&#34;http://www.ibm.com/developerworks/cn/opensource/os-cn-django/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.ibm.com/developerworks/cn/opensource/os-cn-django/index.html&lt;/a&gt; ，需要说明的是，这篇文章的版本跟实际使用的有些差异，悲剧的是他的范例代码 404 下载不了了，于是只能自己摸索着写，在这个过程中为了安装 python 到 mysql 的连接器，还费了些周折，看这里的教程，&lt;a class=&#34;link&#34; href=&#34;http://www.programlife.net/windows-python-mysqldb-install.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.programlife.net/windows-python-mysqldb-install.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后就是试了试 flask ，看这里的教程安装了虚拟环境（本来 python 自己就是一个虚拟机一类的虚拟环境，结果还有一个类似沙盒的虚拟环境。。。）&lt;a class=&#34;link&#34; href=&#34;http://dormousehole.readthedocs.org/en/latest/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://dormousehole.readthedocs.org/en/latest/index.html&lt;/a&gt; ，写了 demo ，一个留言板，然后看这里，&lt;a class=&#34;link&#34; href=&#34;https://github.com/mitsuhiko/flask/tree/master/examples/minitwit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/mitsuhiko/flask/tree/master/examples/minitwit&lt;/a&gt; ，是一个微型的类 twitter 工具&lt;/p&gt;
&lt;p&gt;然后开始看江阁的代码，期间看这里安装了 flask-script &lt;a class=&#34;link&#34; href=&#34;http://packages.python.org/Flask-Script/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://packages.python.org/Flask-Script/&lt;/a&gt; ，然后安装了 pep8 &lt;a class=&#34;link&#34; href=&#34;http://pypi.python.org/pypi/pep8/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://pypi.python.org/pypi/pep8/&lt;/a&gt; ，另外安装了 flask-sqlalchemy ，还有 flask-babel ，这个地方出现了一个诡异的事情就是重新报错说 script 没有安装，但是用 easy_install 或者 pip 安装的时候又报已经安装了，反思了一下想起当时安装 script 的时候由于 pip 无法得到源码于是是自己从 github 上面 clone 下来的，当时是在没有 virtualenv 的环境下安装的，但是 flask 是在有 virtualenv 里面的，于是在虚拟环境里面重新进去 script 的源码文件夹再次安装，得以解决，后面跟着又安装了 flask-mail ，过程中遇到 resource 找不到的问题，看了 &lt;a class=&#34;link&#34; href=&#34;http://stackoverflow.com/questions/7556850/no-module-named-resource-installing-flask-mail&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://stackoverflow.com/questions/7556850/no-module-named-resource-installing-flask-mail&lt;/a&gt; 这里解决了，然后安装了 flask-assets ，安装完后报 cannot import name ManageAssets ，这个地方一直搞不过，于是重装 python 。。。&lt;/p&gt;
&lt;p&gt;这次学乖了，上来直接装虚拟环境，然后在里面用 pip 装 flask ， script ， sqlalchemy ，等等之前那一堆，这次装 assets 还好，一次过了，然后报 No module named rbac.acl ，这次用 &lt;a class=&#34;link&#34; href=&#34;https://github.com/tonyseek/simple-rbac&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/tonyseek/simple-rbac&lt;/a&gt; 的  pip install simple-rbac 弄好了，然后安装了 flask-wtf ，后面的也基本上解决了，但是最后进入 ledge应用的时候报 context 找不到，这个问题找了江阁，江阁说他也跑不起来。。坑爹啊，于是就到此为止了。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PHP 函数调用时传引用的问题</title>
        <link>https://blog.zrj.me/posts/2012-07-20-php-%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E6%97%B6%E4%BC%A0%E5%BC%95%E7%94%A8%E7%9A%84%E9%97%AE%E9%A2%98/</link>
        <pubDate>Fri, 20 Jul 2012 00:08:43 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-07-20-php-%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E6%97%B6%E4%BC%A0%E5%BC%95%E7%94%A8%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
        <description>&lt;p&gt;晚上下载了腾讯开放平台的 SDK ，PHP 版本的，我发现自己接触一个新的 API 的时候总是喜欢从 PHP 的 SDK 开始看起，这算哪门子的事啊。&lt;/p&gt;
&lt;p&gt;SDK 跑起来后 PHP 报了一个警告&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Deprecated: Call-time pass-by-reference has been deprecated in D:Documentscodewampwwwopen_qqPHP_SDK_V3.0.2Test_OpenApiV3.php on line 35
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看回代码，调用函数的 35 行是这样的&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_user_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;找到函数的定义&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_user_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$params&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s1&#34;&gt;&amp;#39;openid&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s1&#34;&gt;&amp;#39;openkey&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s1&#34;&gt;&amp;#39;pf&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$script_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/v3/user/get_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$sdk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以看到，函数定义的时候是传值的参数方式的，但是使用的时候传了引用，google 一阵搜，基本上都是建议在配置中把这个警告关掉，眼不见为净，但是既然人家 deprecated 了，那么肯定是有道理的，继续查了一会，终于找到说法解释：PHP 并不是不建议使用传引用的方式调用函数，毕竟 resource 类的变量是不好复制传值的，但是不应该在定义的时候不说明而仅仅在使用的时候传引用，对于需要使用传引用的变量，应该在函数定义的时候明确的说明，至于在使用的时候，倒不用取引用了，这点应该是从封装的思想去理解的，于是代码应该更改如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_user_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$params&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s1&#34;&gt;&amp;#39;openid&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s1&#34;&gt;&amp;#39;openkey&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s1&#34;&gt;&amp;#39;pf&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$script_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/v3/user/get_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$sdk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_user_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$openkey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$pf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不用屏蔽，异常自然的消失了&lt;/p&gt;
</description>
        </item>
        <item>
        <title>JVM虚拟内存调整</title>
        <link>https://blog.zrj.me/posts/2012-07-19-jvm%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%E8%B0%83%E6%95%B4/</link>
        <pubDate>Thu, 19 Jul 2012 19:13:07 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-07-19-jvm%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%E8%B0%83%E6%95%B4/</guid>
        <description>&lt;p&gt;这次真的是为了调一个环境花费两三天的时间，太纠结了，现在每天都要去听实习那个没什么意思的课程，只能每天中午午休的时候和晚上放学回来抓紧时间写一点，每次都是稍稍有点状态思路刚活跃时间就到了，又要走人&lt;/p&gt;
&lt;p&gt;这次异常调到后来，感觉弯路走了很多，于是开始有意识的用记事本记录下来，最开始的时候放在 MyEclispe 自带的 tomcat 5.5 里面，可以启动的起来，但是由于 5.5 不支持使用注释语法，于是自己换了个 tomcat 7 ，于是报异常，异常是&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;信息: validateJarFile(D:DocumentscodeMyEclipse86.metadataapache-tomcat-7.0.29webappsNeddyTravelWEB-INFlibel-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
2012-7-17 22:02:29 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:DocumentscodeMyEclipse86.metadataapache-tomcat-7.0.29webappsNeddyTravelWEB-INFlibservlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax rvlet/Servlet.class
2012-7-17 22:02:29 org.apache.tomcat.util.digester.Digester endElement
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而当时的 web.xml 是这样子的&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&amp;lt;web-app xmlns:xsi=&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34; xmlns=&amp;#34;http://java.sun.com/xml/ns/javaee&amp;#34; xmlns:web=&amp;#34;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&amp;#34; xsi:schemaLocation=&amp;#34;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&amp;#34; id=&amp;#34;WebApp_ID&amp;#34; version=&amp;#34;3.0&amp;#34;&amp;gt;
  &amp;lt;display-name&amp;gt;NeddyTravel&amp;lt;/display-name&amp;gt;
  &amp;lt;welcome-file-list&amp;gt;
    &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;index.htm&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;default.html&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;default.htm&amp;lt;/welcome-file&amp;gt;
    &amp;lt;welcome-file&amp;gt;default.jsp&amp;lt;/welcome-file&amp;gt;
  &amp;lt;/welcome-file-list&amp;gt;
  &amp;lt;context-param&amp;gt;
    &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;
    &amp;lt;param-value&amp;gt;/WEB-INF/applicationContext-*.xml&amp;lt;/param-value&amp;gt;
  &amp;lt;/context-param&amp;gt;
  &amp;lt;listener&amp;gt;
    &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;
  &amp;lt;/listener&amp;gt;
  &amp;lt;filter&amp;gt;
    &amp;lt;display-name&amp;gt;Post&amp;lt;/display-name&amp;gt;
    &amp;lt;filter-name&amp;gt;Post&amp;lt;/filter-name&amp;gt;
    &amp;lt;filter-class&amp;gt;travel.filter.Post&amp;lt;/filter-class&amp;gt;
  &amp;lt;/filter&amp;gt;
  &amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;Post&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
  &amp;lt;/filter-mapping&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;感觉上应该是没有什么问题，出于慎重还是二分法注释掉了很多，最后基本上整个文件注释掉了，还是不行，异常变成这样&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2012-7-19 18:00:30 org.apache.catalina.startup.HostConfig deployDirectories
严重: Error waiting for multi-thread deployment of directories to completehostConfig.deployWar=Deploying web application archive {0}
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
	at java.util.concurrent.FutureTask.get(FutureTask.java:83)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1023)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1413)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
	at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:785)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.io.DataInputStream.readUTF(DataInputStream.java:644)
	at java.io.DataInputStream.readUTF(DataInputStream.java:547)
	at org.apache.tomcat.util.bcel.classfile.ConstantUtf8.&amp;lt;init&amp;gt;(ConstantUtf8.java:48)
	at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:129)
	at org.apache.tomcat.util.bcel.classfile.ConstantPool.&amp;lt;init&amp;gt;(ConstantPool.java:60)
	at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209)
	at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2066)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1942)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1908)
	at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1893)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1296)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:346)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100)
	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	... 5 more
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;报内存溢出，一开始认为 tomcat 默认的内存应该是够的，于是就没有往调内存方面想，后来实在折腾不过，回到这个地方来，开始思考是否真的是 tomcat 的内存不够，写了这个代码用来查看虚拟机内存，&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Runtime&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Runtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getRuntime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;totalMemory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;freeMemory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;发现内存初始只有 8M 左右，真的挺小，于是上网搜，根据方法，在 MyEclipse 的下配了 JVM 的内存，就好了&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2012/07/QQ%e6%88%aa%e5%9b%be20120719191113.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/QQ%e6%88%aa%e5%9b%be20120719191113.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;折腾了许久的问题，居然这么傻逼，真是无颜面对江东父老啊&lt;/p&gt;
</description>
        </item>
        <item>
        <title>浏览器对编码的确定</title>
        <link>https://blog.zrj.me/posts/2012-07-16-%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AF%B9%E7%BC%96%E7%A0%81%E7%9A%84%E7%A1%AE%E5%AE%9A/</link>
        <pubDate>Mon, 16 Jul 2012 21:50:30 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-07-16-%E6%B5%8F%E8%A7%88%E5%99%A8%E5%AF%B9%E7%BC%96%E7%A0%81%E7%9A%84%E7%A1%AE%E5%AE%9A/</guid>
        <description>&lt;p&gt;我们知道，在一次 HTTP 请求中，浏览器向 HTTP 服务器发起 HTTP request，然后服务器返回 response header，到目前为止，字符的编码都是 ANCII 的，所以都还好，不需要考虑什么解码问题，但是服务器紧跟着传回来的 response body 本质上就是一个字节流了，于是自然而然的就面临一个解码的问题，怎么处理这个问题是我一直以来疑惑已久的。&lt;/p&gt;
&lt;p&gt;对于这个问题，如果服务器比较规范，那么应该在 response header 中指明 charset ，这种情况当然是最好的，浏览器直接就可以按照给定的 charset 去解码正文，但是如果没有给出呢？很自然的会想到，HTML 正文里面，是有一个 meta 标签的，在那个 meta 标签中，我们可以指明 charset ，但是，我一直想不通的问题就在这里了：既然正文本身的编码方式就是未知的，而指明编码方式的 meta 又位于正文中，所以这不是一个自我循环的无解问题吗？&lt;/p&gt;
&lt;p&gt;在这之前，我记得我曾经在网络上看到一些文章说，这种时候，对于 meta 标签的位置就很重要了，一定要写在 title 之前，给出的原因是说，title 中可能含有非 ANCII 字符，所以如果 meta 在 title 之前的话，就可以让浏览器顺利把 meta 找到并看懂，而如果 meta 在 title 之后，那么 title 中的多字节文本就可能影响了 meta 的被发现。这种轮调，甚至知道今天，（刚刚我搜了一下），还十分流行，见这里，&lt;a class=&#34;link&#34; href=&#34;http://touya.iteye.com/blog/265949&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://touya.iteye.com/blog/265949&lt;/a&gt;，还有这里，&lt;a class=&#34;link&#34; href=&#34;http://www.jb51.net/article/16138.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.jb51.net/article/16138.htm&lt;/a&gt;，不可否认，他们的这个思路确实有一定的道理，甚至有人还做了十分详尽的对比测试，例如这里，&lt;a class=&#34;link&#34; href=&#34;http://epie.blogbus.com/logs/23927589.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://epie.blogbus.com/logs/23927589.html&lt;/a&gt;，但是，我依然不理解，我的疑惑是，如果说把 meta 放在 title 之前可以解决问题，那么应该是建立在那个编码是 ANCII 兼容的基础上的，也就是说，需要是 ANCII 的超集，例如变长的 UTF-8 ，如果遇到定长的非兼容编码，不是一样不行吗，例如 16 位定长的 Unicode ，虽然我也自己动手试过，例如这段代码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/html; charset=utf-16&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;中文&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;中文&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;把这段代码以 16 位定长 Unicode 保存再浏览，虽然是可以正常解码，但是按照我的理解，应该是不行的啊。&lt;/p&gt;
&lt;p&gt;直到今天，才看到一篇博文，介绍的是 Gecko 的解码方案，终于解决了这个疑惑，原来，渲染引擎是会对字节流做一定程度的智能判断的，再在这个基础上，决定解码页面使用的解码方式，博文来自百度搜索研发部，很不错的一个博客：&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://stblog.baidu-tech.com/?p=1909&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://stblog.baidu-tech.com/?p=1909&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这篇文章讲的十分清楚，我也就不再多言了，强烈建议仔细读一读，最后附上两篇遇到的讲字符编码比较好的文章：&lt;/p&gt;
&lt;p&gt;这个，&lt;a class=&#34;link&#34; href=&#34;http://quanxinxi.com/2012/04/25/%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81%E6%9D%82%E8%B0%88/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;中文编码杂谈&lt;/a&gt;，不知道为什么没了，要看 &lt;a class=&#34;link&#34; href=&#34;http://webcache.googleusercontent.com/search?q=cache:2EIH2Rxu3jIJ:quanxinxi.com/2012/04/25/%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81%E6%9D%82%E8%B0%88/&amp;#43;&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;google cache&lt;/a&gt;，还有这个，&lt;a class=&#34;link&#34; href=&#34;http://www.fmddlmyy.cn/text16.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.fmddlmyy.cn/text16.html&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;从点击到呈现 — 详解一次HTTP请求（4） | ZRJ&lt;/strong&gt; (2012-10-11 22:11:58):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[&amp;hellip;] 当浏览得到一个正确的 200 响应之后，接下来面临的一个问题就是多国语言的编码解析了，响应头是一个 ascii 的标准字符集的文本，这个还好办，但是响应的正文本质上就是一个字节流，对于这一坨字节流，浏览器要怎么去处理呢，首先浏览器会去看响应头里面指定的 encoding 域，如果有了这个东西，那么就按照指定的 encoding 去解析字符，如果没有的话，那么浏览器会使用一些比较智能的方式，去猜测和判断这一坨字节流应该使用什么字符集去解码。相关的笔记可以看这里，浏览器对编码的确定 [&amp;hellip;]&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>今天上午文本分析的各种弯路</title>
        <link>https://blog.zrj.me/posts/2012-07-14-%E4%BB%8A%E5%A4%A9%E4%B8%8A%E5%8D%88%E5%88%86%E6%9C%AC%E5%88%86%E6%9E%90%E7%9A%84%E5%90%84%E7%A7%8D%E5%BC%AF%E8%B7%AF/</link>
        <pubDate>Sat, 14 Jul 2012 15:40:38 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-07-14-%E4%BB%8A%E5%A4%A9%E4%B8%8A%E5%8D%88%E5%88%86%E6%9C%AC%E5%88%86%E6%9E%90%E7%9A%84%E5%90%84%E7%A7%8D%E5%BC%AF%E8%B7%AF/</guid>
        <description>&lt;p&gt;昨晚看到有人因为章校长退休了，怕信箱不再，于是在爬数据，反正闲着没事干，于是我也爬，观察了一下 URL ，每个部门或者领导有一个这样的属于自己的 URL&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://www.szu.edu.cn/mailbox/list.asp?leader=%CA%A6%D4%BA%B0%EC%B9%AB%CA%D2&amp;amp;page=4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;leader 字段后面是名字，编码是 gb2312 ，顺带一提，整个流程的编码都是 gb2312 。&lt;/p&gt;
&lt;p&gt;我们注意到那个 URL 是带分页，分页是列表，点进去是 URL 类似这样的详情页&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://www.szu.edu.cn/mailbox/view.asp?id=85465
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个页面的 id 字段是全局，就是说不管是哪个部门哪个领导，都是掺合在一起顺序递增的，呵呵，这么看来背后就是一张表，不过数据量也不大，截止到爬的时候就 18 万多，那么爬虫的代码就有两个思路了，一个是从分页的源码把信件的 id 找出来，然后根据 id 去爬，另外一个就是暴力，遍历 id 一个个爬，就代码的复杂度来说，当然是前者复杂一些，但是也不会差别特别大，而且好处是针对性强，而暴力的方法的好处自然就是数据量大，数据完整了，反正机器爬嘛，就暴力吧。爬虫代码很简单，php 写的，爬一条入库一条，为了不给学校服务器造成无谓的压力，代码就不放了，如果想写又没什么头绪的话，可以 google 一下 curl 的用法，根据 URL 把 HTML 代码下载回来，真的简单。从昨晚两点多左右去睡觉开始爬，到早上九点多完成，回来的 18 万条数据里面有 7 万左右是报该信件不存在的，估计是不公开信，有效的数据 10 万多，整个表 300 多 M 。&lt;/p&gt;
&lt;p&gt;然后自然就是从数据里找点有意思的东西了，想着统计一下回复率啊，回复集中时段啊，信件的平均长度，回复的平均长度之类的简单数据，然后还想找个分词器统计一下热词之类的，于是就开始悲催的走各种弯路。一开始想到数据量毕竟不小，如果用 php 来处理的话怕是时间有点久，于是就天真的想写存储过程来搞，google 一阵搜，找出来好久不写的存储过程语法规则，还有一些字符串常用函数，都是一些很基本的函数，就是找子串，分子串等，坑爹的是存储过程的解释器是没有语法提示的，如果你写过，他就告诉你，第几行第几行的出了错，但是又不说什么类型的错，于是排错就成了猜猜看的游戏，好吧，是自己的问题。另外一个问题就是存储过程是没有控制台之类的输出的，只能打到数据表里去调试，真是悲催啊。写了一段之后我就果断放弃了用存储过程过滤 HTML 标签获取正文的天真想法了。&lt;/p&gt;
&lt;p&gt;于是转向 PHP ，想到没有用过正则来干大文本，于是又天真了一次，google 一阵搜，重新温习了一下正则，好不容易回忆得七七八八，开始动手写，自然是写的磕磕碰碰的，不过好歹是写出了一半多，标题，时间，正文，回复状态啥的都提取出来了，但是又发现回复是可以转发的，于是又悲催了，而且发现虽然写出来的正则大部分可以，但是放到小部分的测试用例上还是不行，而且正则这东西就不是给人写的，写一会就头昏脑胀了，于是又被迫放弃用正则来搞长文本的天真想法，把写到一半的正则拿出来立个碑铭吧&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/[sS]*&amp;lt;td align=&amp;#34;center&amp;#34; bgcolor=&amp;#34;#F0F0F0&amp;#34; width=&amp;#34;10%&amp;#34;&amp;gt;[xa0-xff]{8}&amp;lt;/td&amp;gt;s*&amp;lt;td width=&amp;#34;90%&amp;#34;&amp;gt;([xa0-xff]*)&amp;lt;/td&amp;gt;s*&amp;lt;/tr&amp;gt;s*&amp;lt;tr&amp;gt;s*&amp;lt;td align=&amp;#34;center&amp;#34; bgcolor=&amp;#34;#F0F0F0&amp;#34;&amp;gt;[xa0-xff]{6}&amp;lt;/td&amp;gt;s*&amp;lt;td&amp;gt;([xa0-xff]*)&amp;lt;/td&amp;gt;s*&amp;lt;/tr&amp;gt;s*&amp;lt;tr&amp;gt;s*&amp;lt;td align=&amp;#34;center&amp;#34; bgcolor=&amp;#34;#F0F0F0&amp;#34;&amp;gt;[xa0-xff]{8}&amp;lt;/td&amp;gt;s*&amp;lt;td&amp;gt;s*([-d]*)[sS]*&amp;lt;td align=&amp;#34;center&amp;#34; bgcolor=&amp;#34;#F0F0F0&amp;#34;&amp;gt;[xa0-xff]{8}&amp;lt;/td&amp;gt;s*&amp;lt;td height=&amp;#34;120&amp;#34;&amp;gt;([sSxa0-xff]*?)&amp;lt;/td&amp;gt;[sS]*&amp;lt;td align=&amp;#34;center&amp;#34; bgcolor=&amp;#34;#F0F0F0&amp;#34;&amp;gt;[xa0-xff]{8}&amp;lt;/td&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;于是准备还是用回当年分析课表的老办法，就是把长文本一点点从头截取，先截取前面几百个字符，把标题找出来，然后前面这段就可以删掉，接着迭代的取一段分析一段的，估计还更加容易成，后面还要找分词器，目前做到的就这些，路长着呢&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;peter&lt;/strong&gt; (2014-03-07 21:35:30):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;您好，我是深圳大学的11届校友冯鹏，在查找以前章校长的信箱，就找到你了。
在去年的时候，还可以访问章校长的邮箱的。地址是这个http://www.szu.edu.cn/mailbox/list.asp?leader=%D5%C2%D0%A3%B3%A4
，但是现在访问不了。我想找一个老章说过的内容，不知你那有他以前的信箱信件吗？谢谢您！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2014-03-07 23:27:20):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;电脑里找了一下，没有找到。。回校内用校内网应该可以重新打开吧。。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Tomcat配置多域名虚拟主机</title>
        <link>https://blog.zrj.me/posts/2012-07-13-tomcat%E9%85%8D%E7%BD%AE%E5%A4%9A%E5%9F%9F%E5%90%8D%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA/</link>
        <pubDate>Fri, 13 Jul 2012 23:54:16 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-07-13-tomcat%E9%85%8D%E7%BD%AE%E5%A4%9A%E5%9F%9F%E5%90%8D%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA/</guid>
        <description>&lt;p&gt;国内的 Java 社区资料确实丰富，可惜大都是抄来抄去，质量也是良莠不齐，比如这个简单的 tomcat 配置多余名虚拟主机问题吧，google 了一下，出来很多文章，前面的点进去看了看，发现解决不了问题，话都没有说清楚，于是关掉，点后面，结果坑爹的发现其实是抄前面的几篇，连错别字都不带改的，于是只能自己狂看好多篇然后挨个试，最后不容易终于试出来了，唉，吐槽完了，转正题。&lt;/p&gt;
&lt;p&gt;首先，先明确一些简单的概念，访问一个 web 服务器的根本方法是使用 IP ，但是一般来说，一台主机的计算能力是有余的，于是可以同时运行多个域名下的网站，当然，出于另外的一些目的，我们也需要配置自定义域名，例如，tomcat 默认跑在 8080 ，而且一个网站是在子目录的形式访问的，也就是类似 http://localhost:8080/website/ 这样的 URL ，这样不利于我们在调试阶段使用基于根目录的相对路径形式，所以我的方法是在本地的时候配成 website.local 的形式，等到上线了就是 website.com 的形式，这样所有的相对路径都是可移植的。&lt;/p&gt;
&lt;p&gt;主要配置的文件是 tomcat 目录下的 /conf/server.xml 文件，初始的文件结构是类似这样的&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34; standalone=&amp;#34;no&amp;#34;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Note:  A &amp;#34;Server&amp;#34; is not itself a &amp;#34;Container&amp;#34;, so you may not
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;     define subcomponents such as &amp;#34;Valves&amp;#34; at this level.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;     Documentation at /docs/config/server.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; --&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Server&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;port=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8005&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;shutdown=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SHUTDOWN&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!--APR library loader. Documentation at /docs/apr.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;SSLEngine=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;on&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.core.AprLifecycleListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.core.JasperListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.mbeans.ServerLifecycleListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Global JNDI resources
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       Documentation at /docs/jndi-resources-howto.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;  --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;GlobalNamingResources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Editable user database that can also be used by
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         UserDatabaseRealm to authenticate users
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Resource&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;auth=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Container&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;description=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;User database that can be updated and saved&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;factory=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.users.MemoryUserDatabaseFactory&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;UserDatabase&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;pathname=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;conf/tomcat-users.xml&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.UserDatabase&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/GlobalNamingResources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- A &amp;#34;Service&amp;#34; is a collection of one or more &amp;#34;Connectors&amp;#34; that share
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       a single &amp;#34;Container&amp;#34; Note:  A &amp;#34;Service&amp;#34; is not itself a &amp;#34;Container&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       so you may not define subcomponents such as &amp;#34;Valves&amp;#34; at this level.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       Documentation at /docs/config/service.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;   --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Service&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Catalina&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--The connectors can use a shared executor, you can define one or more named thread pools--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Executor name=&amp;#34;tomcatThreadPool&amp;#34; namePrefix=&amp;#34;catalina-exec-&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        maxThreads=&amp;#34;150&amp;#34; minSpareThreads=&amp;#34;4&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- A &amp;#34;Connector&amp;#34; represents an endpoint by which requests are received
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         and responses are returned. Documentation at :
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Java HTTP Connector: /docs/config/http.html (blocking &amp;amp; non-blocking)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Java AJP  Connector: /docs/config/ajp.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         APR (HTTP/AJP) Connector: /docs/apr.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Define a non-SSL HTTP/1.1 Connector on port 8080
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;connectionTimeout=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;20000&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;port=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;80&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;protocol=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;HTTP/1.1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;redirectPort=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8443&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- A &amp;#34;Connector&amp;#34; using the shared thread pool--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Connector executor=&amp;#34;tomcatThreadPool&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               port=&amp;#34;8080&amp;#34; protocol=&amp;#34;HTTP/1.1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               connectionTimeout=&amp;#34;20000&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               redirectPort=&amp;#34;8443&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define a SSL HTTP/1.1 Connector on port 8443
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         This connector uses the JSSE configuration, when using APR, the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         connector should be using the OpenSSL style configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         described in the APR documentation --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Connector port=&amp;#34;8443&amp;#34; protocol=&amp;#34;HTTP/1.1&amp;#34; SSLEnabled=&amp;#34;true&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               maxThreads=&amp;#34;150&amp;#34; scheme=&amp;#34;https&amp;#34; secure=&amp;#34;true&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               clientAuth=&amp;#34;false&amp;#34; sslProtocol=&amp;#34;TLS&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define an AJP 1.3 Connector on port 8009 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;port=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8009&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;protocol=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;AJP/1.3&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;redirectPort=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8443&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- An Engine represents the entry point (within Catalina) that processes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         every request.  The Engine implementation for Tomcat stand alone
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         analyzes the HTTP headers included with the request, and passes them
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         on to the appropriate Host (virtual host).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Documentation at /docs/config/engine.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- You should set jvmRoute to support load-balancing via AJP ie :
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Engine name=&amp;#34;Standalone&amp;#34; defaultHost=&amp;#34;localhost&amp;#34; jvmRoute=&amp;#34;jvm1&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Engine&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;defaultHost=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Catalina&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!--For clustering, please take a look at documentation at:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          /docs/cluster-howto.html  (simple how to)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          /docs/config/cluster.html (reference documentation) --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;Cluster className=&amp;#34;org.apache.catalina.ha.tcp.SimpleTcpCluster&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- The request dumper valve dumps useful debugging information about
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           the request and response data received and sent by Tomcat.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           Documentation at: /docs/config/valve.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;Valve className=&amp;#34;org.apache.catalina.valves.RequestDumperValve&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- This Realm uses the UserDatabase configured in the global JNDI
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           resources under the key &amp;#34;UserDatabase&amp;#34;.  Any edits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           that are performed against this UserDatabase are immediately
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           available for use by the Realm.  --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;Realm&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.realm.UserDatabaseRealm&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;resourceName=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;UserDatabase&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define the default virtual host
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           Note: XML Schema validation will not work with Xerces 2.2.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;Host&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;appBase=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;webapps&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;autoDeploy=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;unpackWARs=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlNamespaceAware=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlValidation=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- SingleSignOn valve, share authentication between web applications
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;             Documentation at: /docs/config/valve.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Valve className=&amp;#34;org.apache.catalina.authenticator.SingleSignOn&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Access log processes all example.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;             Documentation at: /docs/config/valve.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Valve className=&amp;#34;org.apache.catalina.valves.AccessLogValve&amp;#34; directory=&amp;#34;logs&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               prefix=&amp;#34;localhost_access_log.&amp;#34; suffix=&amp;#34;.txt&amp;#34; pattern=&amp;#34;common&amp;#34; resolveHosts=&amp;#34;false&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Host&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Engine&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Service&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Server&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们需要做的就是在 Engine 标签下再增加一个 Host 标签，类似这样&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Host&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;neddytravel.local&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;debug=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;appBase=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;D:DocumentscodeMyEclipse86.metadata.me_tcatwebappsNeddyTravel&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nt&#34;&gt;&amp;lt;Context&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;path=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;docBase=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;debug=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Host&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里的 name 属性就是我们要自定义的域名， appBase 属性是这个网站的文件的真实路径，至于 debug 属性，一般都没看到有解释， tomcat 官网的解释是&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The level of debugging detail logged by this &lt;strong&gt;Engine&lt;/strong&gt; to the associated&lt;a class=&#34;link&#34; href=&#34;http://tomcat.apache.org/tomcat-4.1-doc/config/logger.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Logger&lt;/a&gt;. Higher numbers generate more detailed output. If not specified, the default debugging detail level is zero (0).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后就是下面的 Context 标签了，根据 &lt;a class=&#34;link&#34; href=&#34;http://www.wangchao.net.cn/bbsdetail_61162.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.wangchao.net.cn/bbsdetail_61162.html&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;path 表示在浏览器里的目录，空表示根目录, docBase 表示在硬盘上所在的目录&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当然还要修改端口号为 80 ，修改完成后完整的文件是类似这样的&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34; standalone=&amp;#34;no&amp;#34;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Note:  A &amp;#34;Server&amp;#34; is not itself a &amp;#34;Container&amp;#34;, so you may not
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;     define subcomponents such as &amp;#34;Valves&amp;#34; at this level.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;     Documentation at /docs/config/server.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; --&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Server&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;port=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8005&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;shutdown=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SHUTDOWN&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!--APR library loader. Documentation at /docs/apr.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;SSLEngine=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;on&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.core.AprLifecycleListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.core.JasperListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.mbeans.ServerLifecycleListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Listener&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Global JNDI resources
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       Documentation at /docs/jndi-resources-howto.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;  --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;GlobalNamingResources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Editable user database that can also be used by
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         UserDatabaseRealm to authenticate users
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Resource&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;auth=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Container&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;description=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;User database that can be updated and saved&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;factory=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.users.MemoryUserDatabaseFactory&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;UserDatabase&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;pathname=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;conf/tomcat-users.xml&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.UserDatabase&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/GlobalNamingResources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- A &amp;#34;Service&amp;#34; is a collection of one or more &amp;#34;Connectors&amp;#34; that share
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       a single &amp;#34;Container&amp;#34; Note:  A &amp;#34;Service&amp;#34; is not itself a &amp;#34;Container&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       so you may not define subcomponents such as &amp;#34;Valves&amp;#34; at this level.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       Documentation at /docs/config/service.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;   --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Service&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Catalina&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--The connectors can use a shared executor, you can define one or more named thread pools--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Executor name=&amp;#34;tomcatThreadPool&amp;#34; namePrefix=&amp;#34;catalina-exec-&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        maxThreads=&amp;#34;150&amp;#34; minSpareThreads=&amp;#34;4&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- A &amp;#34;Connector&amp;#34; represents an endpoint by which requests are received
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         and responses are returned. Documentation at :
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Java HTTP Connector: /docs/config/http.html (blocking &amp;amp; non-blocking)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Java AJP  Connector: /docs/config/ajp.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         APR (HTTP/AJP) Connector: /docs/apr.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Define a non-SSL HTTP/1.1 Connector on port 8080
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;connectionTimeout=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;20000&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;port=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;80&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;protocol=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;HTTP/1.1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;redirectPort=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8443&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- A &amp;#34;Connector&amp;#34; using the shared thread pool--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Connector executor=&amp;#34;tomcatThreadPool&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               port=&amp;#34;8080&amp;#34; protocol=&amp;#34;HTTP/1.1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               connectionTimeout=&amp;#34;20000&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               redirectPort=&amp;#34;8443&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define a SSL HTTP/1.1 Connector on port 8443
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         This connector uses the JSSE configuration, when using APR, the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         connector should be using the OpenSSL style configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         described in the APR documentation --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Connector port=&amp;#34;8443&amp;#34; protocol=&amp;#34;HTTP/1.1&amp;#34; SSLEnabled=&amp;#34;true&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               maxThreads=&amp;#34;150&amp;#34; scheme=&amp;#34;https&amp;#34; secure=&amp;#34;true&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               clientAuth=&amp;#34;false&amp;#34; sslProtocol=&amp;#34;TLS&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define an AJP 1.3 Connector on port 8009 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;port=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8009&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;protocol=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;AJP/1.3&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;redirectPort=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8443&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- An Engine represents the entry point (within Catalina) that processes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         every request.  The Engine implementation for Tomcat stand alone
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         analyzes the HTTP headers included with the request, and passes them
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         on to the appropriate Host (virtual host).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;         Documentation at /docs/config/engine.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- You should set jvmRoute to support load-balancing via AJP ie :
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Engine name=&amp;#34;Standalone&amp;#34; defaultHost=&amp;#34;localhost&amp;#34; jvmRoute=&amp;#34;jvm1&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Engine&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;defaultHost=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Catalina&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!--For clustering, please take a look at documentation at:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          /docs/cluster-howto.html  (simple how to)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          /docs/config/cluster.html (reference documentation) --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;Cluster className=&amp;#34;org.apache.catalina.ha.tcp.SimpleTcpCluster&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- The request dumper valve dumps useful debugging information about
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           the request and response data received and sent by Tomcat.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           Documentation at: /docs/config/valve.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;Valve className=&amp;#34;org.apache.catalina.valves.RequestDumperValve&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- This Realm uses the UserDatabase configured in the global JNDI
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           resources under the key &amp;#34;UserDatabase&amp;#34;.  Any edits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           that are performed against this UserDatabase are immediately
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           available for use by the Realm.  --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;Realm&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.apache.catalina.realm.UserDatabaseRealm&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;resourceName=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;UserDatabase&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define the default virtual host
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;           Note: XML Schema validation will not work with Xerces 2.2.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;       --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;Host&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;appBase=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;webapps&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;autoDeploy=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;unpackWARs=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlNamespaceAware=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlValidation=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- SingleSignOn valve, share authentication between web applications
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;             Documentation at: /docs/config/valve.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Valve className=&amp;#34;org.apache.catalina.authenticator.SingleSignOn&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Access log processes all example.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;             Documentation at: /docs/config/valve.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Valve className=&amp;#34;org.apache.catalina.valves.AccessLogValve&amp;#34; directory=&amp;#34;logs&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;               prefix=&amp;#34;localhost_access_log.&amp;#34; suffix=&amp;#34;.txt&amp;#34; pattern=&amp;#34;common&amp;#34; resolveHosts=&amp;#34;false&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Host&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Host&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;neddytravel.local&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;debug=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;appBase=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;D:DocumentscodeMyEclipse86.metadata.me_tcatwebappsNeddyTravel&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;lt;Context&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;path=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;docBase=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;debug=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Host&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Engine&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Service&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Server&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置文件的修改到这里就结束了，下面修改 hosts 文件，至于不理解 hosts 文件的作用的话，请自行搜索，这方面资料很多，也讲的不错&lt;/p&gt;
&lt;p&gt;hosts 文件在 C:WindowsSystem32driversetc ，打开，追加一行&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;127.0.0.1 neddytravel.local
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;就可以了，然后重启 tomcat ，在浏览器中访问自定义的域名 neddytravel.local 应该就可以看到页面了&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
