View Javadoc

1   //========================================================================
2   //Copyright 2009 Webtide LLC
3   //------------------------------------------------------------------------
4   //Licensed under the Apache License, Version 2.0 (the "License");
5   //you may not use this file except in compliance with the License.
6   //You may obtain a copy of the License at 
7   //http://www.apache.org/licenses/LICENSE-2.0
8   //Unless required by applicable law or agreed to in writing, software
9   //distributed under the License is distributed on an "AS IS" BASIS,
10  //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  //See the License for the specific language governing permissions and
12  //limitations under the License.
13  //========================================================================
14  package org.mortbay.jetty.handler.rewrite;
15  
16  import java.io.IOException;
17  import java.util.regex.Matcher;
18  
19  import javax.servlet.http.HttpServletRequest;
20  import javax.servlet.http.HttpServletResponse;
21  
22  /**
23   * Redirects the response by matching with a regular expression.
24   * The replacement string may use $n" to replace the nth capture group.
25   */
26  public class RedirectRegexRule extends RegexRule
27  {
28      private String _replacement;
29      
30      public RedirectRegexRule()
31      {
32          _handling = true;
33          _terminating = true;
34      }
35  
36      /**
37       * Whenever a match is found, it replaces with this value.
38       * 
39       * @param replacement the replacement string.
40       */
41      public void setReplacement(String replacement)
42      {
43          _replacement = replacement;
44      }
45      
46      @Override
47      protected String apply(String target, HttpServletRequest request, HttpServletResponse response, Matcher matcher)
48              throws IOException
49      {
50          target=_replacement;
51          for (int g=1;g<=matcher.groupCount();g++)
52          {
53              String group = matcher.group(g);
54              target=target.replaceAll("\\$"+g,group);
55          }
56  
57          response.sendRedirect(target);
58          return target;
59      }
60  }