urlrewirte element and code example

1.urlrewirte servlet filter:
참고 글:
http://tuckey.org/urlrewrite/manual/2.6/

/*
 * JBoss, Home of Professional Open Source
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package org.jboss.seam.wiki.core.ui;

import org.jboss.seam.ScopeType;
import org.jboss.seam.util.EnumerationEnumeration;
import org.jboss.seam.annotations.*;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.annotations.web.Filter;
import org.jboss.seam.web.AbstractFilter;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Collections;
import java.util.Map;

/**
 * Adapts the Tuckey URLRewrite filter to the Seam filter chain.
 *
 * @author Christian Bauer
 */
@Startup
@Scope(ScopeType.APPLICATION)
@Name("wikiUrlRewriteFilter")
@BypassInterceptors
@Filter(within = "org.jboss.seam.web.ajax4jsfFilter")
@Install(classDependencies = "org.tuckey.web.filters.urlrewrite.UrlRewriteFilter", precedence = Install.APPLICATION)
public class WikiUrlRewriteFilter extends AbstractFilter {

    private UrlRewriteFilter urlRewriteFilter;

    public void init(FilterConfig filterConfig) throws ServletException {
        urlRewriteFilter = new UrlRewriteFilter();
        urlRewriteFilter.init(new FilterConfigWrapper(filterConfig, getInitParameters()));
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        urlRewriteFilter.doFilter(servletRequest, servletResponse, filterChain);
    }

    private Map<String, String> initParameters;

    public Map<String, String> getInitParameters() {
        return initParameters;
    }
    public void setInitParameters(Map<String, String> initParameters) {
        this.initParameters = initParameters;
    }

    private class FilterConfigWrapper implements FilterConfig {

        private FilterConfig delegate;
        private Map<String, String> parameters;

        public FilterConfigWrapper(FilterConfig filterConfig, Map<String, String> initParameters) {
            delegate = filterConfig;
            parameters = initParameters;
        }

        public String getFilterName() {
            return delegate.getFilterName();
        }

        public String getInitParameter(String name) {
            if (parameters.containsKey(name)) {
                return parameters.get(name);
            } else {
                return delegate.getInitParameter(name);
            }
        }

        public Enumeration getInitParameterNames() {
            Enumeration[] enumerations = {delegate.getInitParameterNames(), Collections.enumeration(parameters.keySet())};
            return new EnumerationEnumeration(enumerations);
        }

        public ServletContext getServletContext() {
            return delegate.getServletContext();
        }
    }

}

2. component. xml 에서 이 구성 요 소 를 설정 하면 WEB - INF / web. xml 에서 org. tuckey. web. filers. url rewrite. Url RewriteFilter 를 설정 할 수 있 습 니 다.
3.urlrewirte element:
1) rule :

<rule enabled="true">
       <from>^/world/([a-z]+)/([a-z]+)$</from>
       <to>/world.jsp?country=$1&amp;city=$2</to>
    </rule>

2)from :

 casesensitive :       
(optional) false (default) This value will be matched using case insentitive match. ie, "/WellingtoN" will match "/wellington".  

3)to :

 type options : forward(default),redirect
 last options : true or flse --                 

4)set :

 type options : request(default),session,response-header,contenttype,charset,loaction,statuts
 name options : If type is request, session, response-header, cookie this specifies the name item.

5)condition :

 type options : header(default),method,port,remote-addr,time,month,year...
 next options : or and(defulat) --    ,or( ) and( )
 name options :  type    type     ,  type:header,name:user-agent --   header user-agent(   )   ..??

6) run: url 이 일치 할 때 class 의 method 를 실행 합 니 다.

 class , method

첨부: url rewirte. xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

<!--

    Rewrite nice URIs to "ugly" internal URIs. This is preparation for any RESTful service layer
    we might want to expose later.

    We basically have three kinds of GET URIs:

    - Wiki document/directory URIs with either numeric identifiers (/123.lace) or area/node names such as /Foo/Bar.
      The named URIs rely on the fact that WikiWord names for area/nodes are always starting with an uppercase letter.
      The named URIs can have various other modifiers appended, such as /Page/3 or /Tag/Foobar. The representation is
      always human-readable HTML.

    - URIs to global information pages, such as /user/johndoe or /tag/Foo+Bar. These resources usually aggregate some
      information. The distinction between named WikiWord URIs is the lowercase first letter. The representation
      is always humand-readable HTML.

    - URIs to services, such as feeds and downloads. These always start with /service and representations can vary, e.g.
      binary data for image downloads or Atom XML for feeds.

    @author Christian Bauer
-->
<urlrewrite>

    <!-- Disable the Red Hat crawler -->
    <rule>
        <from>.*</from>
        <condition name="remote-addr">66.187.233.202</condition>
        <to last="true" type="temporary-redirect">/robots.txt</to>
    </rule>

    <!-- Disable anything that comes out of Microsoft -->
    <rule>
        <from>.*</from>
        <condition name="remote-addr">65.55.210.81</condition>
        <to last="true" type="temporary-redirect">/robots.txt</to>
    </rule>

    <!-- Default browser -->
    <rule>
        <from>.*</from>
        <set type="session" name="skin">d</set>
    </rule>

    <!-- Mobile browser -->
    <rule>
        <from>.*</from>
        <condition next="or" name="user-agent">Windows CE</condition>
        <condition next="or" name="user-agent">SonyEricsson</condition>
        <condition name="user-agent">BlackBerry</condition>
        <set type="session" name="skin">m</set>
    </rule>

    <!-- /123.html -->
    <rule>
        <from>^/([0-9]+)\.[a-zA-z]+$</from>
        <to last="true">/wiki.seam?nodeId=$1</to>
     </rule>

    <!-- /search/Foo+Bar+No+Characters+Except+Space -->
    <rule>
        <from casesensitive="true">^/search/(.+)$</from>
        <to last="true">/search_%{session-attribute:skin}.seam?query=$1</to>
    </rule>

    <!-- /user/foo -->
    <rule>
        <from casesensitive="true">^/user/([a-zA-Z]?[a-zA-Z0-9]+)$</from>
        <to last="true">/userProfile_%{session-attribute:skin}.seam?username=$1</to>
    </rule>

    <!-- /tag/Foo+Bar-->
    <rule>
        <from casesensitive="true">^/tag/(.+)$</from>
        <to last="true">/tagDisplay_%{session-attribute:skin}.seam?tag=$1</to>
    </rule>

    <!-- /service/Feed/atom (/Area/Foo) (/Node/Bar) (/Comments/exclude/) (/Tag/Foo+Bar) (/Aggregate/My Aggregate) -->
    <rule>
        <from casesensitive="true">^/service/Feed/atom(?:/Area/([A-Z0-9]+[A-Za-z0-9]*))?(?:/Node/([A-Z0-9]+[A-Za-z0-9]*))?(?:/Comments/([a-z]+))?(?:/Tag/(.+))?(?:/Aggregate/(.+))?$</from>
        <to last="true">/servlets/feeds/atom.seam?areaName=$1&amp;nodeName=$2&amp;comments=$3&amp;tag=$4&amp;aggregate=$5</to>
    </rule>

    <!-- /service/File/123 -->
    <rule>
        <from casesensitive="true">^/service/File/([0-9]+)$</from>
        <to last="true">/servlets/files/download.seam?fileId=$1</to>
    </rule>

    <!-- /Foo (/Bar) (/Year/2007 (/Month/08) (/Day/23) (/Page/3) (/Tag/Foo+Bar) (/Category/FooBar) -->
    <rule>
        <from casesensitive="true">^/([A-Z0-9]+[A-Za-z0-9]*)(?:/([A-Z0-9]+[A-Za-z0-9]*))?(?:/Year/([0-9]{4}))?(?:/Month/([0-9]{2}))?(?:/Day/([0-9]{2}))?(?:/Page/([0-9]+))?(?:/Tag/(.+))?(?:/Category/(.+))?$</from>
        <to>/wiki.seam?areaName=$1&amp;nodeName=$2&amp;year=$3&amp;month=$4&amp;day=$5&amp;page=$6&amp;tag=$7&amp;category=$8</to>
    </rule>

    <!-- /Foo (/Bar) (/Year/2007) (/Month/08) (/Day/23) /Summary -->
    <rule>
        <from casesensitive="true">^/([A-Z0-9]+[A-Za-z0-9]*)(?:/([A-Z0-9]+[A-Za-z0-9]*))?(?:/Year/([0-9]{4}))?(?:/Month/([0-9]{2}))?(?:/Day/([0-9]{2}))?/Summary$</from>
        <to>/wiki.seam?areaName=$1&amp;nodeName=$2&amp;year=$3&amp;month=$4&amp;day=$5&amp;summary=true</to>
    </rule>

    <!-- Blosxom migration from blog.hibernate.org, the best we can do (you probably can delete all of this):

        http://blog.hibernate.org/cgi-bin/blosxom.cgi
        http://blog.hibernate.org/cgi-bin/blosxom.cgi/2007/08/
        http://blog.hibernate.org/cgi-bin/blosxom.cgi/2007/08/01/
        http://blog.hibernate.org/cgi-bin/blosxom.cgi/index.rss
    -->
    <rule>
        <from casesensitive="true">^/cgi-bin/blosxom.cgi$</from>
        <to last="true" type="permanent-redirect">%{scheme}://%{server-name}%{context-path}/</to>
    </rule>
    <rule>
        <from casesensitive="true">^/cgi-bin/blosxom.cgi/([0-9]{4})/([0-9]{2})/?$</from>
        <to last="true" type="permanent-redirect">%{scheme}://%{server-name}%{context-path}/Bloggers/Everyone/Year/$1/Month/$2</to>
    </rule>
    <rule>
        <from casesensitive="true">^/cgi-bin/blosxom.cgi/([0-9]{4})/([0-9]{2})/([0-9]{2})/?$</from>
        <to last="true" type="permanent-redirect">%{scheme}://%{server-name}%{context-path}/Bloggers/Everyone/Year/$1/Month/$2/Day/$3</to>
    </rule>
    <rule>
        <from casesensitive="true">^/cgi-bin/blosxom.cgi/index.rss$</from>
        <to last="true" type="permanent-redirect">%{scheme}://%{server-name}%{context-path}/service/Feed/atom</to>
    </rule>

    <!-- ROOT / -->
    <rule>
        <from>^/$</from>
        <to>/wiki.seam</to>
    </rule>

</urlrewrite>

좋은 웹페이지 즐겨찾기