Microsoft Internet Explorer has a maximum uniform resource locator (URL) length of 2,083 characters. Internet Explorer also has a maximum path length of 2,048 characters. This limit applies to both POST request and GET request URLs.

Form提交失败的时候希望能带回一些信息给用户,所以在url中带回了输入数据。

在开发的时候用的Firefox,测试人员用的IE测,超长的url被截断,后续关键的身份信息被截掉,直接导致功能无法正常工作….

apache2.2提供了mod_proxy,可以直接利用proxy ajp进行tomcat和apache的整合,过程很简单

httpd.conf中注释掉

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

直接添加虚拟主机

<VirtualHost   *:80>
ServerAdmin   webmaster@leoncomzh.com
DocumentRoot  /var/www/htdocs
ProxyPass /blog ! #设置/blog目录不跳转
ProxyPass   /   ajp://localhost:8009/
ProxyPassReverse   /   ajp://localhost:8009/
ServerName  jsp.leoncomzh.com
</VirtualHost>

输入jsp.leoncomzh.com可以之间跳转到tomcat的welcome page了,不跳转的选项必须写在跳转请求的前边

P.S: 如果出现的是503错误,error.log中是否是

(OS 10061)由于目标计算机积极拒绝,无法连接。  : proxy: AJP: attempt to connect to 127.0.0.1:8009 (127.0.0.1) failed

出现这个错误,修改tomcat的server.xml,给Connector加上address=”localhost”即可

<Connector port=”8009″  address=”localhost”
enableLookups=”false” redirectPort=”8443″ protocol=”AJP/1.3″ />

最后这个错误折腾了一晚上,google半天都没见说要改tomcat的conf…

, ,

第一次写一个面对海量用户的写操作函数,各种无意或者故意的非法输入是常态,各种心虚。

为了保持用户的良好体验,给表单的提交添加了用户提交失败返回时还能保持用户输入的特性。

<textarea></textarea> 中间的任何html字符都会被当作普通文本处理,测试时用<b></b>,<script>alert();</script>都没问题,就没用htmlspecialchars进行转义。

突然想到用户输入</textarea><script>…</script>,不就悲剧了。。。果然。。。

htmlspecialcharsaddslashes ,  Magic Quotes

说的是php manual中的这几个dba_*系列函数,照顾到手册的情绪,查起来也方便就安装本身的dba系列的扩展吧,php的dba系列就是一个berkeleyDB的本地key-value存储,就是本地存点啥之类的方便用,如果调用memcache就划不来了,一般规模专用的memcache机器都是一组服务器,又是分布式又是网络通信的,代价大了。

php manual :  dba_open: The database is created in BTree mode, other modes (like Hash or Queue) are not supported.

安装过程跟普通php的扩展安装没区别

 cd php_src_xxx/ext/dba

 phpize

./configure –enable-dba=shared -with-db4  –with-php-config=/usr/local/php/bin/php-config

这里的-with-db4的db4是dba系列函数的那个string参数handler,  即dba_open(“dbfile”,”n”,”db4″)第三个参数

cp dba.so 到 extension_dir

echo ‘extension=dba.so’  >> php.ini

如果需要安装BerkeleyDB4可以参考这个,使用的时候就是new Db4()对象,不能使用dba_系列的函数,ref这里

Command模式,是一种看上去很酷的模式,传统的面向对象编程,我们封装的往往都是数据,在Command模式下,我们希望封装的是行为。这件事在函数式编程中很正常,封装一个函数作为参数,传来传去,稀疏平常的事儿;但在面向对象的编程中,我们需要通过继承、模板、函数指针等手法,才能将其实现。。。
应用Command模式,我们是期望这个行为能到一个不同于它出生的环境中去执行,简而言之,这是一种想生不想养的行为。我们做Undo/Redo的时候,会把在任一一个环境中创建的Command,放到一个队列环境中去,供统一的调度;我们在一个线程环境中创建了Task,却把它放到别的线程中去执行,这种寄居蟹似的生活方式,在很多场合都是有用武之地的。。。

妈的,老子今天才知道…… get的action会被?截断,怪不得action=”xx.php?aa=bb”后面的参数就传递不过去- -

The method attribute of the FORM element specifies the HTTP method used to send the form to the processing agent. This attribute may take two values:

  • get: With the HTTP “get” method, the form data set is appended to the URI specified by the action attribute (with a question-mark (“?”) as separator) and this new URI is sent to the processing agent.
  • post: With the HTTP “post” method, the form data set is included in the body of the form and sent to the processing agent.