implement url-rewrite in j2ee application

in many j2ee applications, especially which developed by light-weight framework,such as struts, we can easily see the url pattern as  follows :

写道
http://localhost:8080/app/module/action.do?id=x&

 In contrast, the url pattern used by ruby on rails applications are totally different:

写道
http://localhost:3000/app/module/action/id

 Compare the two url patterns, I think most people may choose the latter, for its simplicity and beauty. Apparently, the second one reduce the usage of symbol ? and &. beside that , the second one also is  'search engine friendly' -- it has a higher chance  to be searched by searching engine like google. So , hao can we get way from the ugly url pattern  in j2ee applications. the answer is : url-rewrite.

url-rewrite is a technology that  substitute dynamic pages for static pages. for example,  the page /user/list.do?id=123 can be visited by url /url/list/123 if we have configured related url-rewrite rule.

there are two ways to implement url-rewrite in j2ee application:

  • using proxy http server. Apache HTTP Server 2.x and mod_proxy provide the url-rewrite function.
  • except that, using the third side lib is also a good choice. such as UrlRewriteFilter.

in this topic, i will introduce the second way.(the other would be introduced serval days latter.)

the stepes to use UrlRewriteFilter in ur app as follows:

  1. visit web site http://tuckey.org/urlrewrite/   , and downoad the latest version.
  2. add the lib urlrewrite-xxx.jar to ur app web-inf/lib folder.
  3. add the following to ur web-inf/web.xml:
  4. <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
  5. create the file urlrewrite.xml in ur app web-inf/ folder. default, urlRewriteFilter will use the file to apply rewriter rule. add the following content to urlrewrite.xml :
  6. <urlrewrite>

    <rule>
    <from>/([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)</from>
    <to>/$1/$2.do?id=$3</to>
    </rule>

    </urlrewrite>
     the rule displayed above means that any url like /user/list/123 will be rewrited to /user/list.do?id=123.
  7. after all things above were done rightly. now, we can input the /user/list/123 in browser and the url will be correctly rewrited and display related content.

urlrewrite.xml introduction

urlrewrite.xml must have a root element called <urlrewrite></urlrewrite> , and at least contains one "rule" element.

'rule' element is the core of xml. a 'rule' element stand for a  url-rewrite rule. 'rule' element must contains a 'to' and 'from' element, and for some advanced application,  also could contains the optional elements like 'condition' and 'set'. the official site describe the process flow as follows:

When a "rule" is processed against an incoming request, all the "condition" elements must be met, then the "from" will be applied to the request URL and the final URL generated by applying the "to" to the "from" pattern. So long as the rule has matched then the "set" will be run.

 the value specified in 'to' and 'from' elements must be relative to the request context, and  can be a regular expression in the perl5 style.

你可能感兴趣的:(Web,xml,struts,Ruby,Rails)