<?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>Sun, 08 Aug 2010 03:52:37 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>Sun, 08 Aug 2010 03:52:37 GMT</pubDate><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;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
	&lt;welcome-file-list&gt;
		&lt;welcome-file&gt;index.do&lt;/welcome-file&gt;
	&lt;/welcome-file-list&gt;
&lt;/pre&gt;
&lt;p&gt;　　在网站根目录下创建 index.do 文件。注意这个文件一定要创建，否则系统出错。&lt;/p&gt;
&lt;p&gt;２、将 index.do 的 Struts 配置改为如下：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;package name=&quot;home&quot; extends=&quot;struts-default&quot; &gt;
		&lt;action name=&quot;&quot; class=&quot;indexAction&quot;&gt;
			&lt;result type=&quot;freemarker&quot;&gt;/WEB-INF/ui/index.html&lt;/result&gt;
		&lt;/action&gt;
	&lt;/package&gt;
&lt;/pre&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; (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/vssh_wordpress_theme.html&quot; title=&quot;VSSH 结构实现 WordPress 主题功能 (2010年03月16日)&quot;&gt;VSSH 结构实现 WordPress 主题功能&lt;/a&gt; (3)&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/401009773/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/401009773/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/401009773/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/struts-pagehome.html/feed</wfw:commentRss><slash:comments>0</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 如下：

	
		index.do
	

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


		
			/WEB-INF/ui/index.html
		
	

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

	相关文章
	
	配置 Struts2 不处理的 url 后缀 (0)
	进一步优化网站URL (0)
	编程时要注意细节 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/401009773/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/401009773/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/401009773/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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/401009773/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;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;urlrewrite&gt;
	&lt;rule enabled=&quot;true&quot;&gt;
		&lt;note&gt;
			mxjava.com
		&lt;/note&gt;
		&lt;from&gt;^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$&lt;/from&gt;
		&lt;to type=&quot;forward&quot;&gt;/html/$2/$3/$1$4.html&lt;/to&gt;
	&lt;/rule&gt;
&lt;/urlrewrite&gt;
&lt;/pre&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;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;urlrewrite&gt;
	&lt;rule enabled=&quot;true&quot;&gt;
		&lt;note&gt;
			mxjava.com
		&lt;/note&gt;
		&lt;from&gt;^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$&lt;/from&gt;
		&lt;to type=&quot;forward&quot;&gt;/urlaction.do?uid=$1&amp;amp;funid=$2&amp;amp;ymd=$3&amp;amp;aid=$4&lt;/to&gt;
	&lt;/rule&gt;
&lt;/urlrewrite&gt;
&lt;/pre&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;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;to type=&quot;forward&quot;&gt;/${upper:hello}&lt;/to&gt;
&lt;/pre&gt;
&lt;p&gt;　　解析后为：HELLO。内置的方法有：replace、replaceFirst、escape、unescape、lower、upper、trim。遗憾的是，现有的方法并不能满足我们的需求，庆幸的是 UrlRewrite 是开源的，我们可以通过修改来达到目的。下载 UrlRewrite 源码并部署到 Eclipse 中，打开 FunctionReplacer.java 文件，找到 functionReplace 方法，该方法中做了以上方法的实现：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
        if (&quot;replace&quot;.equalsIgnoreCase(varType) || &quot;replaceAll&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.replaceAll(varSubName);
        } else if (&quot;replaceFirst&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.replaceFirst(varSubName);
        } else if (&quot;escape&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.escape(varSubName);
        } else if (&quot;unescape&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.unescape(varSubName);
        } else if (&quot;lower&quot;.equalsIgnoreCase(varType) || &quot;toLower&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.toLower(varSubName);
        } else if (&quot;upper&quot;.equalsIgnoreCase(varType) || &quot;toUpper&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.toUpper(varSubName);
        } else if (&quot;trim&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.trim(varSubName);
        } else if (&quot;length&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.length(varSubName);
        } else {
            log.error(&quot;function ${&quot; + originalVarStr + &quot;} type '&quot; + varType + &quot;' not a valid type&quot;);
        }
&lt;/pre&gt;
&lt;p&gt;　　加入我们的处理：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
        if (&quot;replace&quot;.equalsIgnoreCase(varType) || &quot;replaceAll&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.replaceAll(varSubName);
        } else if (&quot;replaceFirst&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.replaceFirst(varSubName);
        } else if (&quot;escape&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.escape(varSubName);
        } else if (&quot;unescape&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.unescape(varSubName);
        } else if (&quot;lower&quot;.equalsIgnoreCase(varType) || &quot;toLower&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.toLower(varSubName);
        } else if (&quot;upper&quot;.equalsIgnoreCase(varType) || &quot;toUpper&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.toUpper(varSubName);
        } else if (&quot;trim&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.trim(varSubName);
        } else if (&quot;length&quot;.equalsIgnoreCase(varType)) {
            functionResult = StringFunctions.length(varSubName);
        } else if (&quot;splitYmd&quot;.equalsIgnoreCase(varType)) {  // splitYmd 自定义的方法
        	functionResult = MyUtils.splitYmd(varSubName);
        } else {
            log.error(&quot;function ${&quot; + originalVarStr + &quot;} type '&quot; + varType + &quot;' not a valid type&quot;);
        }
&lt;/pre&gt;
&lt;p&gt;　　创建 MyUtils.java ，加入如下方法：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
	public static String splitYmd(String ymd) {
		String y = ymd.substring(0, 4);
		String m = ymd.substring(4, 6);
		String d = ymd.substring(6);

		return y + &quot;/&quot; + m + &quot;/&quot; + d;
	}
&lt;/pre&gt;
&lt;p&gt;　　配置 urlrewrite.xml 为：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;urlrewrite&gt;
	&lt;rule enabled=&quot;true&quot;&gt;
		&lt;note&gt;
			文章/hiswing/blog/20100807/1.html
		&lt;/note&gt;
		&lt;from&gt;^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$&lt;/from&gt;
		&lt;to type=&quot;forward&quot;&gt;/html/$2/${&lt;strong&gt;splitYmd&lt;/strong&gt;:$3}/$1$4.html&lt;/to&gt;
	&lt;/rule&gt;
&lt;/urlrewrite&gt;
&lt;/pre&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; (3)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/swing-design.html&quot; title=&quot;Swing程序的基本设计结构 (2008年09月2日)&quot;&gt;Swing程序的基本设计结构&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400991840/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400991840/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400991840/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/web-urlrewrite-struts2.html/feed</wfw:commentRss><slash:comments>0</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 中配置 url 转向，如下：


	
		
			mxjava.com
		
		^/([a-zA-Z0-9]+)/(.*)/([0-9]+)/([0-9]+).html$
		/html/$2/$3/$1$4.html
	


　　from 是来源 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/400991840/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400991840/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400991840/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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/400991840/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;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
String uid = request.getParameter(&quot;uid&quot;);
String id = request.getParameter(&quot;id&quot;);
String year = id.substring(0, 4);
String month = id.substring(4, 6);
String day = id.substring(6, 8);
String aid = id.substring(8);
&lt;/pre&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; (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/swing-design.html&quot; title=&quot;Swing程序的基本设计结构 (2008年09月2日)&quot;&gt;Swing程序的基本设计结构&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/grape-thinking.html&quot; title=&quot;Grape框架的基本思想 (2008年09月6日)&quot;&gt;Grape框架的基本思想&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400868297/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868297/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868297/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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 ，在这个 Action 中解析 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/400868297/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868297/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868297/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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/400868297/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; (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/vssh_wordpress_theme.html&quot; title=&quot;VSSH 结构实现 WordPress 主题功能 (2010年03月16日)&quot;&gt;VSSH 结构实现 WordPress 主题功能&lt;/a&gt; (3)&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; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400868298/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868298/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868298/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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 文件的地址 http://www.mxjava.com/10000.html 后画面上显示的并不是该 html 的内容，而的系统出错信息：
 Struts has detected [...]&lt;img src=&quot;http://www1.feedsky.com/t1/400868298/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868298/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868298/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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/400868298/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/400868299/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868299/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868299/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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/400868299/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;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868299/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868299/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&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/400868299/1492496</fs:itemid></item><item><title>最近的生活</title><link>http://www.mxjava.com/worldcup.html</link><content:encoded>&lt;p&gt;　　出来冒个泡，证明我的存在。&lt;/p&gt;
&lt;p&gt;　　最近生活的很累，心里上累，身体上也累，总之一个字－－累。&lt;/p&gt;
&lt;p&gt;　　96年开始，我成了一个伪球迷，98年开始从伪球迷升级成了球迷。德甲、意甲、英超有球就看，陷入了足球里不能自拔。但令我感到自靠的是迄今为止我从来没有看过任何一场国内的联赛。足够证明我是一个保持原则的人，即中国足球不雄起，就绝对不看。&lt;/p&gt;
&lt;p&gt;　　工作之后又变回了伪球迷，甚至连伪球迷都不算，因为只有在世办杯的时候才会看球。&lt;/p&gt;
&lt;p&gt;　　累的原因是因为看世界杯，１２点睡，２点半起，４点半睡，７点起。就这样折腾地过了小半个月，人已经憔悴不堪。&lt;/p&gt;
&lt;p&gt;　　终于就要熬出头了，过了今晚，一切都恢复正常，令人期待。希望西班牙夺冠。&lt;/p&gt;
&lt;p&gt;　　世界杯之余还抽空注册了几个域名，个人感觉都很不错，喜欢的话可以联系我。&lt;/p&gt;
&lt;p&gt;　　8nan.com&lt;br /&gt;
　　51dear.com&lt;br /&gt;
　　taorizhi.com&lt;br /&gt;
　　android-cn.net&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/mydomainname.html&quot; title=&quot;我拥有的几个域名 (2008年10月17日)&quot;&gt;我拥有的几个域名&lt;/a&gt; (8)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html&quot; title=&quot;2010年南非世界杯赛程及直播表 (2010年06月8日)&quot;&gt;2010年南非世界杯赛程及直播表&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400868300/mxjava/feedsky/s.gif?r=http://www.mxjava.com/worldcup.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868300/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868300/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/worldcup.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　出来冒个泡，证明我的存在。
　　最近生活的很累，心里上累，身体上也累，总之一个字－－累。
　　96年开始，我成了一个伪球迷，98年开始从伪球迷升级成了球迷。德甲、意甲、英超有球就看，陷入了足球里不能自拔。但令我感到自靠的是迄今为止我从来没有看过任何一场国内的联赛。足够证明我是一个保持原则的人，即中国足球不雄起，就绝对不看。
　　工作之后又变回了伪球迷，甚至连伪球迷都不算，因为只有在世办杯的时候才会看球。
　　累的原因是因为看世界杯，１２点睡，２点半起，４点半睡，７点起。就这样折腾地过了小半个月，人已经憔悴不堪。
　　终于就要熬出头了，过了今晚，一切都恢复正常，令人期待。希望西班牙夺冠。
　　世界杯之余还抽空注册了几个域名，个人感觉都很不错，喜欢的话可以联系我。
　　8nan.com
　　51dear.com
　　taorizhi.com
　　android-cn.net
　　还有几个是非卖品，这里就不说了。

	相关文章
	
	我拥有的几个域名 (8)
	2010年南非世界杯赛程及直播表 (0)&lt;img src=&quot;http://www1.feedsky.com/t1/400868300/mxjava/feedsky/s.gif?r=http://www.mxjava.com/worldcup.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868300/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868300/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>世界杯</category><category>东拉西扯</category><category>域名</category><pubDate>Sun, 11 Jul 2010 17:18:49 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/worldcup.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=688</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/worldcup.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/400868300/1492496</fs:itemid></item><item><title>第一个 Android 程序 — Hello World</title><link>http://www.mxjava.com/android-helloworld.html</link><content:encoded>&lt;p&gt;　　通过《Android 开发环境的安装》我们了解了 Android 的一些基本知识，也介绍了如何安装 Android 开发环境。就从这一篇开始进入 Android 开发的学习过程。&lt;/p&gt;
&lt;p&gt;　　任何一门语言或者框架的第一课都是精典的 Hello World，我们跟随主流，从 Hello World 开始吧。&lt;/p&gt;
&lt;p&gt;　　有了 Eclipse 插件（Android ADT）创建并运行一个工程是十分容易的，只要简单的2个步骤就可以顺利完成 HelloWorld 。&lt;/p&gt;
&lt;p&gt;1、单击菜单 File &gt; New &gt; Project 弹出的窗口选择创建一个新的 Android 项目。&lt;br /&gt;
2、并在创建 Android 项目的对话框里填写项目的详细信息，确认无误后按下 finish 按钮一个工程就被顺利的创建成功了。&lt;span id=&quot;more-687&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/4836097d491a/5kdaxf41.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;创建的工程结构如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/9753097d491b/ndow8jai.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;简单介绍一下几个比较重要的目录。&lt;/strong&gt;&lt;br /&gt;
1、src 目录用于存放代码。&lt;br /&gt;
2、gen 目录用于存放对应该资源文件的代码。&lt;br /&gt;
3、res 目录用于存放资源文件。&lt;br /&gt;
4、res\layout 目录用于存放布局描述文件。&lt;br /&gt;
5、res\values 目录用于存放常量定义文件。&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;简单介绍一下几个比较重要的文件。&lt;/strong&gt;&lt;br /&gt;
1、HelloWorld.java 程序代码文件，其内容与一般 Java 程序格式完全相同。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
package com.mxjava.android.hello;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
&lt;/pre&gt;
&lt;p&gt;　　我们看到 HelloWorld 类继承了 Activity 类，并且覆写了 onCreate() 方法。方法中利用 setContentView() 方法来设置界面的布局。这里重点说明一下该方法的参数 R.layout.main 。R.java 文件存放在 gen 目录下，layout 是该类中的静态类，它对应 res\layout 目录。常量 main 对应 main.xml 文件。所以 R.layout.main 就对应着 res\layout\main.xml 文件。若在 res\layout\ 目录下新增一 Android 配置文件，ADT 会自动在 R 中增加相对应的代码。&lt;/p&gt;
&lt;p&gt;　　main.xml 是界面布局配置文件，用于设计显示界面样式。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &gt;
&lt;TextView
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;@string/hello&quot;
    /&gt;
&lt;/LinearLayout&gt;
&lt;/pre&gt;
&lt;p&gt;　　布局配置中设置了一个 TextView，表示界面上显示一个文本标签，属性 android:text 是显示的内容。这里是 @string/hello 。在这里 @ 是引用标志，string 是常量配置文件 string.xml ，hello 是 string.xml 中 name=&amp;#8221;hello&amp;#8221; 的配置项。让我们再看看 string.xml 的配置：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;resources&gt;
    &lt;string name=&quot;hello&quot;&gt;Hello World, HelloWorld!&lt;/string&gt;
    &lt;string name=&quot;app_name&quot;&gt;HelloWorld&lt;/string&gt;
&lt;/resources&gt;
&lt;/pre&gt;
&lt;p&gt;　　hello 的值为 Hello World, HelloWorld!。所以文本标签的显示内容就为Hello World, HelloWorld!。&lt;/p&gt;
&lt;p&gt;　　每一个项目都包含一个 AndroidManifest.xml 配置文件，该文件配置了程序的各种设定。比如前端应用程序 Activity (Foreground Activities)，后台服务（Background Services）以及间隔执行的 Activity (Intermittent Activities)。HelloWorld 类继承自 Activity ，所以它是一个前端应用程序，其配置如下：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
      package=&quot;com.mxjava.android.hello&quot;
      android:versionCode=&quot;1&quot;
      android:versionName=&quot;1.0&quot;&gt;
    &lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&gt;
        &lt;activity android:name=&quot;.HelloWorld&quot;
                  android:label=&quot;@string/app_name&quot;&gt;
            &lt;intent-filter&gt;
                &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
                &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;
    &lt;/application&gt;
&lt;/manifest&gt;
&lt;/pre&gt;
&lt;p&gt;　　application 标签设置了程序的基本信息。如：android:icon 程序的图标，android:label 程序的名称等。文件中有一个名为 HelloWorld 的 Activity，并为其设置了 Intent-filter ，action 和 category 两个标签表明了该 Activity 为程序默认要运行的 Activity（因为可以建立多个继承自 Activity 的类，每个类都要在该文件进行配置，所以为其指定默认运行的 Activity 至关重要）。&lt;/p&gt;
&lt;p&gt;　　了解了以上内容后，就可以运行我们的程序了。右键点击工程 &gt; Run As &gt; Android Application ，程序将启动运行。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/3515597d491c/wk692oga.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;　　注意：模拟器将模拟 Android 手机启动过程，可能有点慢，请耐心等待。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/8084097d491e/4ui9x39w.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;　　有了 ADT 我们不用编写一行代码就可以运行 HelloWorld，非常方便。不过 Activity 类的应用程序有着自己的运行方式，为了能更好的编写代码，我们必须了解其运行方式，如下：&lt;/p&gt;
&lt;p&gt;　　onCreate -&gt; onRestore -&gt;onStart -&gt; onResume -&gt; onSave -&gt; onPause -&gt; onStop -&gt; onDestroy&lt;/p&gt;
&lt;p&gt;　　onCreate -&gt; onRestore -&gt;onStart 为应用的启动，一般 Activity 用 onCreate。当程序失去焦点或者被关闭将会触发 onPause 状态，当程序再次被唤醒，将会回到 onResume 状态。&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-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/400868301/mxjava/feedsky/s.gif?r=http://www.mxjava.com/android-helloworld.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868301/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868301/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/android-helloworld.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　通过《Android 开发环境的安装》我们了解了 Android 的一些基本知识，也介绍了如何安装 Android 开发环境。就从这一篇开始进入 Android 开发的学习过程。
　　任何一门语言或者框架的第一课都是精典的 Hello World，我们跟随主流，从 Hello World 开始吧。
　　有了 Eclipse 插件（Android ADT）创建并运行一个工程是十分容易的，只要简单的2个步骤就可以顺利完成 HelloWorld 。
1、单击菜单 File &gt; New &gt; Project 弹出的窗口选择创建一个新的 Android 项目。
2、并在创建 Android 项目的对话框里填写项目的详细信息，确认无误后按下 finish 按钮一个工程就被顺利的创建成功了。

创建的工程结构如下：

　　简单介绍一下几个比较重要的目录。
1、src 目录用于存放代码。
2、gen 目录用于存放对应该资源文件的代码。
3、res 目录用于存放资源文件。
4、res\layout 目录用于存放布局描述文件。
5、res\values 目录用于存放常量定义文件。
　　简单介绍一下几个比较重要的文件。
1、HelloWorld.java 程序代码文件，其内容与一般 Java 程序格式完全相同。

package com.mxjava.android.hello;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorld extends Activity {
    /** Called when the activity is [...]&lt;img src=&quot;http://www1.feedsky.com/t1/400868301/mxjava/feedsky/s.gif?r=http://www.mxjava.com/android-helloworld.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868301/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868301/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>android</category><category>编程开发</category><pubDate>Thu, 17 Jun 2010 15:51:35 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/android-helloworld.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=687</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/android-helloworld.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/400868301/1492496</fs:itemid></item><item><title>Android 开发环境的安装</title><link>http://www.mxjava.com/android-setup.html</link><content:encoded>&lt;p&gt;Google 的产品天生就拥有着超高的关注度，很多程序员在 Android 手机还没有上市之前就开始学习。相对他们来说我的起步比较晚，今天刚刚开始，但相对于那些还没有开始学习的朋友来说，我的起步还不算太晚。&lt;/p&gt;
&lt;p&gt;学习 Android 最主要原因当然是这几年 Android 手机的流行，让我感觉到它的未来不可限量。到目前为止，仅仅三年的时间，各大手制造厂家都陆续推出了自己的 Android 手机，也成为了各国移动通讯服务商争相合作的焦点。另外几个原因是首先它是开放性的，底层核心是 Linux 。再者 Android SDK 使用我常用的开发语言 &amp;#8212; JAVA。&lt;br /&gt;
&lt;span id=&quot;more-686&quot;&gt;&lt;/span&gt;&lt;br /&gt;
JAVA 开发第一件事永远是配置环境，采用 JAVA 作为开发言的 Android 也不例外。接下来就开始配置我们的 Android 开发环境。（本文仅针对 Android 环境进行说明，默认您的系统中已经安装了 JAVA SDK 和 Eclipse，若没有请安装。）&lt;/p&gt;
&lt;p&gt;１、首先到官网下载安装 Android SDK。http://developer.android.com/sdk/　可惜的是天朝河蟹了该网站（http://www.android.com是可以访问的）。&lt;a href=&quot;http://www.uushare.com/user/hiswing/file/3147994&quot;&gt;为了方便，本站提供了下载&lt;/a&gt;。解压后运行 SDK Setup.exe ，将会运行 Android SDK and AVD Manager 下载程序。选择“Settings”，勾选“Force https:// &amp;#8230;”如图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/5023797a7ac0/1b101y5u.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;切换到“Avaliable Packages”，勾选要安装的 SDK Packages 和 API（建议全部选择），按下“Installed Selected”按钮开始安装。 若列表中没有选项，请按“Refresh”按钮刷新。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/8217697a7ac0/rlprq8g8.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;２、IDE 使用 Eclipse ，所以需要安装 Eclipse ADT (Android Development Tools) Plugin，这是 Android 的开发工具。安装方法同安装普通 Eclipse 插件相同，启动 Eclipse ，选择菜单 Help &amp;#8211; Install New Sofware ，单击 Add 按钮，在 Location 栏输入网址：http://dl-ssl.google.com/android/eclipse/ 后单击 OK 按钮。在 Install 窗口中选择刚刚输入的地址并选中 Developer Tools ，按下 Next 按钮开始安装。安装完成后，需要重新启动 Eclipse 才能使用 Android ADT 。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/3298097a7ac0/4robtuu1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;３、若要使用 Android SDK ，还要为其指定环境变量或在 ADT 中指定其路径。选择 Window &amp;#8211; Preferences ，选择 Android ，单击 Browse 按钮，选择解压 Android SDK 的路径，单击 OK 按钮即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/0622197a7ac1/qjhxn7f5.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;到此 Android 的开发环境就安装完成了。对于有 JAVA 环境配置基础的人来说，应该是很容易吧。&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;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400868302/mxjava/feedsky/s.gif?r=http://www.mxjava.com/android-setup.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868302/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868302/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/android-setup.html/feed</wfw:commentRss><slash:comments>1</slash:comments><description>Google 的产品天生就拥有着超高的关注度，很多程序员在 Android 手机还没有上市之前就开始学习。相对他们来说我的起步比较晚，今天刚刚开始，但相对于那些还没有开始学习的朋友来说，我的起步还不算太晚。
学习 Android 最主要原因当然是这几年 Android 手机的流行，让我感觉到它的未来不可限量。到目前为止，仅仅三年的时间，各大手制造厂家都陆续推出了自己的 Android 手机，也成为了各国移动通讯服务商争相合作的焦点。另外几个原因是首先它是开放性的，底层核心是 Linux 。再者 Android SDK 使用我常用的开发语言 &amp;#8212; JAVA。

JAVA 开发第一件事永远是配置环境，采用 JAVA 作为开发言的 Android 也不例外。接下来就开始配置我们的 Android 开发环境。（本文仅针对 Android 环境进行说明，默认您的系统中已经安装了 JAVA SDK 和 Eclipse，若没有请安装。）
１、首先到官网下载安装 Android SDK。http://developer.android.com/sdk/　可惜的是天朝河蟹了该网站（http://www.android.com是可以访问的）。为了方便，本站提供了下载。解压后运行 SDK Setup.exe ，将会运行 Android SDK and AVD Manager 下载程序。选择“Settings”，勾选“Force https:// &amp;#8230;”如图：

切换到“Avaliable Packages”，勾选要安装的 SDK Packages 和 API（建议全部选择），按下“Installed Selected”按钮开始安装。 若列表中没有选项，请按“Refresh”按钮刷新。

２、IDE 使用 Eclipse ，所以需要安装 Eclipse ADT [...]&lt;img src=&quot;http://www1.feedsky.com/t1/400868302/mxjava/feedsky/s.gif?r=http://www.mxjava.com/android-setup.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868302/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868302/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>android</category><category>编程开发</category><pubDate>Tue, 15 Jun 2010 12:44:02 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/android-setup.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=686</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/android-setup.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/400868302/1492496</fs:itemid></item><item><title>WordEditor2 的全局字体的实现方法</title><link>http://www.mxjava.com/wordeditor2-global-setup.html</link><content:encoded>&lt;p&gt;WordEditor2 中编辑器的初期字体被配置到 config 目录下的配置文件中，默认为“宋体”文字大小默认为“14”。系统初期化时从配置文件中读取并以 Style 的方式设置为编辑器的默认值。WordEditor2 的编辑器是继承自 JTextPane ,所以它拥有解析 html 代码的能力。为了能够设置编辑器的全局字体，我在这里的处理是为编辑器追加 body 的 css 配置。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
StringBuffer style = new StringBuffer();
style.append(&quot;body {&quot;);
style.append(&quot;font-size:&quot;);
style.append(wep.get(&quot;editor.font.size&quot;));
style.append(&quot;;font-family:&quot;);
style.append(wep.get(&quot;editor.font.family&quot;));
style.append(&quot;;margin:&quot;);
style.append(wep.get(&quot;editor.margin&quot;));
style.append(&quot;;background:&quot;);
style.append(wep.get(&quot;editor.background&quot;));
style.append(&quot;;&quot;);

this.doc.getStyleSheet().addRule(style.toString());
&lt;/pre&gt;
&lt;p&gt;&lt;span id=&quot;more-685&quot;&gt;&lt;/span&gt;&lt;br /&gt;
按照以上方法设置后，编辑器的 html 代码中就会生成 body 的 css 配置。这样一来，就达到了我们改变编辑器全局字体的目的。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;html&quot;&gt;
body { margin-right: 10px; font-family: 宋体; background-attachment: scroll; margin-bottom: 15px; background-color: #CCC8C8; margin-top: 5px; margin-left: 10px; font-size: 14; background-repeat: repeat }
&lt;/pre&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/jtextpane-background.html&quot; title=&quot;JTextPane设置背景色的问题及解决 (2009年06月16日)&quot;&gt;JTextPane设置背景色的问题及解决&lt;/a&gt; (1)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/jtextpane-wrap.html&quot; title=&quot;JTextPane的换行问题解决 (2009年05月31日)&quot;&gt;JTextPane的换行问题解决&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.mxjava.com/grape-wordeditor.html&quot; title=&quot;Grape 的编辑器 &amp;#8212; WordEditor (2009年06月29日)&quot;&gt;Grape 的编辑器 &amp;#8212; WordEditor&lt;/a&gt; (7)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400868303/mxjava/feedsky/s.gif?r=http://www.mxjava.com/wordeditor2-global-setup.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868303/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868303/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/wordeditor2-global-setup.html/feed</wfw:commentRss><slash:comments>3</slash:comments><description>WordEditor2 中编辑器的初期字体被配置到 config 目录下的配置文件中，默认为“宋体”文字大小默认为“14”。系统初期化时从配置文件中读取并以 Style 的方式设置为编辑器的默认值。WordEditor2 的编辑器是继承自 JTextPane ,所以它拥有解析 html 代码的能力。为了能够设置编辑器的全局字体，我在这里的处理是为编辑器追加 body 的 css 配置。

StringBuffer style = new StringBuffer();
style.append(&quot;body {&quot;);
style.append(&quot;font-size:&quot;);
style.append(wep.get(&quot;editor.font.size&quot;));
style.append(&quot;;font-family:&quot;);
style.append(wep.get(&quot;editor.font.family&quot;));
style.append(&quot;;margin:&quot;);
style.append(wep.get(&quot;editor.margin&quot;));
style.append(&quot;;background:&quot;);
style.append(wep.get(&quot;editor.background&quot;));
style.append(&quot;;&quot;);

this.doc.getStyleSheet().addRule(style.toString());


按照以上方法设置后，编辑器的 html 代码中就会生成 body 的 css 配置。这样一来，就达到了我们改变编辑器全局字体的目的。

body { margin-right: 10px; font-family: 宋体; background-attachment: scroll; margin-bottom: 15px; background-color: #CCC8C8; margin-top: 5px; margin-left: 10px; font-size: 14; background-repeat: repeat }


	相关文章
	
	JTextPane设置背景色的问题及解决 (1)
	JTextPane的换行问题解决 (0)
	Grape 的编辑器 &amp;#8212; WordEditor (7)&lt;img src=&quot;http://www1.feedsky.com/t1/400868303/mxjava/feedsky/s.gif?r=http://www.mxjava.com/wordeditor2-global-setup.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868303/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868303/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>WordEditor</category><category>什么是GRAPE</category><category>JTextPane</category><pubDate>Thu, 10 Jun 2010 09:28:53 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/wordeditor2-global-setup.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=685</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/wordeditor2-global-setup.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/400868303/1492496</fs:itemid></item><item><title>2010年南非世界杯赛程及直播表</title><link>http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html</link><content:encoded>&lt;p&gt;日期           时间             对阵             组别      比赛地          转播电视台&lt;/p&gt;
&lt;p&gt;小组赛赛事转播&lt;br /&gt;
6月11日 星期五 22:00 南非VS墨西哥      A组     约翰内斯堡    CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 乌拉圭VS法国      A组       开普敦      CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6月12日 星期六 19:30 阿根廷VS尼日利亚  B组     约翰内斯堡     CCTV-5  &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;                      22:00 韩国VS希腊        B组     伊丽莎白港     CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 英格兰VS美国      C组      勒斯腾堡     CCTV-1/CCTV-5&lt;br /&gt;
&lt;span id=&quot;more-684&quot;&gt;&lt;/span&gt;&lt;br /&gt;
6月13日 星期日 19:30 阿尔及利亚VS斯洛文尼亚 C组 波罗瓜尼      CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 德国VS澳大利亚    D组       德班         CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 塞尔维亚VS加纳    D组     比勒陀利亚    CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月14日 星期一 19:30 荷兰VS丹麦        E组     约翰内斯堡     CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 日本VS喀麦隆      E组      布隆方丹      CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 意大利VS巴拉圭    F组       开普敦      CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月15日 星期二 19:30 新西兰VS斯洛伐克  F组     勒斯腾堡       CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 科特迪瓦VS葡萄牙  G组     伊丽莎白港     CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 巴西VS朝鲜        G组     约翰内斯堡    CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月16日 星期三 19:30 洪都拉斯VS智利    H组    内尔斯普雷特   CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 西班牙VS瑞士      H组     伊丽莎白港    CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 南非VS乌拉圭      A组     比勒陀利亚    CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月17日 星期四 19:30 法国VS墨西哥      A组      波罗瓜尼      CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 希腊VS尼日利亚    B组     布隆方丹       CCTV-5  &lt;/p&gt;
&lt;p&gt;                      &lt;strong&gt;02:30 阿根廷VS韩国      B组     约翰内斯堡    CCTV-1/CCTV-5 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;6月18日 星期五 19:30 德国VS塞尔维亚    D组     伊丽莎白港    CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 斯洛文尼亚VS美国  C组     约翰内斯堡    CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 英格兰VS阿尔及利亚C组      开普敦      CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月19日 星期六 19:30 加纳VS澳大利亚    D组      勒斯腾堡     CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 荷兰VS日本        E组     伊丽莎白港    CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 喀麦隆VS丹麦      E组      比勒陀利亚   CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月20日 星期日 22:00 意大利VS新西兰    F组     内尔斯普雷特  CCTV-5  &lt;/p&gt;
&lt;p&gt;                      19:30 斯洛伐克VS巴拉圭  F组       布隆方丹    CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 巴西VS科特迪瓦    G组      约翰内斯堡   CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月21日 星期一 22:00 智利VS瑞士        H组      伊丽莎白港   CCTV-5  &lt;/p&gt;
&lt;p&gt;                      19:30 葡萄牙VS朝鲜      G组        开普敦     CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 西班牙VS洪都拉斯  H组       约翰内斯堡  CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月22日 星期二 22:00 法国VS南非        A组       布隆方丹  CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 墨西哥VS乌拉圭    A组       波罗瓜尼  风云足球  &lt;/p&gt;
&lt;p&gt;                      02:30 尼日利亚VS韩国    B组         德班    CCTV-2  &lt;/p&gt;
&lt;p&gt;                     &lt;strong&gt; 02:30 希腊VS阿根廷      B组       波罗瓜尼  CCTV-1/CCTV-5&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;6月23日 星期三 22:00 美国VS阿尔及利亚  C组      比勒陀利亚  风云足球&lt;/p&gt;
&lt;p&gt;                      22:00 斯洛文尼亚VS英格兰C组       伊丽莎白港 CCTV-5&lt;/p&gt;
&lt;p&gt;                      02:30 加纳VS德国        D组       约翰内斯堡 CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 澳大利亚VS塞尔维亚D组     内尔斯普雷特 风云足球 &lt;/p&gt;
&lt;p&gt;6月24日 星期四 22:00 斯洛伐克VS意大利  F组       约翰内斯堡 CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 巴拉圭VS新西兰    F组        波罗瓜尼  风云足球&lt;/p&gt;
&lt;p&gt;                      02:30 丹麦VS日本        E组         勒斯腾堡 风云足球 &lt;/p&gt;
&lt;p&gt;                      02:30 喀麦隆VS荷兰      E组         开普敦   CCTV-1/CCTV-5 &lt;/p&gt;
&lt;p&gt;6月25日 星期五 22:00 葡萄牙VS巴西      G组          德班    CCTV-5  &lt;/p&gt;
&lt;p&gt;                      22:00 朝鲜VS科特迪瓦    G组     内尔斯普雷特 风云足球  &lt;/p&gt;
&lt;p&gt;                      02:30 智利VS西班牙      H组     比勒陀利亚   CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;                      02:30 瑞士VS洪都拉斯    H组        布隆方丹  风云足球 &lt;/p&gt;
&lt;p&gt;淘汰赛赛事转播&lt;/p&gt;
&lt;p&gt;6月26日星期六 22:00 1AVS2B 1/8决赛         伊丽莎白港    CCTV-5&lt;br /&gt;
                     02:30 1CVS2D 1/8决赛         勒斯腾堡    CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;6月28日 星期一 22:00 1DVS2C 1/8决赛          布隆方丹     CCTV-5&lt;br /&gt;
                      02:30 1BVS2A 1/8决赛          约翰内斯堡    CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;6月29日 星期二 22:00 1EVS2F 1/8决赛           德班      CCTV-5&lt;br /&gt;
                      02:30 1GVS2H 1/8决赛           约翰内斯堡   CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;6月30日 星期三 22:00 1FVS2E 1/8决赛           比勒陀利亚    CCTV-5&lt;br /&gt;
                      02:30 1HVS2G 1/8决赛           开普敦      CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;7月03日 星期六 22:00 1E2F胜者VS1G2H胜者 1/4决赛伊丽莎白港   CCTV-5&lt;br /&gt;
                      02:30 1A2B胜者VS1C2D胜者 1/4决赛约翰内斯堡   CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;7月04日 星期日 02:30 1H2G胜者VS1F2E胜者 1/4决赛伊丽莎白港    CCTV-1/CCTV-5&lt;br /&gt;
                      22:00 1B2A胜者VS1D2C胜者 1/4决赛 开普敦       CCTV-5  &lt;/p&gt;
&lt;p&gt;7月07日 星期三 02:30 1/4决赛胜者VS1/4决赛胜者半决赛开普敦   CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;7月08日 星期四 02:30 1/4决赛胜者VS1/4决赛胜者半决赛德班     CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;7月11日 星期日 02:30 半决赛负者VS半决赛负者三四名决赛伊丽沙白CCTV-1/CCTV-5  &lt;/p&gt;
&lt;p&gt;7月12日 星期一 02:30 半决赛胜者VS半决赛胜者决赛约翰内斯堡   CCTV-1/CCTV-5&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/worldcup.html&quot; title=&quot;最近的生活 (2010年07月11日)&quot;&gt;最近的生活&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/400868304/mxjava/feedsky/s.gif?r=http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868304/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868304/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>日期           时间             对阵             组别      比赛地          转播电视台
小组赛赛事转播
6月11日 星期五 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/400868304/mxjava/feedsky/s.gif?r=http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/400868304/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/400868304/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>足球</category><category>世界杯</category><category>东拉西扯</category><pubDate>Tue, 08 Jun 2010 21:35:39 +0800</pubDate><author>疯了的蚊子</author><comments>http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=684</guid><dc:creator>疯了的蚊子</dc:creator><fs:srclink>http://www.mxjava.com/2010%e5%b9%b4%e5%8d%97%e9%9d%9e%e4%b8%96%e7%95%8c%e6%9d%af%e8%b5%9b%e7%a8%8b%e5%8f%8a%e7%9b%b4%e6%92%ad%e8%a1%a8.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/400868304/1492496</fs:itemid></item></channel></rss>