﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-魏杰的技术专栏-随笔分类-Java</title><link>http://www.cnitblog.com/jackmisweijie/category/7502.html</link><description>共同交流学习</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 14:51:26 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 14:51:26 GMT</pubDate><ttl>60</ttl><item><title>UrlRewriter技术简单运用</title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Thu, 07 Aug 2008 12:34:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/47755.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/47755.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/47755.html</trackback:ping><description><![CDATA[<font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如何增强你网站中地址的可读性和让搜索引擎快速的收录到你的站点，这就需要你美化你的网页的地址，也就是我们常说的Url重写技术，大家熟悉的可能有很多服务器都提供Url重写的技术，以前我们用的最多的就是Apache，Jboss这样一些服务器自带的一些Url重写，但是他们的配置比较麻烦，性能又不是太好，现在我们有专一的开源框架来完成Url重写任务，今天我要介绍的就是UrlRewriter。使用起来比较简单，配置是相当的简单明了。</font>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 我们先简单的了解一下使用Url重写能给你网站带来哪些好处。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;第一：有利于搜索引擎的抓取，因为现在大部分的搜索引擎对动态页面的抓取还比较弱，它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面，有利于搜索引擎的抓取。</font></div>
<div><font size=4>&nbsp;&nbsp; 第二：让用户更容易理解，很少有用户去关心你网站的页面的地址，但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。</font></div>
<div><font size=4>&nbsp; 第三：隐藏技术的实现，我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术，给一些想攻击你网站的爱好者提供方便。</font></div>
<div><font size=4>&nbsp; 第四：可以很方便的重用，提高网站的移植性。如果我们后台方法改动的话，可以保证前台的页面部分不用改。这样就提高了网站的移植性。</font></div>
<div><font size=4>&nbsp;&nbsp; 它虽然有这么多的优点，但是也有一点缺点的，因为它是通过过滤器原理来实现的，就以为着又多了一道访问，会多少影响点访问速度的，这个可以忽略不计的。</font></div>
<div><font size=4>&nbsp;&nbsp; 现在UrlRewriter技术有两个技术平台的，一个就是在Java方向的，另一个就是.NET方向的。今天我们讲的是Java方向的应用。</font></div>
<div><font size=4>&nbsp;&nbsp; 首先让我们了解它的工作原理，说白了它就是一个简单的过滤器（Filter） ，看看源码你就会很快的明白，它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().</font></div>
<div><font size=4>&nbsp;&nbsp; 下面我们就快速的为你的网站搭建Url重写技术。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 第一步：下载urlrewrite-2.6.0.现在最新版本是3.1的。<a href="http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip"><font color=#000000><u>(</u></font><a href="http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip" target=_blank><font color=#000000><u>http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip</u></font></a></a></font></div>
<div><font size=4><a href="http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip"><a href="http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip" target=_blank><u><font color=#000000>http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip</font></u></a></a>把urlrewrite-2.6.0.jar拷到classpath下。</font></div>
<div><font size=4>&nbsp;&nbsp; 第二步：在WEB-INF目录下建一个urlrewrite.xml文件。</font></div>
<div><font size=4>&nbsp;&nbsp; 第三步：在web.xml中初始化。加上下面的代码：</font></div>
<div><font size=4>&nbsp;&nbsp; &lt;!-- Set URL Rewrite--&gt;<br>&nbsp;&lt;filter&gt;<br>&nbsp;&nbsp;&lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br>&nbsp;&nbsp;&lt;filter-class&gt;<br>&nbsp;&nbsp;&nbsp;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter<br>&nbsp;&nbsp;&lt;/filter-class&gt;<br>&nbsp;&lt;/filter&gt;<br>&nbsp;&lt;filter-mapping&gt;<br>&nbsp;&nbsp;&lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br>&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br>&nbsp;&lt;/filter-mapping&gt;</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 最后我要简单的讲一下常用的两个配置规则.以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成<font color=#ff0000>urlRewrite.xml，</font>这样即使你加上</font></div>
<div><font size=4>&lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp;&lt;param-name&gt;confPath&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/urlRewrite.xml&lt;/param-value&gt;<br>&nbsp;&lt;/init-param&gt;</font></div>
<div><font size=4>&nbsp; 在启动的服务器的时候还是会报错的，因为源码中必须是全小写的（urlrewrite.xml）且只能放到WEB-INF下面。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br>&lt;!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://tuckey.org/res/dtds/urlrewrite2.6.dtd"><a href="http://tuckey.org/res/dtds/urlrewrite2.6.dtd" target=_blank><u><font color=#000000>http://tuckey.org/res/dtds/urlrewrite2.6.dtd</font></u></a></a>"&gt;<br>&lt;urlrewrite&gt;<br>&nbsp;&nbsp;&lt;rule&gt;<br>&nbsp;&nbsp;&lt;from&gt;^/(\w+)/(\w+)/page_(\d+)\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&lt;to type="forward"&gt;/$1.htm?category=$2&amp;amp;page=$3&lt;/to&gt;<br>&nbsp;&lt;/rule&gt;<br>&nbsp;&nbsp;&lt;rule&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;^/rss/yahoo\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type="redirect"&gt;&nbsp;&nbsp;&nbsp; <a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/W3CSSiteFeed"><a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/W3CSSiteFeed" target=_blank><u><font color=#000000>http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/W3CSSiteFeed</font></u></a></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/to&gt;<br>&nbsp;&lt;/rule&gt;<br>&lt;/urlrewrite&gt;</font></div>
<div><font size=4>&nbsp;&nbsp; 所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。</div>
</font>
<div><font size=4>&lt;rule&gt;<br>&nbsp;&nbsp;&lt;from&gt;&lt;/from&gt;<br>&nbsp;&nbsp;&lt;to type="forward&gt;&lt;/to&gt;<br>&lt;/rule&gt;</font></div>
<div><font size=4>&nbsp; &lt;from&gt;&lt;/from&gt;写上你自己定义的访问地址，&lt;to type="forward&gt;&lt;/to&gt;就是实际的访问地址。比如我们实际的访问地址是：<a href="http://yousite.com/entity.htm"><a href="http://yousite.com/entity.htm" target=_blank><u><font color=#000000>http://yousite.com/entity.htm</font></u></a></a> ?category=user&amp;page=2.而我们想把它重写为<a href="http://yousite.com/entity/uesr/page_2.html"><a href="http://yousite.com/entity/uesr/page_2.html" target=_blank><u><font color=#000000>http://yousite.com/entity/uesr/page_2.html</font></u></a></a>。这样看起来比我们实际的要好看的多。我们就应该这样的写：&nbsp;&nbsp;</font></div>
<div><font size=4>&lt;rule&gt;<br>&nbsp;&nbsp;&lt;from&gt;^/(\w+)/(\w+)/page_(\d+)\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&lt;to type="forward"&gt;/$1.htm?category=$2&amp;amp;page=$3&lt;/to&gt;<br>&nbsp;&lt;/rule&gt;<br>&nbsp;&nbsp;&nbsp;简单的介绍一下常用的正规表示式：</font><font size=4>&nbsp;</div>
<div>
<table cellSpacing=0>
    <thead>
        <tr>
            <th scope=col><font size=4>代码</font></th>
            <th scope=col><font size=4>说明</font></th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><span class=code><font color=#0000ff size=4>.</font></span></td>
            <td><span class=desc><u><span class=desc><u><font size=4>匹配除换行符以外的任意字符</font></u></span></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\w</font></span></td>
            <td><span class=desc><u><font size=4>匹配字母或数字或下划线或汉字</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\s</font></span></td>
            <td><span class=desc><u><font size=4>匹配任意的空白符</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\d</font></span></td>
            <td><span class=desc><u><font size=4>匹配数字</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\b</font></span></td>
            <td><span class=desc><u><font size=4>匹配单词的开始或结束</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>^</font></span></td>
            <td><span class=desc><u><font size=4>匹配字符串的开始</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>$</font></span></td>
            <td><span class=desc><u><font size=4>匹配字符串的结束</font></u></span></td>
        </tr>
    </tbody>
</table>
</div>
<div>常用的&amp;要用&nbsp; &amp;amp;来表示。$1,$2代表与你配置正规表达式/(\w+)/(\w+)/相对应的参数。&lt;to type="forward"&gt;默认的是 type="forward".</div>
<div>&nbsp; 另一个常用的规则就是连接外部的网站。就要用到。&lt;to type="redirect"&gt;<br>&nbsp;&lt;rule&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;^/rss/yahoo\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type="redirect"&gt;&nbsp;&nbsp;&nbsp; <a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/MySiteFeed"><a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/MySiteFeed" target=_blank><u><font color=#000000 size=2>http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/MySiteFeed</font></u></a></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/to&gt;<br>&nbsp;&lt;/rule&gt;</div>
<div>&nbsp;&nbsp; 我们的网站用到最多的无非就这两种规则。至于正规表达式的写法很多种。希望对有感兴趣的朋友，可以试试。<br></div>
</font>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/47755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-07 20:34 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>