URL Rewriter
Autor: Petr FerschmannMnoho z vás jistě zná modul do apache mod_rewrite, který umožňuje pomocí regulárních výrazů transformovat URL.
Lze tak přepsat URL /index.jsf?typ=clanek&id=1 na krásnější /clanky/1/. Lze jej také použít pro přesměrování uživatele z již nepoužívané adresy (např. při restrukturalizaci stránek).
U webové aplikace by měli být URL dlouhodobě stabilní tak, aby odkazy na ně fungovaly i za 10 let. Proto je dobré o nich přemýšlet. Navrhnete si strukturu aplikace a k tomu odpovídající URL. Tato přepisování umožňují oddělit adresy od použité technologie (lze ji tedy později snáze vyměnit).
Bohužel pro použití v Javě existuje velmi málo takovýchto modulů. A když už existují, jsou šířeny pod licencí GPL. Pokud je použijete, musíte pod touto licencí uveřejnit i vaši celou aplikaci (a to konkrétně pod GPL, nelze tak použít ani jiné licence). To bylo pro nás neakceptovatelné. Proto jsme před časem vytvořili vlastní implementaci – URL Rewriter. Teď ji uveřejňujeme pod LGPL licencí. Lze jej bez starostí použít.
Knihovna je implementována jako Servlet Filter. Pomocí souboru /WEB-INF/rewriter-config.xml jej můžete konfigurovat:
<rewriter-config xmlns:b="http://rewriter.softeu.cz/basic/">
<b:regex>
<from>^/clanky/(.*)$</from>
<to>/clanky.jsf?id=$1</to>
</b:regex>
</rewriter-config>
Program umožňuje také určit, že má být uživatel přesměrován:
<b:regex type="redirect">
Lze také určit, zda se jedná o trvalé (permanent-redirect) nebo dočasné (temporary-redirect) přesměrování.
Modul lze snadno rozšiřovat o vlastní pravidla (např. dotaz do databáze na název článku).
V současné době podporuje tyto tři pravidla:
- b:regex – regulární výraz.
- b:fixed – fixní přesměrování. Není nutné ošetřovat zvláštní znaky jako pro regulární výraz. XML znaky je nutné ošetřovat i nadále.
- b:facelets – sada příkazů, která zjednodušuje práci s JSF a Facelets.
Tento modul lze také snadno použít pro nahrazení přesměrovávajícího index.jsp při použití JSF/Struts apod. Lze jím také zabránit přímému přístupu na index.xhtml.
Instalace
Pokud používáte Maven, stačí přidat do pom.xml závislost:
<!-- url rewriter -->
<dependency>
<groupId>cz.softeu</groupId>
<artifactId>softeu-rewriter</artifactId>
<version>1.1</version>
<scope>runtime</scope>
</dependency>
Pokud Maven nepoužíváte, umístěte soubory softeu-rewriter-1.1.jar a xom-1.1.jar do adresáře WEB-INF/lib/.
Dále upravte web.xml:
<!-- url rewriter -->
<filter>
<filter-name>RewriterFilter</filter-name>
<filter-class>cz.softeu.rewriter.RewriterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RewriterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
A vytvořte soubor s pravidly WEB-INF/rewriter-config.xml:
<rewriter-config xmlns:b="http://rewriter.softeu.cz/basic/">
<b:regex>
<from>^/clanky/(.*)$</from>
<to>/clanky.jsf?id=$1</to>
</b:regex>
</rewriter-config>
Přeji mnoho úspěchů při používání.
Aktualizace: tak už je tento balík i v hlavním Maven repository. Není tedy nutné používat repository SoftEU



22. Leden 2007 v 16:37
22. Leden 2007 v 17:12
Toto řešení začne být zajímavé, pokud potřebuješ např. provádět dotaz do databáze na název článku (tak je třeba implementován tento blog).
7. Březen 2007 v 16:44
Je možnost vidět praktický příkad?