OCPsoft URL-Rewriting Framework
Java Ruby JavaScript HTML Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
addressbuilder [maven-release-plugin] prepare for next development iteration Mar 6, 2018
annotations-api [maven-release-plugin] prepare for next development iteration Mar 6, 2018
annotations-impl skip versioned classes in Java 9 Multi-release JAR files (#262) Mar 19, 2018
api-el [maven-release-plugin] prepare for next development iteration Mar 6, 2018
api-servlet [maven-release-plugin] prepare for next development iteration Mar 6, 2018
api-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
api [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-annotations [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-jodatime [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-prettyfaces-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-prettyfaces [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-proxy [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-servlet-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-servlet [maven-release-plugin] prepare for next development iteration Mar 6, 2018
config-tuckey [maven-release-plugin] prepare for next development iteration Mar 6, 2018
distribution [maven-release-plugin] prepare for next development iteration Mar 6, 2018
documentation [maven-release-plugin] prepare for next development iteration Mar 6, 2018
examples [maven-release-plugin] prepare for next development iteration Mar 6, 2018
impl-servlet-2.5 [maven-release-plugin] prepare for next development iteration Mar 6, 2018
impl-servlet-3.0 [maven-release-plugin] prepare for next development iteration Mar 6, 2018
impl-servlet-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
impl-servlet [maven-release-plugin] prepare for next development iteration Mar 6, 2018
impl-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
impl [maven-release-plugin] prepare for next development iteration Mar 6, 2018
integration-cdi-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
integration-cdi [maven-release-plugin] prepare for next development iteration Mar 6, 2018
integration-faces-tests [maven-release-plugin] prepare for next development iteration Mar 6, 2018
integration-faces [maven-release-plugin] prepare for next development iteration Mar 6, 2018
integration-gwt [maven-release-plugin] prepare for next development iteration Mar 6, 2018
integration-spring [maven-release-plugin] prepare for next development iteration Mar 6, 2018
rewrite-servlet [maven-release-plugin] prepare for next development iteration Mar 6, 2018
security-integration-shiro [maven-release-plugin] prepare for next development iteration Mar 6, 2018
showcase [maven-release-plugin] prepare for next development iteration Mar 6, 2018
test-base [maven-release-plugin] prepare for next development iteration Mar 6, 2018
test-harness [maven-release-plugin] prepare for next development iteration Mar 6, 2018
transform-less [maven-release-plugin] prepare for next development iteration Mar 6, 2018
transform-markup [maven-release-plugin] prepare for next development iteration Mar 6, 2018
transform-minify [maven-release-plugin] prepare for next development iteration Mar 6, 2018
transform [maven-release-plugin] prepare for next development iteration Mar 6, 2018
.gitignore Add dependency-reduced-pom.xml to .gitignore Jul 19, 2016
.travis-deploy.sh Skip GPG signing when doing snapshot deployment Jan 7, 2015
.travis-settings.xml Snapshot deployment Jan 6, 2015
.travis.yml Updated travis keys Dec 3, 2017
CHANGELOG.md changelog again Jul 24, 2012
LICENSE Initial import Jun 24, 2011
NOTICE rewrite-servlet and distribution modules working Apr 5, 2012
README.md Add note about SCAN_LIB_DIRECTORY (#248) Jul 20, 2017
ocpsoft-eclipse-code-format.xml Added code style format profile for Eclipse Aug 5, 2011
pom.xml [maven-release-plugin] prepare for next development iteration Mar 6, 2018

README.md

Rewrite Build Status

Join the chat at https://gitter.im/ocpsoft/rewrite

A highly configurable URL-rewriting tool for Java EE 6+ and Servlet 2.5+ applications, supporting integration with:

  • CDI
  • Spring DI
  • JodaTime configuration
  • Tuckey.org URLRewriteFilter configuration
  • JavaServer Faces (JSF)
  • JavaServer Pages (JSP)
  • Struts
  • Wicket
  • Grails
  • Spring Roo
  • Spring Web Flow
  • Any servlet & web framework!
  • All major servlet containers and application servers

Get Help

Get Started

  1. It is recommended but not required to remove other URL-rewriting tools from your application before using Rewrite. If you choose to leave them in place, weird things may happen, be warned.

  2. Include OCPSoft Rewrite in your application's POM file:

     <dependency>
        <groupId>org.ocpsoft.rewrite</groupId>
        <artifactId>rewrite-servlet</artifactId>
        <version>${rewrite.version}</version>
     </dependency>
    
  3. Add a configuration provider implementing the 'org.ocpsoft.rewrite.config.ConfigurationProvider' interface, or extending from the abstract HttpConfigurationProvider class for convenience:

     package com.example;
     
     @RewriteConfiguration
     public class ExampleConfigurationProvider extends HttpConfigurationProvider
     {
     
        @Override
        public int priority()
        {
          return 10;
        }
    
        @Override
        public Configuration getConfiguration(final ServletContext context)
        {
          return ConfigurationBuilder.begin()
            .defineRule()
              .when(Direction.isInbound().and(Path.matches("/some/page/{p}/")))
              .perform(Forward.to("/new-page/{p}.html"));
         }
     }
    
  4. You must either annotate your ConfigurationProvider class with the @RewriteConfiguration annotation, OR create a file named: '/META-INF/services/org.ocpsoft.rewrite.config.ConfigurationProvider' which contains the fully qualified name of your ConfigurationProvider implementation:

     /META-INF/services/org.ocpsoft.rewrite.config.ConfigurationProvider
     ---
     com.example.ExampleConfigurationProvider
    

Note that your annotated class won't be found, by default, if your ConfigurationProvider is in a jar inside a war. You can either set the servlet parameter org.ocpsoft.rewrite.annotation.SCAN_LIB_DIRECTORY to true, or use the ServiceLoader approach instead.

  1. Add rules to your configuration. Condition objects such as 'Direction.isInbound()' and 'Path.matches(...)' can be found in the 'org.ocpsoft.rewrite.config.' and 'org.ocpsoft.rewrite.servlet.config.' packages.

  2. Consider using Rewrite extensions for extra power:

  3. Run your application!

FEEDBACK

This project is looking for your feedback! What would make your task easier? How can we simplify this experience?

TODO's

  • Continue simplification of Configuration objects and convenience APIs.

  • Implement additional xml & file-based configuration support.

  • Implement http://localhost:8080/rewrite-status monitoring tool