Java堂  


Apache和Resin组合时UrlRewriteFilter失效的解决方法

Filed under: Tools,Web&Server — Jet @ 5:36 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2010/08/27/3629451.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

目前在Spring3.0的官方example中都使用UrlRewriteFilter来做伪静态,单独运行在Resin等JavaEE Web容器中的时候一切都OK,但是一旦与Apache一起组合的时候总是会出现404或403错误,当然UrlRewriteFilter所设定的规则也无效。

造成这种现象的原因是因为在默认情况下,静态的资源均由Apache进行处理,而jsp或者由web.xml所映射的servlet均交给resin进行处理。如果web项目没有使用UrlRewriteFilter则一切OK,但是使用了UrlRewriteFilter之后,由servlet所映射的地址并不是/*即所有资源了,而是类似/app/*这样的设置。也就是说,用户所请求的资源首先由Apache判断一下,然后再由选择的交给Resin,最后才执行UrlRewriteFilter的规则。

知道了原因,解决的方法也就出来了,只要告诉Apache将所有的资源都交由Resin来处理就可以了,可以使用Resin的servlet-mapping方法进行配置,配置如下:

  1. <servlet-mapping url-pattern='/*' servlet-name='plugin_match'/>

其中plugin_match是Resin内置的servlet,按照resin官方的解释就是Resin告诉Apache将所有的符合url-pattern规则要求的请求都发送给它进行处理。

因为servlet-mapping是resin特有的,所以建议将此也放在resin-web.xml中,然后放在项目中的WEB-INF目录下:

  1. <web-app xmlns="http://caucho.com/ns/resin"
  2.          xmlns:resin="http://caucho.com/ns/resin/core">
  3.     <servlet-mapping url-pattern='/*' servlet-name='plugin_match'/>
  4. </web-app>

参考资料:
Apache的UrlRewrite和Resin的配置问题
Resin官方对servlet-mapping的说明

解决Firefox及Firebug内存泄漏的问题

Filed under: Tools,Web&Server — Jet @ 10:09 上午
原文出处: http://www.javatang.com/archives/2010/08/21/0946448.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Firebug现在基本是调试Javascript脚本必备的工具,但是由于Firefox运行机制的原因,通常在使用一段时间之后会发现Firefox变得非常慢,在任务管理器中也会发现firefox.exe进程占用了不小的内容。

这里综合自己使用的情况强烈推荐三种方式,可以根据自己的喜好进行选择:

1. 进行系统设置
在地址栏中使用about:config打开FF的配置页面,右键添加一个属性:名称为config.trim_on_minimize,值类型为boolean,值为true,然后将FF关闭之后再打开,这样该设置就生效了。该属性的作用是当Firefox最小化之后会自动释放内容,可以打开任务管理器进行验证。该方法操作和设置都最简单。

2. 使用RAMBack扩展
FF中有一个非常不错的自动释放内存的扩展:RAMBack,这个扩展的基本原理也是上述第一条中的方法,只不过使用插件的方式将这个动作进行自动操作了,安装好扩展并重启FF就可以了,操作更方便。

这里顺便在推荐一个不错的扩展:StatusbarEx,该扩展是用来监视FF内存使用情况的,另外还可以监视系统内存的使用情况、CPU的使用率、FF CPU的使用率等等。

3. 使用SweepRAM软件
确切地来说,SweepRAM并非专门用来释放FF内存的,而是释放系统中所有未被使用但驻留在内存中的数据,据我的使用来看,他对javaw的释放效果也很明显,如果使用Eclipse或NetBeans等做开发的朋友可以试一试。

这个软件是使用VB开发的,所以通常需要在上面的网站上下载vb6fr.dll,然后拷贝到 %SystemRoot%\system32 目录下,另外默认执行SweepRAM.exe完成后会出现一个done的对话框,可以在后面加上 /s 参数禁止显示该对话框。我是在快速启动栏里面创建了一个快捷方式,使用的时候直接点一下,非常方便。

参考资料:
SweepRAM – Firefox3 内存释放工具

彻底修改Google Chrome浏览器的安装目录

Filed under: Tools,Web&Server — Jet @ 5:42 下午
原文出处: http://www.javatang.com/archives/2010/07/11/4201420.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

谷歌浏览器以其简洁的界面和快速的Javascript解析速度v8引擎,很快在浏览器市场中占有了一席之地,我们公司的绝大多数系统就建议用户选择使用谷歌浏览器。但是说起他的安装绝对是个杯具:一是默认下载的是在线安装版的;另外一个就是默认的安装目录在系统盘,而且不能选择!! 本文就针对这两点分别给出一个解决方案。

一、下载谷歌的离线安装包
谷歌浏览器的默认下载地址是:http://www.google.com/chrome/eula.html,其实这个地址后面可以跟很多的参数,最关键的一个参数就是standalone,将它的值设置为1就可以下载离线版了,具体的地址是:http://www.google.com/chrome/eula.html?hl=en&standalone=1,里面的hl是设定语言的,可以不用。

二、修改谷歌浏览器的安装目录
因为谷歌浏览器的安装程序很难进行定制,所以我们没有办法直接修改安装程序来实现修改安装目录的目的,但是可以通过一个小的技巧来制作绿色版的谷歌浏览器

首先使用上面的方法下载离线版的谷歌浏览器,然后默认安装,安装完之后最好不要允许浏览器。谷歌浏览器的默认安装目录如下:

Win7:
C:\Users\系统用户名\AppData\Local\Google\Chrome\Application
WinXP :
C:\Documents and Settings\系统用户名\Local Settings\Application Data\Google\Chrome

进入上述目录之后,首先将chrome.exe放到包含版本号的目录中,然后将这个目录拷贝到你所想要放的地方,最后修改这个目录名就可以了,比如可以修改成GoogleChrome。

还有最后一步,就是设置UserData。可以在刚才那个GoogleChrome目录下面创建一个新的目录UserData,然后创建chrome.exe的一个快捷方式,在快捷“目标”后面加上下面的参数:

–user-data-dir=UserData

然后启动的时候直接运行这个快捷方式就可以了。

最后卸载刚才安装在系统盘下的Google浏览器就可以了。

注意几点:
1. 如果不将chrome拷贝到版本号的目录下,直接运行chrome.exe则无效;
2. 如果不在添加了–user-data-dir参数的快捷方式下运行程序,则默认情况下的User Data目录还是在系统盘下面。

参考资料:
简单制作自己的Google Chrome (谷歌浏览器)绿化版
修改chrome的安装目录

彻底拒绝Realplayer漏洞

Filed under: Tools — Jet @ 1:18 下午
原文出处: http://www.javatang.com/archives/2008/03/06/1822262.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

首先引用一段关于Realplayer漏洞的内容:

RealPlayer的MPAMedia.dll库所提供的RealPlayer数据库组件在处理播放列表名时存在栈溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。由于可使用ierpplug.dll所提供的IERPCtl ActiveX控件将本地文件导入到RealPlayer中指定的播放列表,因此如果用户受骗访问了恶意网页并导入了恶意文件的话,就可以触发这个溢出,导致拒绝服务或执行任意指令。

说的直白一些,这个溢出漏洞主要借助于Realplayer内置的一个浏览器进行木马传播,虽然可以将软件更新到最新的版本,但是对于后面是否还会依赖于此产生新的漏洞依然很是担心.所以最干脆的方法就是不使用Realplayer内嵌的这个浏览器.可以将Realplayer安装目录下的 RealPlayer\rpplugins 目录中 rpwe3260.dll 删除或改名,这样虽然启动软件的时候会有两个对话框,但是不影响软件的正常使用,而从根部避免了此漏洞.

给Windows Live Mail一个安全的存放邮件的地方

Filed under: Tools — Jet @ 2:02 上午
Tags:
原文出处: http://www.javatang.com/archives/2008/01/16/0229257.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

wlmail_overview.gif

Windows Live Mail,一个微软开发的电子邮件客户端,以其华丽的外表吸引了很多人去使用,我也是其中一员。

不过在使用的过程中,一个微软长期以来坚持不懈的习惯依然被完整的保持在最新的Windows Live Mail上面,那就是默认将所有的邮件等资料存放在系统目录下面。或许微软对于自己的操作系统太过于自信了,但是在我使用的时候却是战战兢兢,时刻祈祷系统不要崩溃。

但是最根本的办法就是将邮件等资料存放在非系统盘,比如D盘。最后参考着Outlooks Express的设置方法,终于找到了修改的地方(属于深度隐藏,好像微软不想让你发现似的):打开”Option”对话框,依次选择”Advanced” – “Maintenace…”按钮 – “Store Folder…”按钮,然后点”Change…”按钮选择新的文件夹。选择好之后需要重新启动一下Live Mail,这个时候程序会自动将资料复制到新的位置。

这下,世界变得如此美好了~~

MyEcliplse性能优化

Filed under: Tools — Jet @ 11:31 上午
原文出处: http://www.javatang.com/archives/2007/12/06/3154252.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

MyEclipse功能非常的强大,现在基本是使用Eclipse开发JavaEE的必备插件了。但是巨大的MyEclipse也导致Eclipse启动的速度加慢,另外开发的过程中有时候容易造成界面“假死”的状况。

今天介绍几个优化MyEclipse的方法

1. 加大JVM的非堆内存,具体的做法和原因参考我前一篇文章《由MyEclipse内存不足谈谈JVM内存》

2. 去除不需要加载的模块
一个系统20%的功能往往能够满足80%的需求,MyEclipse也不例外,我们在大多数时候只需要20%的系统功能,所以可以将一些不使用的模块禁止加载启动。通过Windows – Preferences打开配置窗口,依次选择左侧的General – Startup and Shutdown,这个时候在右侧就显示出了Eclipse启动时加载的模块,可以根据自己的实际情况去除一些模块。

3. 取消MyEclipse在启动时自动验证项目配置文件
默认情况下MyEclipse在启动的时候会自动验证每个项目的配置文件,这是一个非常耗时的过程,可以在Preferences窗口依次选择MyEclipse – Validation,然后在右侧的Validator列表中只保留 Manual 项就可以了。如果需要验证的时候只需要选中文件,然后右键选择 MyEclipse – Run Validation就可以了。

通过上面的几个步骤可以有效优化MyEclipse的启动速度和运行效率,如果你还有新的方法可以回复 :)

参考资料:
让Eclipse快速启动的方法

由MyEclipse内存不足谈谈JVM内存

Filed under: JavaPlateform,Tools — Jet @ 3:16 下午
原文出处: http://www.javatang.com/archives/2007/12/03/1653250.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

如果没有进行设置的话,在使用MyEclipse的经常出现如下图所示内存不足的提示。
myeclipse.png
提示中说的很明白:“MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains.”意思是说当前只有小于5%的非堆内存是空闲的。所以我们只要将这个值设置大一些就可以了。

提示中给出了设置的参数:

  1. -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M

这里有几个问题:
1. 各个参数的含义什么?
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

下面我们一一进行回答

1. 各个参数的含义什么?

参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。

  • 堆(Heap)和非堆(Non-heap)内存
    按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
  • 堆内存分配
    JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
  • 非堆内存分配
    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
  • JVM内存限制(最大值)
    首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
  • 2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?

    通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:

    1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;

    2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。

    3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

    那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?这是因为我们没有遵守eclipse.ini文件的设置规则:

    参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:

    1. -vm
    2. C:\Java\jre1.6.0\bin\javaw.exe

    按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:

    1. -vmargs
    2. -Xms128M
    3. -Xmx512M
    4. -XX:PermSize=64M
    5. -XX:MaxPermSize=128M

    实际运行的结果可以通过Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。

    另外需要说明的是,Eclipse压缩包中自带的eclipse.ini文件内容是这样的:

    1. -showsplash
    2. org.eclipse.platform
    3. --launcher.XXMaxPermSize
    4. 256m
    5. -vmargs
    6. -Xms40m
    7. -Xmx256m

    其中–launcher.XXMaxPermSize(注意最前面是两个连接线)跟-XX:MaxPermSize参数的含义基本是一样的,我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数,而后者是eclipse所使用的JVM中的参数。其实二者设置一个就可以了,所以这里可以把–launcher.XXMaxPermSize和下一行使用#注释掉。

    参考资料:
    JDK5.0垃圾收集优化之–Don’t Pause
    提问:如何超越JVM内存限制?
    MemoryMXBean (Java 2 Platform SE 5.0)
    MyEclipse/Eclipse的内存优化与内存不足的解决办法
    eclipse.ini文件的问题
    eclipse 为什么报错

    让WindowsXP中的IIS支持多站点的工具

    Filed under: OS,Tools — Jet @ 4:48 下午
    Tags: ,
    原文出处: http://www.javatang.com/archives/2007/11/19/4845244.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    众所周知,在XP professional中使用IIS不能创建多个站点,虽然我们可以使用“虚拟目录”来调试程序,但有很多时候并不方便。今天无意中发现一个可以创建多站点的工具-IISAdmin,下载地址:http://www.firstserved.net/download/iisadmin.zip

    程序非常简单,界面如下:
    iisadminfull.gif
    使用“create”创建一个新的站点,可以设置站点描述、端口号以及站点的位置。软件没有设置“编辑”功能,如果需要对站点进行编辑处理的话可以使用IIS进行编辑,这个时候打开IIS之后会发现刚才创建的所有的站点都已经显示在列表中了。

    点击软件中的“start”可以启动选中的站点,细心的朋友可以注意到的是每次只能启动一个站点。如果我们在IIS中同时启动两个站点的话会出现一个“不支持请求”的错误提示。所以这个软件很巧妙的解决了在XP中IIS不能创建多个站点的问题(这一点应该是被IIS所屏蔽了),但没有从根本上解决同时启动多个站点的问题,我想这个应该是XP系统底层对IIS进行的限制,基本无法突破。不过这样对于我们调试程序来说已经足够了。

    软件同时还可以了重新启动IIS的功能,其实是调用了软件中所包含的iisreset程序,类似于iis6中自带的功能,非常的方便。软件还支持Windows 2000 Professional和Windows Vista Business系统。

    最后需要注意的一点是如果使用IISAdmin删除一个正在运行的站点,则如果再启动另外一个站点的时候会出现如下的错误:
    iisadmin_error.png
    这个时候IIS中所有站点也会出现红色的图标,无论做任何操作都是提示“不支持请求”。这个应该是软件的一个bug,解决的办法是重启一下IIS就可以了。

    非常好的服务器备份软件 – Acronis True Image Server

    Filed under: Tools,Web&Server — Jet @ 4:58 上午
    原文出处: http://www.javatang.com/archives/2007/11/16/5809241.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    服务器备份是非常重要的,特别对于应用于商用的数据。当然备份的方式有很多种,但是我觉得最简单而且有效的一种方式就是增加一块新的硬盘最为备份硬盘,然后使用程序将特定的数据根据频率备份到该硬盘上面,这样即使其中有一块硬盘出现问题依然可以保证数据的完整性。

    上面的方案中一款优秀的备份软件是非常重要的,Acronis True Image Server是一个非常棒的选择。这款软件不仅仅可以备份某个磁盘分区,而且还可以备份指定的文件或目录,另外最主要的是它还支持备份任务功能,这样可以设定某个频率来备份指定的数据,非常的强大和方便。

    acronis_true_image.png

    软件的使用也非常简单,全部采用向导式的操作方式。另外软件有Windows和Linux两个版本,可以在http://www.verycd.com/topics/78520/下载。

    乱码造成本站之前数据破坏,借此谈谈MySQL的乱码问题

    Filed under: Database,Life,Tools — Jet @ 3:18 上午
    原文出处: http://www.javatang.com/archives/2007/10/23/1847217.html
    作者: Jet Mah from Java堂
    声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

    为了防止升级失败我特意用sqlYog将数据备份了一下,然后升级的过程中没有任何问题,因为我发现原来的栏目排列有些改变,于是就直接清空数据然后再导入备份过的数据重新安装一下系统。当前清空数据库的时候没有多想,反正之前有备份。这个时候问题出现了:导入备份后的数据全部变成了乱码!确切的应该说是错码才对,因为出现的不是问号而是一些错误的中文字。

    乱码

    反复试了很多种方法依然是无效,后来从sqlYog官方网站上查到sqlYog从6.0开始每次生成的sql文件编码都是utf-8格式的,另外在操作数据之前都使用

    1. set names "utf8";

    将所有的环境都设置为utf8编码,你可以在sqlYog的查询窗口中使用

    1. SHOW VARIABLES LIKE 'character_set_%';

    查看一下语言环境。sqlYog在查看数据的时候首先查看原来数据库设置的编码格式,然后将其转换为utf8格式的数据,最后输出出来;如果修改数据则相反。上次我在博文中提到使用sqlYog6.03可以直接查看gbk编码的数据,但是查看utf8格式的编码是乱码,我觉得这应该是sqlYog6.03版本中转换编码算法的一个bug,果然在最新发布的6.10rc版本中就修复了这个错误;另外一个就是根数据库默认设置的编码也有很大的关系,因为MySQL使用的默认编码是latin1,正是这样一个非常具有历史原因的设置成为了造成乱码的最直接的原因。这里可能有人会说不是sqlYog操作之前都已经将环境设置为utf8格式了吗?这个时候应该跟MySQL本身的编码没有任何关系了呀。sqlYog操作的时候是不会有关系,但是其他进程(比如php、java等)操作的时候呢?数据写入的时候已经出现乱码了,问题就出在这里。所以为了完全杜绝MySQL的乱码问题,建议将MySQL的默认编码设置为utf8格式。

    因为wordpress数据库中的编码都是utf8格式的,我又使用的sqlYog6.03版本,所以无论查看还是备份utf8的数据都是乱码。最后只能是逐一从百度快照中将数据找出来添加到数据库中,因为我在wordpress中设置的remark规则跟时间和最后的数据id号有关系,为了不至于造成在百度中搜索出来的结果失效,所以首先先将原来数据库中的这些数据导入到新的数据中。当然这个时候wordpress已经升级成2.3了,呵呵(苦笑中…)

    目前在2006年8月份之前的数据还没有恢复,将近有80条。我会在最近这段时间将他升级完成的。

    参考资料:Which MySQL Character Sets are supported by SQLyog?

    下一页 »