<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky2.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.mxjava.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/mxjava" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 02 Jun 2011 06:17:58 GMT</lastBuildDate><title>MXJAVA</title><description>关注Java相关技术，关注互联网。</description><image><url>http://www.feedsky.com/feed/mxjava/sc/gif</url><title>MXJAVA</title><link>http://www.mxjava.com</link></image><link>http://www.mxjava.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Fri, 24 Jun 2011 14:02:41 GMT</pubDate><item><title>Android资源收藏</title><link>http://www.mxjava.com/android-resource.html</link><content:encoded>&lt;p&gt;1、【eoeAndroid特刊】第一期 Andriod 1.5 SDK简介 http://download.csdn.net/source/2399809&lt;br /&gt;
2、【eoeAndroid特刊】第二期 图像处理篇（1） http://download.csdn.net/source/2399814&lt;br /&gt;
3、【eoeAndroid特刊】第三期 Android Market及应用发布 http://download.csdn.net/source/2399818&lt;br /&gt;
4、【eoeAndroid特刊】第五期 Android widget http://download.csdn.net/source/2399825&lt;br /&gt;
5、【eoeAndroid特刊】第六期 数据通信-成为Android数据流大师 http://download.csdn.net/source/2399830&lt;br /&gt;
6、【eoeAndroid特刊】第七期 NDK http://download.csdn.net/source/2400070&lt;br /&gt;
7、【eoeAndroid特刊】第八期 数据存储操作 http://download.csdn.net/source/2399834&lt;br /&gt;
8、【eoeAndroid特刊】第八期+ 开发技巧 http://download.csdn.net/source/2399841&lt;br /&gt;
9、【eoeAndroid特刊】第九期 http://download.csdn.net/source/2400075&lt;br /&gt;
10、android开发教程 http://download.csdn.net/source/2400084&lt;br /&gt;
&lt;span id=&quot;more-701&quot;&gt;&lt;/span&gt;&lt;br /&gt;
11、android基础教程 http://download.csdn.net/source/2425923&lt;br /&gt;
12、Google手机开发《Android.A.Programmers.Guide》 http://download.csdn.net/source/2425883&lt;br /&gt;
13、Professional.Android.Application.Development.2009 http://download.csdn.net/source/2425899&lt;br /&gt;
14、Apress.Android.Essentials.Jul.2008 http://download.csdn.net/source/2425905&lt;br /&gt;
15、android开发入门与实践 http://download.csdn.net/source/2425931&lt;br /&gt;
16、android开发入门与实践源代码 http://download.csdn.net/source/2425935&lt;br /&gt;
17、Android应用框架原理和程序设计 http://download.csdn.net/source/2399790&lt;br /&gt;
18、android JNI 简介与实现 http://download.csdn.net/source/2425864&lt;br /&gt;
19、Android开发指南中文版&lt;br /&gt;
20、android ADT-0.9.6 http://download.csdn.net/source/2399804&lt;br /&gt;
21、android-sdk2.2 http://developer.android.com/sdk/android-2.2.html&lt;/p&gt;
&lt;p&gt;另外附视频资源网址&lt;br /&gt;
《Google Android开发入门与实战随书视频》WMV[压缩包] http://www.verycd.com/topics/2779532/&lt;/p&gt;
&lt;p&gt;原文地址：http://topic.csdn.net/u/20100604/15/4997a1da-7f2c-46e5-8b2a-9af078d099db.html&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/android-helloworld.html&quot; title=&quot;第一个 Android 程序 &amp;#8212; Hello World (2010年06月17日)&quot;&gt;第一个 Android 程序 &amp;#8212; Hello World&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/touchpro.html&quot; title=&quot;换了HTC Touch Pro (2009年12月2日)&quot;&gt;换了HTC Touch Pro&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/javafx-resources.html&quot; title=&quot;JavaFX相关的学习资源 (2009年01月4日)&quot;&gt;JavaFX相关的学习资源&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/android-setup.html&quot; title=&quot;Android 开发环境的安装 (2010年06月15日)&quot;&gt;Android 开发环境的安装&lt;/a&gt; (1)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072899/mxjava/feedsky/s.gif?r=http://www.mxjava.com/android-resource.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/android-resource.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>1、【eoeAndroid特刊】第一期 Andriod 1.5 SDK简介 http://download.csdn.net/source/2399809 2、【eoeAndroid特刊】第二期 图像处理篇（1） http://download.csdn.net/source/2399814 3、【eoeAndroid特刊】第三期 Android Market及应用发布 http://download.csdn.net/source/2399818 4、【eoeAndroid特刊】第五期 Android widget http://download.csdn.net/source/2399825 5、【eoeAndroid特刊】第六期 数据通信-成为Android数据流大师 http://download.csdn.net/source/2399830 6、【eoeAndroid特刊】第七期 NDK http://download.csdn.net/source/2400070 7、【eoeAndroid特刊】第八期 数据存储操作 http://download.csdn.net/source/2399834 8、【eoeAndroid特刊】第八期+ 开发技巧 http://download.csdn.net/source/2399841 9、【eoeAndroid特刊】第九期 http://download.csdn.net/source/2400075 10、android开发教程 http://download.csdn.net/source/2400084 11、android基础教程 http://download.csdn.net/source/2425923 12、Google手机开发《Android.A.Programmers.Guide》 http://download.csdn.net/source/2425883 13、Professional.Android.Application.Development.2009 http://download.csdn.net/source/2425899 14、Apress.Android.Essentials.Jul.2008 http://download.csdn.net/source/2425905 15、android开发入门与实践 http://download.csdn.net/source/2425931 16、android开发入门与实践源代码 http://download.csdn.net/source/2425935 17、Android应用框架原理和程序设计 http://download.csdn.net/source/2399790 18、android JNI 简介与实现 http://download.csdn.net/source/2425864 19、Android开发指南中文版 20、android ADT-0.9.6 http://download.csdn.net/source/2399804 21、android-sdk2.2 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/527072899/mxjava/feedsky/s.gif?r=http://www.mxjava.com/android-resource.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>android</category><category>开发</category><category>资源</category><category>手机</category><pubDate>Thu, 02 Jun 2011 14:17:58 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/android-resource.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/android%e8%b5%84%e6%ba%90%e6%94%b6%e8%97%8f.html</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/android-resource.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072899/1492496</fs:itemid></item><item><title>辞职，新单位，不难。</title><link>http://www.mxjava.com/8nan.html</link><content:encoded>&lt;p&gt;　　经过慎重的考虑后，终于在上星期向公司提交了辞呈。有几个原因：第一：公司成立了１０年，而我已经在公司工作了将近９年，说起来也是元老。这些年中，我为公司的成长奋斗过，也为公司衰败难过过，为公司的稳定发愁过，更为公司的发展激动过。可以说几乎把公司当成自己的一样努力奋斗。在这９年中，也有遇到一些公司希望我能加盟，但都被我拒绝了。因为我一度以为只要努力，公司就一定能够发展壮大，只要公司发展好了我就能好。人总是成长的，年轻人的想法总是很单纯，喜欢自以为是。等到慢慢成熟起来才发现，曾经的想法是多么的幼稚。人说三十而立，如今３０岁的我也该为自己的将来考虑考虑了。第二：曾经也出现过相同的情况，有几个机会摆在我面前，我必需慎重考虑，因为毕竟自己已经３０岁了，不能再象从前那样不管不顾。第三：现在的我不在是一人吃饱全家不愁的状态了，有老婆有孩子，上有老下有小，经济压力对我来说越来越大，我需要钱，也需要事业。第四：合同到期，我不想续签了。就以上四点，我需要离开现在的公司，转投更加有前途待遇更加好的单位去了。提交辞呈的那天，领导很爽快，因为他知道，公司目前的状况下，已经不能为我提供更好的待遇和平台。我也能理解，毕竟公司只是家小企业，在中国小企业本来就很不容易。所以我选择了辞职而不是要求什么。再见了，我奋斗过的地方，再见了，年轻的我。希望我们都会越来越好。&lt;span id=&quot;more-699&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;　　目前有三家公司为我提供了OFFER，选择哪个真的是很头疼的事情，每个都有自己的好处与弊端，真是鱼与熊掌。不过在和家人认真慎重的分析过后终于选择了其中一家。明天一定更美好。&lt;/p&gt;
&lt;p&gt;　　为了纪念即将踏上全新旅程，特意新做了一个主题，这也许快成为我的习惯，每次有大事时，都会变更主题。这个主题很简洁清爽，也表达出我对全新旅程的期待和希望。我将这个主题命名为“不难”。为何命名为“不难”？实际上源于我注册的一个域名：http://8nan.com，有这个谐音。另外一个原因是曾经我一度认为辞职对我来说是很困难的，不可能的，而现在我终于明白，有那样的想法是自己太幼稚。有什么事是不可能的呢？又有什么困难是无法克服的呢？其实这些都不难。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mxjava.com/wp-content/uploads/2011/05/8nan.jpg&quot;&gt;&lt;img src=&quot;http://www.mxjava.com/wp-content/uploads/2011/05/8nan.jpg&quot; alt=&quot;&quot; title=&quot;8nan&quot; width=&quot;500&quot; height=&quot;280&quot; class=&quot;alignnone size-full wp-image-700&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　很期待接下来的新单位新同事。希望就如同我现在使用的这个主题一样，简单，清爽，最重要的是难过自己的努力，任何事情都变得不难。&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/taorizhi-theme.html&quot; title=&quot;淘日志主题制做基本完成 (2010年05月22日)&quot;&gt;淘日志主题制做基本完成&lt;/a&gt; (15)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/wordpress-sidebar.html&quot; title=&quot;为不同页面使用不同侧边栏文件 (2010年04月20日)&quot;&gt;为不同页面使用不同侧边栏文件&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/vssh_wordpress_theme.html&quot; title=&quot;VSSH 结构实现 WordPress 主题功能 (2010年03月16日)&quot;&gt;VSSH 结构实现 WordPress 主题功能&lt;/a&gt; (5)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072900/mxjava/feedsky/s.gif?r=http://www.mxjava.com/8nan.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/8nan.html/feed</wfw:commentRss><slash:comments>3</slash:comments><description>　　经过慎重的考虑后，终于在上星期向公司提交了辞呈。有几个原因：第一：公司成立了１０年，而我已经在公司工作了将近９年，说起来也是元老。这些年中，我为公司的成长奋斗过，也为公司衰败难过过，为公司的稳定发愁过，更为公司的发展激动过。可以说几乎把公司当成自己的一样努力奋斗。在这９年中，也有遇到一些公司希望我能加盟，但都被我拒绝了。因为我一度以为只要努力，公司就一定能够发展壮大，只要公司发展好了我就能好。人总是成长的，年轻人的想法总是很单纯，喜欢自以为是。等到慢慢成熟起来才发现，曾经的想法是多么的幼稚。人说三十而立，如今３０岁的我也该为自己的将来考虑考虑了。第二：曾经也出现过相同的情况，有几个机会摆在我面前，我必需慎重考虑，因为毕竟自己已经３０岁了，不能再象从前那样不管不顾。第三：现在的我不在是一人吃饱全家不愁的状态了，有老婆有孩子，上有老下有小，经济压力对我来说越来越大，我需要钱，也需要事业。第四：合同到期，我不想续签了。就以上四点，我需要离开现在的公司，转投更加有前途待遇更加好的单位去了。提交辞呈的那天，领导很爽快，因为他知道，公司目前的状况下，已经不能为我提供更好的待遇和平台。我也能理解，毕竟公司只是家小企业，在中国小企业本来就很不容易。所以我选择了辞职而不是要求什么。再见了，我奋斗过的地方，再见了，年轻的我。希望我们都会越来越好。 　　目前有三家公司为我提供了OFFER，选择哪个真的是很头疼的事情，每个都有自己的好处与弊端，真是鱼与熊掌。不过在和家人认真慎重的分析过后终于选择了其中一家。明天一定更美好。 　　为了纪念即将踏上全新旅程，特意新做了一个主题，这也许快成为我的习惯，每次有大事时，都会变更主题。这个主题很简洁清爽，也表达出我对全新旅程的期待和希望。我将这个主题命名为“不难”。为何命名为“不难”？实际上源于我注册的一个域名：http://8nan.com，有这个谐音。另外一个原因是曾经我一度认为辞职对我来说是很困难的，不可能的，而现在我终于明白，有那样的想法是自己太幼稚。有什么事是不可能的呢？又有什么困难是无法克服的呢？其实这些都不难。 　　很期待接下来的新单位新同事。希望就如同我现在使用的这个主题一样，简单，清爽，最重要的是难过自己的努力，任何事情都变得不难。 相关文章 淘日志主题制做基本完成 (15) 为不同页面使用不同侧边栏文件 (0) VSSH 结构实现 WordPress 主题功能 (5)&lt;img src=&quot;http://www1.feedsky.com/t1/527072900/mxjava/feedsky/s.gif?r=http://www.mxjava.com/8nan.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>工作</category><category>8nan</category><category>主题</category><category>辞职</category><category>随笔</category><category>WordPress</category><pubDate>Sun, 22 May 2011 19:54:15 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/8nan.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/%e8%be%9e%e8%81%8c%ef%bc%8c%e6%96%b0%e5%8d%95%e4%bd%8d%ef%bc%8c%e4%b8%8d%e9%9a%be%e3%80%82.html</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/8nan.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072900/1492496</fs:itemid></item><item><title>Grapevine2 上开发的财务系统</title><link>http://www.mxjava.com/accountbook.html</link><content:encoded>&lt;p&gt;我的一位将近２０年的好友开了家环保公司，生意做的越来越好，原始的纸笔记帐已经不能满足他的需求．要我帮他开发财务软件和企业网站．老友有事相求，哪敢不帮．网站比较简单，直接 WordPress 就可以满足．至于财务软件，从网上找了很多给他，但都不能满足他的需求．他想要的就是一款简单实用的流水帐记帐软件．大致有收入支出＼统计报表＼客户管理＼名词管理＼用户管理＼基本选择＼备份数据＼导入数据等功能．想想软件不大，功能不复杂，开发周期也不长，就挤挤自己不多的业余时间吧！关键是易用性方面要花点功夫．&lt;/p&gt;
&lt;p&gt;目前界面已经基本做好， Swing + Grapevine2 进行开发．&lt;br /&gt;
&lt;a href=&quot;http://www.mxjava.com/wp-content/uploads/2010/06/2.png&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-698&quot; title=&quot;MyAmount&quot; src=&quot;http://www.mxjava.com/wp-content/uploads/2010/06/2-300x190.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;190&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/grapevine2-resource.html&quot; title=&quot;Grapevine2：对象生命周期1 (2010年12月12日)&quot;&gt;Grapevine2：对象生命周期1&lt;/a&gt; (2)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072901/mxjava/feedsky/s.gif?r=http://www.mxjava.com/accountbook.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/accountbook.html/feed</wfw:commentRss><slash:comments>2</slash:comments><description>我的一位将近２０年的好友开了家环保公司，生意做的越来越好，原始的纸笔记帐已经不能满足他的需求．要我帮他开发财务软件和企业网站．老友有事相求，哪敢不帮．网站比较简单，直接 WordPress 就可以满足．至于财务软件，从网上找了很多给他，但都不能满足他的需求．他想要的就是一款简单实用的流水帐记帐软件．大致有收入支出＼统计报表＼客户管理＼名词管理＼用户管理＼基本选择＼备份数据＼导入数据等功能．想想软件不大，功能不复杂，开发周期也不长，就挤挤自己不多的业余时间吧！关键是易用性方面要花点功夫． 目前界面已经基本做好， Swing + Grapevine2 进行开发． 相关文章 Grapevine2：对象生命周期1 (2)&lt;img src=&quot;http://www1.feedsky.com/t1/527072901/mxjava/feedsky/s.gif?r=http://www.mxjava.com/accountbook.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>折腾</category><category>accountbook</category><category>grapevine2</category><pubDate>Mon, 10 Jan 2011 22:20:44 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/accountbook.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=683</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/accountbook.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072901/1492496</fs:itemid></item><item><title>Grapevine2：对象生命周期1</title><link>http://www.mxjava.com/grapevine2-resource.html</link><content:encoded>&lt;p&gt;Grapevine2 是在 Grapevine 的基础上升级版本，虽然是升级版，虽然是干的相同的事情，但其实已经完全是不同东西了．不但重写了内核，还重写了OR/M，更重要的是不同的实现思想．目前完成的 Grapevine2 侧重并不在界面，而是在于类的配置方式和管理对象的生命周期上．毕竟对对象生命周期的管理是基础，是重中之重．有了好的基础再加上好的想法何愁没有好的软件呢？&lt;/p&gt;
&lt;p&gt;首先介绍的是 Grapevine2 的基本配置方法．Grapevine2 支持 Xml 和 Annotation 两种不同的配置方式，也可以将这两种配置方式组合使用．我比较推荐组合的方式，因为这正是 Grapevine2 的基本思想－－快速高效不失可扩展性．下面我们来简单了解一下这几种配置方法．&lt;br /&gt;
&lt;span id=&quot;more-696&quot;&gt;&lt;/span&gt;&lt;br /&gt;
使用 Annotation 进行配置，Grapevine2 中核心 Annotation：&lt;/p&gt;
&lt;p&gt;Resource：注释标记应用程序所需的资源。 此注释可以应用于组件类的字段。如果将该注释应用于一个字段，那么初始化应用程序组件时容器将把所请求资源的一个实例注入其中。即使此注释没有被标记为 Inherited，部署工具仍然需要检查任意组件类的所有超类，以发现这些超类中所有使用此注释的地方．所有此类注释实例都指定了应用程序组件所需的资源．&lt;/p&gt;
&lt;p&gt;１使用 Annotation 进行配置：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;@Resource
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; UserLogicImpl userLogic&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Grapevine2 会生成 UserLogicImpl 实例，并分配给 userLogic．&lt;/p&gt;
&lt;p&gt;２使用 Xml + Annotation 进行配置：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;xml&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;version&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;encoding&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;根据以上配置 Grapevine2 将生成 UserLogicImpl 实例．若类的构造方法是有参数的，可以使用 value 属性为其注入参数．程序中，我们使用 Resource 的 id 属性指定 Xml  配置．如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;@Resource&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userLogic&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; UserLogic userLogic&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Grapevine2 会 Xml 配置文件中根据指定的 id 进行查询，并生成该类的实例．&lt;br /&gt;
很多情况下，系统中会将某种类设计成 Single 的方式，Resource 也提供了单实例对象的支持．使用 isSingle 属性可以将某个类的实例定义为单实例对象．&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;@Resource&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userLogic&amp;quot;&lt;/span&gt;, isSingle&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; UserLogic userLogic&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;使用 Xml + Annotation 的好处就在于降低配置文件的复杂度，不让业务过多地暴露在程序外部，同时得到 IDE 更好的支持，开发更高效．&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/java-reflection2.html&quot; title=&quot;Java反射（二） (2008年10月5日)&quot;&gt;Java反射（二）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/java-reflection3.html&quot; title=&quot;java反射（三） (2008年10月12日)&quot;&gt;java反射（三）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/java-reflection1.html&quot; title=&quot;Java反射（一） (2008年10月2日)&quot;&gt;Java反射（一）&lt;/a&gt; (1)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/java-reflection-book.html&quot; title=&quot;java反射机制（PDF） (2008年12月25日)&quot;&gt;java反射机制（PDF）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/java-dynamic-proxy.html&quot; title=&quot;Java动态代理 (2008年12月28日)&quot;&gt;Java动态代理&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/accountbook.html&quot; title=&quot;Grapevine2 上开发的财务系统 (2011年01月10日)&quot;&gt;Grapevine2 上开发的财务系统&lt;/a&gt; (2)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072902/mxjava/feedsky/s.gif?r=http://www.mxjava.com/grapevine2-resource.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/grapevine2-resource.html/feed</wfw:commentRss><slash:comments>2</slash:comments><description>Grapevine2 是在 Grapevine 的基础上升级版本，虽然是升级版，虽然是干的相同的事情，但其实已经完全是不同东西了．不但重写了内核，还重写了OR/M，更重要的是不同的实现思想．目前完成的 Grapevine2 侧重并不在界面，而是在于类的配置方式和管理对象的生命周期上．毕竟对对象生命周期的管理是基础，是重中之重．有了好的基础再加上好的想法何愁没有好的软件呢？ 首先介绍的是 Grapevine2 的基本配置方法．Grapevine2 支持 Xml 和 Annotation 两种不同的配置方式，也可以将这两种配置方式组合使用．我比较推荐组合的方式，因为这正是 Grapevine2 的基本思想－－快速高效不失可扩展性．下面我们来简单了解一下这几种配置方法． 使用 Annotation 进行配置，Grapevine2 中核心 Annotation： Resource：注释标记应用程序所需的资源。 此注释可以应用于组件类的字段。如果将该注释应用于一个字段，那么初始化应用程序组件时容器将把所请求资源的一个实例注入其中。即使此注释没有被标记为 Inherited，部署工具仍然需要检查任意组件类的所有超类，以发现这些超类中所有使用此注释的地方．所有此类注释实例都指定了应用程序组件所需的资源． １使用 Annotation 进行配置： @Resource private UserLogicImpl userLogic; Grapevine2 会生成 UserLogicImpl 实例，并分配给 userLogic． ２使用 Xml + Annotation 进行配置： &amp;#60;xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;#62; 根据以上配置 Grapevine2 将生成 UserLogicImpl 实例．若类的构造方法是有参数的，可以使用 value 属性为其注入参数．程序中，我们使用 Resource 的 id 属性指定 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/527072902/mxjava/feedsky/s.gif?r=http://www.mxjava.com/grapevine2-resource.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>开发</category><category>生命周期</category><category>反射</category><category>grapevine2</category><pubDate>Sun, 12 Dec 2010 13:42:19 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/grapevine2-resource.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=696</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/grapevine2-resource.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072902/1492496</fs:itemid></item><item><title>ibatis 动态创建表</title><link>http://www.mxjava.com/ibatis-create-table.html</link><content:encoded>&lt;p&gt;　　很多项目中需要动态创建表来存放一些临时的数据．有些临时表的名字是根据一定规则生成的，例如 表名 = &amp;#8220;abc&amp;#8221; + ID．如何利用 ibatis 来完成这个需求呢？&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;statement&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;createRecord&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;parameterClass&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;int&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
        CREATE TABLE record_$value$ (
          `id` bigint(20) NOT NULL auto_increment,
          `point_id` int(11) NOT NULL,
          `remark` varchar(512) default NULL,
          `type` tinyint(4) NOT NULL default '0',
          PRIMARY KEY  (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/statement&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　其中$_value$是动态内容，调用方法如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;sqlMapClient.&lt;span style=&quot;color: #006633;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;Record.createRecord&amp;quot;&lt;/span&gt;, id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;No related posts.&lt;/li&gt;
	&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072903/mxjava/feedsky/s.gif?r=http://www.mxjava.com/ibatis-create-table.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/ibatis-create-table.html/feed</wfw:commentRss><slash:comments>2</slash:comments><description>　　很多项目中需要动态创建表来存放一些临时的数据．有些临时表的名字是根据一定规则生成的，例如 表名 = &amp;#8220;abc&amp;#8221; + ID．如何利用 ibatis 来完成这个需求呢？ &amp;#60;statement id=&amp;#34;createRecord&amp;#34; parameterClass=&amp;#34;int&amp;#34;&amp;#62; CREATE TABLE record_$value$ ( `id` bigint(20) NOT NULL auto_increment, `point_id` int(11) NOT NULL, `remark` varchar(512) default NULL, `type` tinyint(4) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; &amp;#60;/statement&amp;#62; 　　其中$_value$是动态内容，调用方法如下： sqlMapClient.update&amp;#40;&amp;#34;Record.createRecord&amp;#34;, id&amp;#41;; 相关文章 No related posts.&lt;img src=&quot;http://www1.feedsky.com/t1/527072903/mxjava/feedsky/s.gif?r=http://www.mxjava.com/ibatis-create-table.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>开发</category><category>ibatis</category><pubDate>Tue, 28 Sep 2010 21:20:31 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/ibatis-create-table.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=695</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/ibatis-create-table.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072903/1492496</fs:itemid></item><item><title>struts 调用首页 action 的两种方法</title><link>http://www.mxjava.com/struts-pagehome.html</link><content:encoded>&lt;p&gt;　　由于 Struts 将实现于页面分离，又是以提交驱动的方式，所以不能象 jsp、php 那样直接设置首页为 index.jsp 或 index.php 就可以的。需要访问 struts servlet 并执行后台应用后由后台定向到前台 jsp 文件，所以首页的配置就出现了一点小问题。&lt;/p&gt;
&lt;p&gt;　　大多数人想到的方法是建立 index.jsp （或 html）文件，当访问这个文件时定向到 Struts 后台 action。虽然也能解决问题，不过并不完美。因为地址栏 url 将会变成定向后的 url。如 index.jsp 中定向到 index.do ，那么访问 http://www.mxjava.com 后，url 将变成 http://www.mxjava.com/index.do。&lt;span id=&quot;more-693&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;　　有两种方法可以解决这个问题：&lt;br /&gt;
１、配置 web.xml 的 welcome-file-list 如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;welcome-file-list&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;welcome-file&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;index.do&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/welcome-file&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/welcome-file-list&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　在网站根目录下创建 index.do 文件。注意这个文件一定要创建，否则系统出错。&lt;/p&gt;
&lt;p&gt;２、将 index.do 的 Struts 配置改为如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;package&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;home&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;extends&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;struts-default&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;action&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;indexAction&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;result&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;freemarker&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;/WEB-INF/ui/index.html&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/result&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/action&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/package&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　action 的 name=&amp;#8221;&quot; 即可。&lt;/p&gt;
&lt;p&gt;　　两种方法都能解决问题，并没有多少不同，个人更倾向于第一种，毕竟 struts 的 action name=&amp;#8221;&quot; 看上去比较怪异。&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-extension.html&quot; title=&quot;配置 Struts2 不处理的 url 后缀 (2010年07月30日)&quot;&gt;配置 Struts2 不处理的 url 后缀&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/web-urlrewrite-struts2.html&quot; title=&quot;进一步优化网站URL (2010年08月8日)&quot;&gt;进一步优化网站URL&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/details.html&quot; title=&quot;编程时要注意细节 (2007年09月8日)&quot;&gt;编程时要注意细节&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/vssh_wordpress_theme.html&quot; title=&quot;VSSH 结构实现 WordPress 主题功能 (2010年03月16日)&quot;&gt;VSSH 结构实现 WordPress 主题功能&lt;/a&gt; (5)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2%e9%bb%98%e8%ae%a4%e7%9a%84%e6%8b%a6%e6%88%aa%e5%99%a8%e4%b8%ba%e4%bd%95%e4%bc%9a%e5%a4%b1%e6%95%88.html&quot; title=&quot;struts2默认的拦截器为何会失效 (2007年05月17日)&quot;&gt;struts2默认的拦截器为何会失效&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-interceptor.html&quot; title=&quot;Struts2拦截器简要说明 (2008年12月28日)&quot;&gt;Struts2拦截器简要说明&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-chm.html&quot; title=&quot;Struts2 中文件帮助手册（CHM） (2008年10月31日)&quot;&gt;Struts2 中文件帮助手册（CHM）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-velocity.html&quot; title=&quot;Struts2 下自定义 VelocityContext (2007年06月28日)&quot;&gt;Struts2 下自定义 VelocityContext&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072904/mxjava/feedsky/s.gif?r=http://www.mxjava.com/struts-pagehome.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/struts-pagehome.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>　　由于 Struts 将实现于页面分离，又是以提交驱动的方式，所以不能象 jsp、php 那样直接设置首页为 index.jsp 或 index.php 就可以的。需要访问 struts servlet 并执行后台应用后由后台定向到前台 jsp 文件，所以首页的配置就出现了一点小问题。 　　大多数人想到的方法是建立 index.jsp （或 html）文件，当访问这个文件时定向到 Struts 后台 action。虽然也能解决问题，不过并不完美。因为地址栏 url 将会变成定向后的 url。如 index.jsp 中定向到 index.do ，那么访问 http://www.mxjava.com 后，url 将变成 http://www.mxjava.com/index.do。 　　有两种方法可以解决这个问题： １、配置 web.xml 的 welcome-file-list 如下： &amp;#60;welcome-file-list&amp;#62; &amp;#60;welcome-file&amp;#62;index.do&amp;#60;/welcome-file&amp;#62; &amp;#60;/welcome-file-list&amp;#62; 　　在网站根目录下创建 index.do 文件。注意这个文件一定要创建，否则系统出错。 ２、将 index.do 的 Struts 配置改为如下： &amp;#60;package name=&amp;#34;home&amp;#34; extends=&amp;#34;struts-default&amp;#34; &amp;#62; &amp;#60;action name=&amp;#34;&amp;#34; [...]&lt;img src=&quot;http://www1.feedsky.com/t1/527072904/mxjava/feedsky/s.gif?r=http://www.mxjava.com/struts-pagehome.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>开发</category><category>struts</category><pubDate>Sun, 08 Aug 2010 11:52:37 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/struts-pagehome.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=693</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/struts-pagehome.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072904/1492496</fs:itemid></item><item><title>进一步优化网站URL</title><link>http://www.mxjava.com/web-urlrewrite-struts2.html</link><content:encoded>&lt;p&gt;　　在《&lt;a href=&quot;http://www.mxjava.com/web-html-folder.html&quot;&gt;中小网站静态化目录结构设计&lt;/a&gt;》中我们以 Struts2 为例简单地介绍了通过后台解析 url 转向到 html 文件真实地址的方法。由于 Struts2 参数传递方式让 url 看上去不是很友好，那么今天我们还是按照这个思路，打造友好的 url 。&lt;br /&gt;
　　UrlRewrite 功能强大的 url 工具，它可以根据喜好，自由地设计 url 。由其需要说明的是，通过 UrlRewrite 的配置功能，我们可以为网站设计不同的 url 。关于 UrlRewrite 的配置请参见官方网站 http://www.tuckey.org/urlrewrite/（不过最近好像被河蟹了，不要紧大家可以通过 http://www.web4proxy.com/ 来访问）。&lt;/p&gt;
&lt;p&gt;　　继续以《&lt;a href=&quot;http://www.mxjava.com/web-html-folder.html&quot;&gt;中小网站静态化目录结构设计&lt;/a&gt;》中的例子为例，Struts2 解析的 url 格式为：http://www.mxjava.com/blog.do?uid=hiswing&amp;#038;id=20100807100 “？”号后面跟着的是参数，这样的 url 用在企业内部系统中还可以，但在以 seo 为上的互联网世界里，显然不是很友好，我们需要对它进行改进。&lt;span id=&quot;more-692&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;　　http://www.mxjava.com/hiswing/blog/20100807/100.html&lt;/p&gt;
&lt;p&gt;　　在博客系统中这样格式的 url 看上去很舒服，网站域名后面紧跟用户的 id （当然也可以像新浪微博那样让用户指定博客地址）表明网页属于哪个博客的。接下来 blog 是功能 id （很多博客系统改进成了个人网站，不但有博客还有相册、微博、圈子等功能，这里的功能 id 就是区分用的）表明网页属于哪个功能下的。然后跟 20100807 表明网页的创建时间，最后 100 是日志的 id。接下来要做的就是在 urlrewrite.xml 中配置 url 转向，如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;urlrewrite&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;rule&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;enabled&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;note&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
			mxjava.com
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/note&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;from&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/from&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;to&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;forward&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;/html/$2/$3/$1$4.html&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/to&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/rule&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/urlrewrite&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　from 是来源 url 的匹配格式（关于正则表达式，请查询相关资料），用括号括起来表明是一个变量，可以在 to 中用 $1 这样的形式引用。简单分析一下这个配置：&lt;/p&gt;
&lt;p&gt;([a-zA-Z0-9])：对应 url 中的 hiswing，在 to 中用 $1 引用。&lt;br /&gt;
(.*)：对应 url 中的 blog，在 to 中用 $2 引用。&lt;br /&gt;
([0-9]+)：对应 url 中的 20100807，在 to 中用 $3 引用。&lt;br /&gt;
([0-9]+).html：对应 url 中的 100.html，在to 中用 $4 引用。&lt;/p&gt;
&lt;p&gt;　　UrlRewrite 对 from 和 to 处理后，to 将匹配为：/html/blog/20100807/hiswing100.html，即转向到网站根目录/html/blog/20100807/hiswing100.html 文件。&lt;/p&gt;
&lt;p&gt;　　可能我们忽略了一个问题，还记得在《》中我们是如何设计目录结构的吗？年/月/日是不同的目录，按照现在的配置年月日是同一目录，这样又会发生目录“爆炸”。又回到最初的老路子上来，这是我们不愿看到的。解决方法有三种，从最简单的开始吧：&lt;/p&gt;
&lt;p&gt;１、将 url 形式改为：http://www.mxjava.com/hiswing/blog/2010/08/07/100.html ，并对配置文件做出相应该的改正。这是最笨也是最简单的方法，如果你不介意这样做的话。&lt;/p&gt;
&lt;p&gt;２、创建 UrlAction ，在 execute 方法中取得并解析 url ，将解析后的用户id、功能id、年、月、日、日志 id 保存到 request 中，配置 struts.xml 的 result 为： &lt;result&gt;${功能id}/${年}/${月}/${日}/${用户id}${日志id}.html&lt;/result&gt;。修改 urlrewrite.xml 配置为：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;urlrewrite&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;rule&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;enabled&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;note&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
			mxjava.com
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/note&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;from&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/from&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;to&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;forward&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;/urlaction.do?uid=$1&lt;span style=&quot;color: #ddbb00;&quot;&gt;&amp;amp;amp;&lt;/span&gt;funid=$2&lt;span style=&quot;color: #ddbb00;&quot;&gt;&amp;amp;amp;&lt;/span&gt;ymd=$3&lt;span style=&quot;color: #ddbb00;&quot;&gt;&amp;amp;amp;&lt;/span&gt;aid=$4&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/to&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/rule&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/urlrewrite&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　通过 UrlRewirte 转向到 Struts2 ，由 Action 将年月日分解，并定向到 html 文件。这个方法也很简单，也很实用，容易实现。如果你不是完美主义者的话，这个方案应该是不错的选择。不过 struts2 servlet + Action 的处理会比第一种方法多花费一点点时间（性能瓶颈在于数据库，而 servlet 和这个简单的 Action 处理所花的时间可以忽略不计）。&lt;/p&gt;
&lt;p&gt;３、如果你不愿意看系统连续进入 UrlRewrite 和 Struts2 ，仅想通都 UrlRewrite 就转向到 html 文件，那么就必需了解 UrlRewrite 的方法。UrlRewrite 可以在配置文件中配置方法，如：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;to&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;forward&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;/${upper:hello}&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/to&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　解析后为：HELLO。内置的方法有：replace、replaceFirst、escape、unescape、lower、upper、trim。遗憾的是，现有的方法并不能满足我们的需求，庆幸的是 UrlRewrite 是开源的，我们可以通过修改来达到目的。下载 UrlRewrite 源码并部署到 Eclipse 中，打开 FunctionReplacer.java 文件，找到 functionReplace 方法，该方法中做了以上方法的实现：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;replace&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;replaceAll&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;replaceAll&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;replaceFirst&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;replaceFirst&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;escape&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;escape&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;unescape&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;unescape&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;lower&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;toLower&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;toLower&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;upper&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;toUpper&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;toUpper&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;trim&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;length&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            log.&lt;span style=&quot;color: #006633;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;function ${&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; originalVarStr &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;} type '&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; varType &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;' not a valid type&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　加入我们的处理：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;replace&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;replaceAll&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;replaceAll&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;replaceFirst&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;replaceFirst&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;escape&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;escape&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;unescape&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;unescape&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;lower&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;toLower&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;toLower&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;upper&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;toUpper&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;toUpper&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;trim&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;length&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; StringFunctions.&lt;span style=&quot;color: #006633;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;splitYmd&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varType&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;  &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// splitYmd 自定义的方法&lt;/span&gt;
        	functionResult &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; MyUtils.&lt;span style=&quot;color: #006633;&quot;&gt;splitYmd&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;varSubName&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            log.&lt;span style=&quot;color: #006633;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;function ${&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; originalVarStr &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;} type '&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; varType &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;' not a valid type&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　创建 MyUtils.java ，加入如下方法：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; splitYmd&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; ymd&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; y &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; ymd.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; m &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; ymd.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; d &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; ymd.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; y &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; m &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; d&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　配置 urlrewrite.xml 为：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;urlrewrite&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;rule&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;enabled&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;note&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
			文章/hiswing/blog/20100807/1.html
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/note&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;from&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/from&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;to&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;forward&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;/html/$2/${&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;strong&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;splitYmd&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/strong&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:$3}/$1$4.html&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/to&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/rule&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/urlrewrite&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;　　注意粗体部分。另外需要注意的地方是不能为 Struts2 配置解析 html 后缀的请求，否则 UrlRewrite 处理完后将会进入 Struts2 。&lt;/p&gt;
&lt;p&gt;　　UrlRewrite 功能非常强大，可以满足我们不同的需求。当然它也不是万能的，也会有一些所不能及的事。庆幸的是它是开源的，我们可以通过扩展来达到我们的目的。&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-extension.html&quot; title=&quot;配置 Struts2 不处理的 url 后缀 (2010年07月30日)&quot;&gt;配置 Struts2 不处理的 url 后缀&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/details.html&quot; title=&quot;编程时要注意细节 (2007年09月8日)&quot;&gt;编程时要注意细节&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/the-mythical-man-month.html&quot; title=&quot;精品：人月神话（PDF） (2008年12月29日)&quot;&gt;精品：人月神话（PDF）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/what-is-the-design.html&quot; title=&quot;程序设计不是这么简单 (2008年07月3日)&quot;&gt;程序设计不是这么简单&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/blog-google.html&quot; title=&quot;把blog的搜索任务外包给google (2007年09月2日)&quot;&gt;把blog的搜索任务外包给google&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/how-can-we-do-projects.html&quot; title=&quot;怎样才能做好项目？ (2007年09月18日)&quot;&gt;怎样才能做好项目？&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/cmmi.html&quot; title=&quot;为了CMMI而CMMI (2007年09月5日)&quot;&gt;为了CMMI而CMMI&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/web-html-folder.html&quot; title=&quot;中小网站静态化目录结构设计 (2010年08月7日)&quot;&gt;中小网站静态化目录结构设计&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/vssh_wordpress_theme.html&quot; title=&quot;VSSH 结构实现 WordPress 主题功能 (2010年03月16日)&quot;&gt;VSSH 结构实现 WordPress 主题功能&lt;/a&gt; (5)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2%e9%bb%98%e8%ae%a4%e7%9a%84%e6%8b%a6%e6%88%aa%e5%99%a8%e4%b8%ba%e4%bd%95%e4%bc%9a%e5%a4%b1%e6%95%88.html&quot; title=&quot;struts2默认的拦截器为何会失效 (2007年05月17日)&quot;&gt;struts2默认的拦截器为何会失效&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072905/mxjava/feedsky/s.gif?r=http://www.mxjava.com/web-urlrewrite-struts2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/web-urlrewrite-struts2.html/feed</wfw:commentRss><slash:comments>2</slash:comments><description>　　在《中小网站静态化目录结构设计》中我们以 Struts2 为例简单地介绍了通过后台解析 url 转向到 html 文件真实地址的方法。由于 Struts2 参数传递方式让 url 看上去不是很友好，那么今天我们还是按照这个思路，打造友好的 url 。 　　UrlRewrite 功能强大的 url 工具，它可以根据喜好，自由地设计 url 。由其需要说明的是，通过 UrlRewrite 的配置功能，我们可以为网站设计不同的 url 。关于 UrlRewrite 的配置请参见官方网站 http://www.tuckey.org/urlrewrite/（不过最近好像被河蟹了，不要紧大家可以通过 http://www.web4proxy.com/ 来访问）。 　　继续以《中小网站静态化目录结构设计》中的例子为例，Struts2 解析的 url 格式为：http://www.mxjava.com/blog.do?uid=hiswing&amp;#038;id=20100807100 “？”号后面跟着的是参数，这样的 url 用在企业内部系统中还可以，但在以 seo 为上的互联网世界里，显然不是很友好，我们需要对它进行改进。 　　http://www.mxjava.com/hiswing/blog/20100807/100.html 　　在博客系统中这样格式的 url 看上去很舒服，网站域名后面紧跟用户的 id （当然也可以像新浪微博那样让用户指定博客地址）表明网页属于哪个博客的。接下来 blog 是功能 id （很多博客系统改进成了个人网站，不但有博客还有相册、微博、圈子等功能，这里的功能 id 就是区分用的）表明网页属于哪个功能下的。然后跟 20100807 表明网页的创建时间，最后 100 是日志的 id。接下来要做的就是在 urlrewrite.xml [...]&lt;img src=&quot;http://www1.feedsky.com/t1/527072905/mxjava/feedsky/s.gif?r=http://www.mxjava.com/web-urlrewrite-struts2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>开发</category><category>程序设计</category><category>urlrewrite</category><category>struts</category><pubDate>Sun, 08 Aug 2010 09:54:35 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/web-urlrewrite-struts2.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=692</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/web-urlrewrite-struts2.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072905/1492496</fs:itemid></item><item><title>中小网站静态化目录结构设计</title><link>http://www.mxjava.com/web-html-folder.html</link><content:encoded>&lt;p&gt;　　大型网站每天的访问量是惊人的，比如淘宝网每日独立IP超4000万。对于一些中小型的网站来说，虽然每日独立IP不会如此巨大，但若不对网站程序进行优化，也将会导致访问的速度。&lt;/p&gt;
&lt;p&gt;　　目前很多网站都会进行静态化从而解决服务器的压力，也有一些网站采取了缓存的方式，有实力的企业在这两种基础之上增加服务器集群。我们今天想要探讨的并不是缓存，也不是集群，更不是如何静态化页面，而是如何设计静态化页面的目录结构。&lt;/p&gt;
&lt;p&gt;　　举个例子，比如博客类网站，这种网站每天都会有很多用户注册，也会有很多用户发表日志。一般我们会在用户点击发表日志后对该日志进行静态化，生成 html 文件。这时问题来了，生成的 html 文件放在什么地方？先来回顾一下访问 web 上的 html 文件的方法。比如 mypage.html 这样一个 html 文件，放在 web 的根目录（以 mxjava 为例），访问时要在地址栏中输入 http://www.mxjava.com/mypage.html 。将该文件转移到 blog 目录下后，访问时就要变成 http://www.mxjava.com/blog/mypage.html 。也就是说 url 是按照目录结构进行访问的。回到刚才的博客程序，为了能让访问者能够访问到刚才生成的 html 文件，我们可以把该文件放在网站的根目录，这时访问者只要输入网站 url + html 文件名就可以浏览这个文件了。这样做虽然简单，但有很多问题，比如所有的 html 放在同一个目录下会导致文件“爆炸”，对文件的管理困难，url 中没有用户的博客地址信息可能会让用户离你而去等。问题很多，最直接的解决方案是为每位注册用户建立一个目录，将用户的 html 文件保存到对应的目录中。这时访问时 url 将变成 http://www.mxjava.com/用户名/mypage.html。url 中出现了用户博客信息也解决了文件放在同一目录下的尴尬。这样的解决方案看起来不错，但问题仍然存在，假设该网站每天会注册一百个用户，十天就一千个，一百天就一万个。将这一万个目录都放在网站根目录下看上去也很可怕，况且日子一天一天过，用户还在增加，目录也在增加&amp;#8230;&amp;#8230;由于目录数量的庞大，也许不久后，网站会崩溃，系统也会瘫痪。&lt;span id=&quot;more-691&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;　　那么该如何解决这个问题呢？首先可以用日期来做为目录，如：root/2010/08/07/。然后将所有用户同一天发布的文章保存的同一天的目录中，文件名为用户id + 文章id的形式（用户id+文章id的形式可以解决不同用户访问同一文件的问题）。接下来要解决的是用户访问的问题，由于直接访问 html 文件的 url 是以目录结构来设定的，要直接访问的话就会出现上面的问题。那么将控制访问文件的权限从用户那里转移到程序来。以 struts2 为例，http://www.mxjava.com/blog.do?uid=hiswing&amp;#038;id=20100807100 这个 url 将访问 blogAction ，在这个 Action 中解析 url ，将解析好的 url 保存在 request 中。如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; uid &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; request.&lt;span style=&quot;color: #006633;&quot;&gt;getParameter&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;uid&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; id &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; request.&lt;span style=&quot;color: #006633;&quot;&gt;getParameter&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; year &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; id.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; month &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; id.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; day &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; id.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; aid &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; id.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;在 struts.xml 文件中配置 result 为 &lt;result&gt;/${year}/${month}/${day}/${uid}${aid}.html&lt;/result&gt;，这样解析后的 url 就变成 /2010/08/07/hiswing100.html&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;关于性能&lt;/strong&gt;：直接访问 html 速度肯定比用上面的方法要稍微快一些，不过真正的性能瓶颈并不在应用，大部分都在数据库访问。况且程序只是处理一下 url 性能的影响可以忽略不计。&lt;br /&gt;
　　&lt;strong&gt;关于目录结构&lt;/strong&gt;：以日期为单位，100年也只有100个年目录，每年下面有12个月目录，每月下面最多31个日目录，每天用户也许不会超过2000篇文章，若超过2000篇文章，那就恭喜您了，您要发达了。&lt;br /&gt;
　　&lt;strong&gt;关于url 的友好度&lt;/strong&gt;：struts2 可以自由控制后缀，但参数还是要用 get 的方式传的。若觉得这种 url 不友好，那么可以使用 UrlRewrite 来解决这个问题。关于 UrlRewrite 的介绍网站有太多文章了，我们就不多说了。不过在下一篇日志中我们将介绍如何用改造 UrlRewrite 来满足我们不同的需求－－自定义 url 解析方法。&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/web-urlrewrite-struts2.html&quot; title=&quot;进一步优化网站URL (2010年08月8日)&quot;&gt;进一步优化网站URL&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/the-mythical-man-month.html&quot; title=&quot;精品：人月神话（PDF） (2008年12月29日)&quot;&gt;精品：人月神话（PDF）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/what-is-the-design.html&quot; title=&quot;程序设计不是这么简单 (2008年07月3日)&quot;&gt;程序设计不是这么简单&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/blog-google.html&quot; title=&quot;把blog的搜索任务外包给google (2007年09月2日)&quot;&gt;把blog的搜索任务外包给google&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/how-can-we-do-projects.html&quot; title=&quot;怎样才能做好项目？ (2007年09月18日)&quot;&gt;怎样才能做好项目？&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/cmmi.html&quot; title=&quot;为了CMMI而CMMI (2007年09月5日)&quot;&gt;为了CMMI而CMMI&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072906/mxjava/feedsky/s.gif?r=http://www.mxjava.com/web-html-folder.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/web-html-folder.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　大型网站每天的访问量是惊人的，比如淘宝网每日独立IP超4000万。对于一些中小型的网站来说，虽然每日独立IP不会如此巨大，但若不对网站程序进行优化，也将会导致访问的速度。 　　目前很多网站都会进行静态化从而解决服务器的压力，也有一些网站采取了缓存的方式，有实力的企业在这两种基础之上增加服务器集群。我们今天想要探讨的并不是缓存，也不是集群，更不是如何静态化页面，而是如何设计静态化页面的目录结构。 　　举个例子，比如博客类网站，这种网站每天都会有很多用户注册，也会有很多用户发表日志。一般我们会在用户点击发表日志后对该日志进行静态化，生成 html 文件。这时问题来了，生成的 html 文件放在什么地方？先来回顾一下访问 web 上的 html 文件的方法。比如 mypage.html 这样一个 html 文件，放在 web 的根目录（以 mxjava 为例），访问时要在地址栏中输入 http://www.mxjava.com/mypage.html 。将该文件转移到 blog 目录下后，访问时就要变成 http://www.mxjava.com/blog/mypage.html 。也就是说 url 是按照目录结构进行访问的。回到刚才的博客程序，为了能让访问者能够访问到刚才生成的 html 文件，我们可以把该文件放在网站的根目录，这时访问者只要输入网站 url + html 文件名就可以浏览这个文件了。这样做虽然简单，但有很多问题，比如所有的 html 放在同一个目录下会导致文件“爆炸”，对文件的管理困难，url 中没有用户的博客地址信息可能会让用户离你而去等。问题很多，最直接的解决方案是为每位注册用户建立一个目录，将用户的 html 文件保存到对应的目录中。这时访问时 url 将变成 http://www.mxjava.com/用户名/mypage.html。url 中出现了用户博客信息也解决了文件放在同一目录下的尴尬。这样的解决方案看起来不错，但问题仍然存在，假设该网站每天会注册一百个用户，十天就一千个，一百天就一万个。将这一万个目录都放在网站根目录下看上去也很可怕，况且日子一天一天过，用户还在增加，目录也在增加&amp;#8230;&amp;#8230;由于目录数量的庞大，也许不久后，网站会崩溃，系统也会瘫痪。 　　那么该如何解决这个问题呢？首先可以用日期来做为目录，如：root/2010/08/07/。然后将所有用户同一天发布的文章保存的同一天的目录中，文件名为用户id + 文章id的形式（用户id+文章id的形式可以解决不同用户访问同一文件的问题）。接下来要解决的是用户访问的问题，由于直接访问 html 文件的 url 是以目录结构来设定的，要直接访问的话就会出现上面的问题。那么将控制访问文件的权限从用户那里转移到程序来。以 struts2 为例，http://www.mxjava.com/blog.do?uid=hiswing&amp;#038;id=20100807100 这个 url 将访问 blogAction [...]&lt;img src=&quot;http://www1.feedsky.com/t1/527072906/mxjava/feedsky/s.gif?r=http://www.mxjava.com/web-html-folder.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>开发</category><category>程序设计</category><pubDate>Sat, 07 Aug 2010 20:03:33 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/web-html-folder.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=691</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/web-html-folder.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072906/1492496</fs:itemid></item><item><title>配置 Struts2 不处理的 url 后缀</title><link>http://www.mxjava.com/struts2-extension.html</link><content:encoded>&lt;p&gt;　　我不想说如何配置 Struts2 处理的 url 后缀名，因为关于这方面的文章太多了，今天我说一说如何配置 Struts2 不处理的 url 后缀名。&lt;/p&gt;
&lt;p&gt;　　在 struts.xml 或 struts.properties 配置文件中配置 struts.action.extension 项可以设置 Struts2 处理的 url 请求后缀名，&lt;br /&gt;
　　如：struts.action.extension = action, do&lt;br /&gt;
　　这样 url 是这样：http://www.mxjava.com/index.do&lt;/p&gt;
&lt;p&gt;　　很多网站的 url 是没有后缀的，比如利用 ror 开发的网站的 url 类似这样：http://www.mxjava.com/index 。这样的 url 对搜索引擎更加友好。其实利用上面讲的 struts.action.extension 也可以让 Struts2 的 url 变成这样。很简单，只要将 struts.action.extension 设置为空即可。&lt;br /&gt;
　　如：struts.action.extension =&lt;br /&gt;
　　此时 url 是这样：http://www.mxjava.com/index&lt;br /&gt;
　　问题来了，服务器的某个目录下有个 html 文件是希望被访问的，这时在地址栏输入该 html 文件的地址 http://www.mxjava.com/10000.html 后画面上显示的并不是该 html 的内容，而的系统出错信息：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Struts has detected an unhandled exception:&lt;br /&gt;
# Messages: There is no Action mapped for namespace / and action name 10000.html.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span id=&quot;more-690&quot;&gt;&lt;/span&gt;&lt;br /&gt;
　　Struts2 为我们提供了处理的请求后缀配置，但并没有提供不处理的请求后缀配置，难道要为 struts.action.extension 追加 html 的配置，并为每个 html 专门建立一个 Action ？如果网站需要全站静态化，又当如何处理？？&lt;br /&gt;
　　其实并不用这么麻烦，关键还在 struts.action.extension 上。只要将配置改为：&lt;br /&gt;
　　struts.action.extension = ,&lt;br /&gt;
　　在等号后面加个逗号即可。&lt;/p&gt;
&lt;p&gt;　　原理是这样的：Struts2 在取得 struts.action.extension 配置后，如果为空，就会对所有请求进行拦截（拦截后只对后缀为空的请求做处理，其它请求出错）。当为不空字符串时，先用逗号分割字符串，然后只对配置的后缀进行拦截。当配置仅为一个逗号时，分割后为空，所以只对后缀为空的请求进行拦截。这时若请求后缀为 .do 或 .action 等的场合，将跳转到 404 页面而不是出错信息页面。&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/web-urlrewrite-struts2.html&quot; title=&quot;进一步优化网站URL (2010年08月8日)&quot;&gt;进一步优化网站URL&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/details.html&quot; title=&quot;编程时要注意细节 (2007年09月8日)&quot;&gt;编程时要注意细节&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/vssh_wordpress_theme.html&quot; title=&quot;VSSH 结构实现 WordPress 主题功能 (2010年03月16日)&quot;&gt;VSSH 结构实现 WordPress 主题功能&lt;/a&gt; (5)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2%e9%bb%98%e8%ae%a4%e7%9a%84%e6%8b%a6%e6%88%aa%e5%99%a8%e4%b8%ba%e4%bd%95%e4%bc%9a%e5%a4%b1%e6%95%88.html&quot; title=&quot;struts2默认的拦截器为何会失效 (2007年05月17日)&quot;&gt;struts2默认的拦截器为何会失效&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-interceptor.html&quot; title=&quot;Struts2拦截器简要说明 (2008年12月28日)&quot;&gt;Struts2拦截器简要说明&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-chm.html&quot; title=&quot;Struts2 中文件帮助手册（CHM） (2008年10月31日)&quot;&gt;Struts2 中文件帮助手册（CHM）&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts2-velocity.html&quot; title=&quot;Struts2 下自定义 VelocityContext (2007年06月28日)&quot;&gt;Struts2 下自定义 VelocityContext&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/struts-pagehome.html&quot; title=&quot;struts 调用首页 action 的两种方法 (2010年08月8日)&quot;&gt;struts 调用首页 action 的两种方法&lt;/a&gt; (1)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072907/mxjava/feedsky/s.gif?r=http://www.mxjava.com/struts2-extension.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/struts2-extension.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　我不想说如何配置 Struts2 处理的 url 后缀名，因为关于这方面的文章太多了，今天我说一说如何配置 Struts2 不处理的 url 后缀名。 　　在 struts.xml 或 struts.properties 配置文件中配置 struts.action.extension 项可以设置 Struts2 处理的 url 请求后缀名， 　　如：struts.action.extension = action, do 　　这样 url 是这样：http://www.mxjava.com/index.do 　　很多网站的 url 是没有后缀的，比如利用 ror 开发的网站的 url 类似这样：http://www.mxjava.com/index 。这样的 url 对搜索引擎更加友好。其实利用上面讲的 struts.action.extension 也可以让 Struts2 的 url 变成这样。很简单，只要将 struts.action.extension 设置为空即可。 　　如：struts.action.extension = 　　此时 url 是这样：http://www.mxjava.com/index 　　问题来了，服务器的某个目录下有个 html 文件是希望被访问的，这时在地址栏输入该 html 文件的地址 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/527072907/mxjava/feedsky/s.gif?r=http://www.mxjava.com/struts2-extension.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>开发</category><category>struts</category><pubDate>Fri, 30 Jul 2010 22:37:28 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/struts2-extension.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=690</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/struts2-extension.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072907/1492496</fs:itemid></item><item><title>我最早的博客</title><link>http://www.mxjava.com/ycool.html</link><content:encoded>&lt;p&gt;　　突然间发现歪酷博客的 url 更改了，没记错的话以前应该是 yclublog.com，而现在改为 ycool.com。相对来说现在这个更加好记。&lt;/p&gt;
&lt;p&gt;　　为什么会突然提到歪酷博客呢？我又怎么会忘记它呢？因为它是我注册的第一个博客，地址为：http://hiswing.ycool.com 。虽然大部分已经被删除了，但总算还保留了一些想不起来了的贴子，现在看起来还真亲切。&lt;/p&gt;
&lt;p&gt;　　当时真年轻啊！侧边栏的友情链接全都是常去的技术网站，有些已经不在了，甚至域名都被域名贩子抢注了。还有当时林白主持的《大话新闻》，这是一档 tom 推出的网络电台节目，当时我很喜欢。&lt;/p&gt;
&lt;p&gt;　　这也让我想起我第二个注册的博客，blogdriver.com ，当时可谓红极一时，而现在&amp;#8230;&amp;#8230;&lt;/p&gt;
&lt;p&gt;　　把博客当作日记本来玩的话，这也许就是最好的回报了，不是吗。&lt;/p&gt;

	&lt;h4 style=&quot;font-size:14px;&quot;&gt;相关文章&lt;/h4&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;No related posts.&lt;/li&gt;
	&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/527072908/mxjava/feedsky/s.gif?r=http://www.mxjava.com/ycool.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/ycool.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　突然间发现歪酷博客的 url 更改了，没记错的话以前应该是 yclublog.com，而现在改为 ycool.com。相对来说现在这个更加好记。 　　为什么会突然提到歪酷博客呢？我又怎么会忘记它呢？因为它是我注册的第一个博客，地址为：http://hiswing.ycool.com 。虽然大部分已经被删除了，但总算还保留了一些想不起来了的贴子，现在看起来还真亲切。 　　当时真年轻啊！侧边栏的友情链接全都是常去的技术网站，有些已经不在了，甚至域名都被域名贩子抢注了。还有当时林白主持的《大话新闻》，这是一档 tom 推出的网络电台节目，当时我很喜欢。 　　这也让我想起我第二个注册的博客，blogdriver.com ，当时可谓红极一时，而现在&amp;#8230;&amp;#8230; 　　把博客当作日记本来玩的话，这也许就是最好的回报了，不是吗。 相关文章 No related posts.&lt;img src=&quot;http://www1.feedsky.com/t1/527072908/mxjava/feedsky/s.gif?r=http://www.mxjava.com/ycool.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>ycool</category><category>随笔</category><pubDate>Sun, 11 Jul 2010 21:09:18 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/ycool.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=689</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/ycool.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/527072908/1492496</fs:itemid></item></channel></rss>
