Sunshow Life

Beyond


  • 首页

  • 归档

  • 标签

解决nginx的404页面使用SSI时循环嵌套的问题

发表于 2013-04-16 | 分类于 WebDev

问题场景:

  1. nginx配置了404页面且指向一个使用了SSI include的页面(例如:404.shtml)
  2. 由于配置等原因,404.shtml中include的内容也不存在(也返回404)

造成结果:
request->404->redirect to 404.shtm->include a 404.shtml->include…
从而导致所有nginx的工作进程都被此请求的死循环block住

解决办法:

参考nginx SSI的文档,利用block语句和include语句中的stub属性:

stub — The name of the block to use as a default if the request is empty or returns an error.

首先在404.shtml中定义一个block:

1
2
3
<!--# block name="file_not_found" -->
SSI Not Found
<!--# endblock -->

然后在需要include的地方使用stub将include出错时的内容指向上面定义的block:

1
<!--#include file="/foobar.shtml" stub="file_not_found"-->

IntelliJ IDEA控制台中文乱码

发表于 2013-04-07 | 分类于 Java

貌似是升级12.1之后开始的,之前中文系统没有问题

参考《IntelliJ IDEA中文乱码解决办法》,原先中文系统没问题是因为默认加入了“-Dfile.encoding=GB2312”
而在更新到12.1之后,IDEA默认加入了“-Dfile.encoding=UTF-8”,所以导致了乱码问题突然出现

解决办法是在运行时的VM参数配置也加入“-Dfile.encoding=UTF-8”

MacOS清空DNS缓存

发表于 2012-07-04 | 分类于 Mac OS X
1
dscacheutil -flushcache

[Hibernate]映射时转换日期格式

发表于 2012-03-30 | 分类于 Java

使用formula属性调用数据库原生的日期转换函数转换,不过这样就是数据库实现相关了

1
2
3
<property name="dateColumn" type="java.lang.String" formula="date_format(date_column,'%Y-%m-%d %T')">
<column name="date_column" />
</property>

MySQL DATE_FORMAT() 函数

手动添加Windows共享打印机

发表于 2011-12-19 | 分类于 Mac OS X

Apple官方教程:http://support.apple.com/kb/HT3049?viewlocale=zh_CN

这里只说一点,OS X中添加Windows打印机时共享名不支持中文和空格等特殊字符(因为需要遵循samba的url规范),因此需要对共享名进行URL encoding,

最简单的方法是,在firebug中执行:

1
encodeURI('smb://172.16.5.250/打印机');

IE的“c00ce56e”b

发表于 2011-04-26 | 分类于 WebDev

很简单的一个jQuery AJAX请求文件,IE8下报:

1
Could not complete the operation due to error c00ce56e.

检查网上都说是编码问题,不过写的不是太明确,因为我们服务器的文件编码都已经是UTF-8
最后找到说明:

The problem occurs when setting the charset of a response to a XMLHttpRequest to utf8 instead of UTF-8 or ISO-8859-1 instead of ISO8859_1. IE7 is very strict on naming of the charsets.

“ISO8859_1” is the canonical representation of the Latin-1 character encoding string in the Java language and class libraries. The standard that is defined by the Internet Assigned Numbers Authority, however, is “ISO-8859-1”, which is not an accepted alias.

For more information refer: http://support.microsoft.com/default.aspx?scid=kb;en-us;304625

于是打开nginx的配置文件,把所有“utf8”替换成“UTF-8”,问题

Tomcat请求HTTPS的注意事项

发表于 2011-03-27 | 分类于 Java

需要在catalia.sh里给JAVA_OPTS再增加一个参数

1
-Dsun.security.ssl.allowUnsafeRenegotiation=true

在解决这个问题上,我走了不少弯路
在开发过程中(Windows)项目使用了cxf来进行webservice的请求封装,一切正常
部署到服务器(Linux)后总是报SocketTimeOutException
在排除了编码问题、IP限制和证书错误(命令行使用curl请求获取到了正确的响应)的可能之后,基本定位在cxf本身的问题

由于cxf代码过于庞杂,部署源码环境很痛苦,最后使用HttpClient拼装满足格式的xml请求模拟SOAP写了一个测试类
使用java命令行执行后得到正确结果,将测试程序放到Tomcat启动,这时候出现了异常的错误信息:

1
SSLException: HelloRequest followed by an unexpected handshake message

以这个异常为关键词搜索很容易得到本文开头加参数的解决办法,于是加上以后cxf的连接也正常了
那为什么cxf不报正确的异常信息呢?大概是两种可能:

  1. cxf的封装太严实了,没有给出正确的日志信息,不过对于这种成型的框架应该不会有这种低级问题
  2. 大概看了一下cxf的实现,有点类似异步模型,在允许的超时时间内没有取到响应导致抛出的异常为超时

至于Windows下不会出现这个问题,大概是因为不同系统的安全策略吧,不求甚解了
希望对在非Windows系统(MacOS下也是一样的症状)下碰到此问题的人有帮助

PS. 此问题应该不仅限于Tomcat,其他web容器估计也是一样的

IE6提交表单到动态添加的iframe

发表于 2010-12-11 | 分类于 WebDev

最近做无刷新上传,传统方法是提交到隐藏的iframe里然后回调
不希望所有上传的页面都预设iframe,于是采用动态创建的方式(无视掉里面的jQuery吧):

1
2
3
4
var $target = $(document.createElement('IFRAME')).hide();
$target.attr('id', target).attr('name', target);
$('body').append($target);

结果IE6下总是提交到一个新窗口
解决办法是不采用DOM操作,而是直接使用innerHTML:

1
2
// use html but not DOM, for IE6
$('body').append('<iframe id="' + target + '" name="' + target + '" style="display:none;"></iframe>');

参考文章:http://forums.digitalpoint.com/showthread.php?t=107314

Apache HttpClient与CLOSE_WAIT

发表于 2010-11-21 | 分类于 Java

前几天开始服务器时不时无法accept新连接,由于线上环境的原因都没时间调试直接重启了事
昨天频繁发生了几次,仔细看了下系统日志发现:

1
java.net.SocketException: Too many open files

用netstat看发现有大量的CLOSE_WAIT,搜索发现与libcurl的处理类似,apache-commons的HttpClient也默认保持了连接待复用处理。

解决办法:

  • 每次使用完都完全关闭连接

    1
    httpmethod.setRequestHeader("Connection", "close");
  • 使用统一的连接管理器复用连接,例如SimpleHttpConnectionManager,从连接管理器里获取连接,然后定时的用连接管理器来释放空闲连接。在比较频繁的抓取项目中推荐复用连接

参考文章:http://swordinhand.javaeye.com/blog/149408

[温故而知新]再谈IE中li之间高度空隙的问题

发表于 2010-11-02 | 分类于 WebDev

时隔两年之后,再次碰到IE6、IE7下li高度占用的bug,2008年的文章在这里

之前的老办法还是能解决问题的,然后顺便研究了一下。

首先是症状的发生条件:

  1. IE6、IE7
  2. li内嵌其他容器,不仅限于超链接,我测试过span等也有此问题
  3. 高度低于某个值,这个值我没有严格测试过,但是我把li的高度设置成30px的时候没问题,18px的时候就有问题

问题解决办法:

  1. 给li附加样式

    1
    2
    3
    4
    li.classname {
    float: left;
    width: 100%;
    }
  2. 将li设置成inline,给内嵌容器设置宽度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    li.classname {
    height: 18px;
    line-height: 18px;
    display:inline;
    }
    li.classname a {
    display: block;
    width: 100%;
    }
123…5
Sunshow

Sunshow

Beyond the Life

50 日志
12 分类
122 标签
RSS
© 2017 Sunshow
由 Hexo 强力驱动
主题 - NexT.Pisces