<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marcos Sousa's Blog &#187; URL Rewrite</title>
	<atom:link href="http://www.marcossousa.com/tag/url-rewrite/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcossousa.com</link>
	<description>Blog sobre desenvolvimento de software</description>
	<lastBuildDate>Fri, 06 Jan 2012 15:31:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>URL Amigáveis com Seam 2.1</title>
		<link>http://www.marcossousa.com/2009/03/16/url-amigaveis-com-seam-21/</link>
		<comments>http://www.marcossousa.com/2009/03/16/url-amigaveis-com-seam-21/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 03:46:49 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Seam Framework]]></category>
		<category><![CDATA[URL Rewrite]]></category>
		<category><![CDATA[URL User Friendly]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/?p=152</guid>
		<description><![CDATA[Desenvolver aplicações com URL amigáveis em projetos JSF não é uma tarefa fácil. Porém ao utilizar o Seam, esta tarefa é muito facilitada. A versão 2.1 traz a integração nativa com o URLRewrite, simplicando ainda mais o desenvolvimento. Meu objetivo neste post é mostrar as diferenças para implementação da mesma funcionalidade na versão 2.0 e [...]]]></description>
			<content:encoded><![CDATA[<p>Desenvolver aplicações com URL amigáveis em projetos JSF não é uma tarefa fácil. Porém ao utilizar o Seam, esta tarefa é muito facilitada. A versão 2.1 traz a integração nativa com o <a href="http://tuckey.org/urlrewrite/">URLRewrite</a>, simplicando ainda mais o desenvolvimento.</p>
<p>Meu objetivo neste <em>post</em> é mostrar as diferenças para implementação da mesma funcionalidade na versão 2.0 e a versão 2.1. Até a versão 2.1 era necessario (sem acento mesmo, dentro da reforma ortográfica) a criação de um Adapter. Vejamos como era feito, há até <a href="http://www.marcossousa.com/2008/01/26/video-aulas-jboss-seam-url-user-friendly/">uma vídeo aula publicada sobre o assunto</a>, primeiro vamos ao Adapter, necessário para fazer com que o <a href="http://tuckey.org/urlrewrite/">URLRewriter </a>resolva as URLs:</p>
<pre class="brush: java;">@Startup
@Scope(ScopeType.APPLICATION)
@Name(&quot;seamUrlRewriterFilter&quot;)
@BypassInterceptors
@Filter(within=&quot;org.jboss.seam.web.ajax4jsfFilter&quot;)
@Install(classDependencies=&quot;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&quot;,
precedence=Install.APPLICATION)
public class SeamUrlRewriterFilter extends AbstractFilter {

private UrlRewriteFilter urlRewriteFilter;
private Map initParameters;

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

public Map getInitParameters() {
return initParameters;
}

public void setInitParameters(Map initParameters) {
this.initParameters = initParameters;
}

public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
urlRewriteFilter.doFilter(arg0, arg1, arg2);
}

private class FilterConfigWrapper implements FilterConfig {

private FilterConfig delegate;
private Map parameters;

public FilterConfigWrapper(FilterConfig config, Map parameters) {
this.delegate = config;
this.parameters = parameters;
}

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

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

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

public ServletContext getServletContext() {
return delegate.getServletContext();
}
}
}</pre>
<p>Você pode estar pensando: porque não declarar o filtro diretamente no web.xml? Precisamos garantir que ele seja executado após filtro do RichFaces, através da anotação @Filter(within=&#8221;org.jboss.seam.web.ajax4jsfFilter&#8221;). Também é importante que este filtro esteja dentro do contexto seam. Para que este Adapter funcione adequadamente,  devemos registrá-lo no arquivo component.xml para que as URL&#8217;s sejam interpretadas.</p>
<pre class="brush: xml;">&lt;component name=&quot;seamUrlRewriterFilter&quot; class=&quot;jm.seamtest.core.SeamUrlRewriterFilter&quot; precedence=&quot;30&quot;&gt;
&lt;property name=&quot;initParameters&quot;&gt;
&lt;key&gt;logLevel&lt;/key&gt;
&lt;value&gt;DEBUG&lt;/value&gt;
&lt;key&gt;statusEnabled&lt;/key&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;
&lt;/component&gt;</pre>
<p>Já na versão 2.1, todas estas configurações não são mais necessarias. Basta adicionar esta tag no arquivo de configurações do seam, components.xml:</p>
<pre class="brush: xml;">&lt;web :rewrite-filter view-mapping=&quot;*.seam&quot; /&gt;</pre>
<p>Vamos imaginar como exemplo de URL amigável, a url usada neste blog para visualização de posts: /ano/mes/dia/titulo-<a href="http://en.wikipedia.org/wiki/UUID">uuid</a>. Vamos analisar como era as configurações nas versões anteriores, a configuração do padrão de url era realizado diretamente no arquivo de configurações nativo do <a href="http://tuckey.org/urlrewrite/">URLRewrite</a>:</p>
<pre class="brush: xml;">&lt;rule enabled=&quot;true&quot;&gt;
&lt;from casesensitive=&quot;true&quot;&gt;^/([0-9]{4})/([0-9]{2})/([0-9]{2})/([A-Z0-9]+[A-Za-z0-9]*)?$&lt;/from&gt;
&lt;to&gt;/post/showpost.seam?ano=$1&amp;mes=$2&amp;dia=$3&amp;tituloUUID=$4&lt;/to&gt;
&lt;/rule&gt;</pre>
<p>O <a href="http://tuckey.org/urlrewrite/">URLRewrite</a>, exige do desenvolvedor conhecimentos de expressões regulares. Além do mapeamento da URL, é necessário vincular os parâmetros passados pela URL, uma das formas é usando Page Actions:</p>
<pre class="brush: xml;">
&lt;page view-id=&quot;/post/showpost.xhtml&quot;&gt;
&lt;param name=&quot;ano&quot; value=&quot;#{viewPostBean.ano}&quot; /&gt;
&lt;param name=&quot;mes&quot; value=&quot;#{viewPostBean.mes}&quot; /&gt;
&lt;param name=&quot;dia&quot; value=&quot;#{viewPostBean.dia}&quot; /&gt;
&lt;param name=&quot;tituloUUID&quot; value=&quot;#{viewPostBean.tituloUuid}&quot; /&gt;
&lt;action execute=&quot;#{viewPostBean.show}&quot; /&gt;
&lt;/page&gt;</pre>
<p>Na versão 2.1, não é mais necessária a configuração nativa, tudo que precisamos é de uma simples tag para mapear a url dentro da Page Action.</p>
<pre class="brush: xml;">
&lt;page view-id=&quot;/post/showpost.xhtml&quot;&gt;
&lt;rewrite pattern=&quot;/{ano}/{mes}/{dia}/{tituloUUID}&quot;/&gt;
&lt;param name=&quot;ano&quot; value=&quot;#{viewPostBean.ano}&quot; /&gt;
&lt;param name=&quot;mes&quot; value=&quot;#{viewPostBean.mes}&quot; /&gt;
&lt;param name=&quot;dia&quot; value=&quot;#{viewPostBean.dia}&quot; /&gt;
&lt;param name=&quot;tituloUUID&quot; value=&quot;#{viewPostBean.tituloUuid}&quot; /&gt;
&lt;action execute=&quot;#{viewPostBean.show}&quot; /&gt;
&lt;/page&gt;</pre>
<p>O padrao de URL &#8220;/{ano}/{mes}/{dia}/{tituloUUID}&#8221; pode é traduzido em  /post/showpost.xhtml?ano=2009&amp;mes=03&amp;dia=16&amp;tituloUUID=url-amigavel. Neste caso todas as variáveis entre chaves são transformadas em parâmetros HTTP. Simples não?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2009/03/16/url-amigaveis-com-seam-21/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vídeo Aula Jboss Seam: Integração Spring parte 2</title>
		<link>http://www.marcossousa.com/2008/02/14/video-aula-jboss-seam-integracao-spring-parte-2/</link>
		<comments>http://www.marcossousa.com/2008/02/14/video-aula-jboss-seam-integracao-spring-parte-2/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 15:31:45 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Java Magazine]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[Jboss]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RHDS]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[URL Rewrite]]></category>
		<category><![CDATA[Variable Resolver]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/2008/02/14/video-aula-jboss-seam-integracao-spring-parte-2/</guid>
		<description><![CDATA[Foi publicada no portal Java Magazine a 7ª vídeo aula da série sobre JBoss Seam. Nesta vídeo aula eu continuei mostrando os passos para a integração entre o Seam e o Spring Framework. Como havia dito no post anterior, o Seam suporta a injeção de objetos presentes no contexto JSF. Nesta vídeo aula foi mostrado [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicada no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a> a 7ª  vídeo aula da série sobre <a href="http://www.jboss.com/products/seam">JBoss Seam</a>.  Nesta vídeo aula eu continuei mostrando os passos para a integração entre o <a href="http://www.jboss.com/products/seam">Seam</a> e o <a href="http://www.springframework.org">Spring Framework</a>.</p>
<p>Como havia dito no <a href="http://www.marcossousa.com/2008/02/08/video-aula-jboss-seam-integracao-spring-parte-1/" title="Visualizar o post anterior">post anterior</a>, o  <a href="http://www.jboss.com/products/seam">Seam</a> suporta a injeção de objetos presentes no contexto <a href="http://java.sun.com/javaee/javaserverfaces/">JSF.</a> Nesta vídeo aula foi mostrado como configurar o components.xml, VariableResolver  do <a href="http://www.springframework.org">Spring</a> e criado um bean de persistência de usuários para persistir usuários.</p>
<p><a href="http://www.marcossousa.com/wp-content/uploads/2008/02/seamtest-part7.zip" title="Direct link to file">Download dos Fontes Vídeo Aula</a><br />
<a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=7841" title="http://www.devmedia.com.br/articles/viewcomp.asp?comp=7888"> Vídeo Aula</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/02/14/video-aula-jboss-seam-integracao-spring-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vídeo Aula Jboss Seam: Integração Spring parte 1</title>
		<link>http://www.marcossousa.com/2008/02/08/video-aula-jboss-seam-integracao-spring-parte-1/</link>
		<comments>http://www.marcossousa.com/2008/02/08/video-aula-jboss-seam-integracao-spring-parte-1/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 14:49:06 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Spring Annotations]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Java Magazine]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[Jboss]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RHDS]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[URL Rewrite]]></category>
		<category><![CDATA[Variable Resolver]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/2008/02/08/video-aula-jboss-seam-integracao-spring-parte-1/</guid>
		<description><![CDATA[Foi publicada no portal Java Magazine a 6ª vídeo aula da série sobre JBoss Seam. Nesta vídeo aula eu mostrei como é feita a integração entre o Seam e o Spring Framework. O fato do Seam suportar a injeção de objetos presentes no contexto JSF permite que os beans declarados com contexto do Spring sejam [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicada no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a> a 6ª  vídeo aula da série sobre <a href="http://www.jboss.com/products/seam">JBoss Seam</a>.  Nesta vídeo aula eu mostrei como é feita a integração entre o <a href="http://www.jboss.com/products/seam">Seam</a> e o <a href="http://www.springframework.org">Spring Framework</a>.</p>
<p>O fato do  <a href="http://www.jboss.com/products/seam">Seam</a> suportar a injeção de objetos presentes no contexto <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a> permite que os beans declarados com contexto do <a href="http://www.springframework.org">Spring</a> sejam facilmente consumidos pelos componentes<a href="http://www.jboss.com/products/seam"> Seam</a>. Aí surgiria um problema, como fazer os beans presentes no contexto Spring ficar disponíveis no contexto JSF? Simples, o <a href="http://www.springframework.org">Spring</a> possui um VariableResolver que disponibiliza os beans existentes dentro do contexto <a href="http://www.springframework.org">Spring</a>.<br />
<a href="http://www.marcossousa.com/wp-content/uploads/2008/02/seamtest-part7.zip" title="Direct link to file">Download dos Fontes Vídeo Aula</a><br />
<a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=7841"> Vídeo Aula</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/02/08/video-aula-jboss-seam-integracao-spring-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo Aulas Jboss Seam: URL User Friendly</title>
		<link>http://www.marcossousa.com/2008/01/26/video-aulas-jboss-seam-url-user-friendly/</link>
		<comments>http://www.marcossousa.com/2008/01/26/video-aulas-jboss-seam-url-user-friendly/#comments</comments>
		<pubDate>Sat, 26 Jan 2008 21:53:05 +0000</pubDate>
		<dc:creator>Marcos Sousa</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Server Faces]]></category>
		<category><![CDATA[Jboss Seam]]></category>
		<category><![CDATA[Vídeo Aulas]]></category>
		<category><![CDATA[Java Magazine]]></category>
		<category><![CDATA[Java Vídeo Magazine]]></category>
		<category><![CDATA[Jboss]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[RHDS]]></category>
		<category><![CDATA[URL Rewrite]]></category>
		<category><![CDATA[URL User Friendly]]></category>
		<category><![CDATA[Vídeo Aula]]></category>

		<guid isPermaLink="false">http://www.marcossousa.com/2008/01/26/video-aulas-jboss-seam-url-user-friendly/</guid>
		<description><![CDATA[Foi publicada ontem no portal Java Magazine a 5ª vídeo aula da série sobre JBoss Seam. Nesta vídeo aula eu mostrei como criar páginas em JSF usando o conceito de URL User Friendly. O caminho não é complexo, como o JBoss Seam tem suporte ao protocolo Rest, para produzir páginas com URL amigáveis basta usar [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicada ontem no portal <a href="http://www.javamagazine.com.br/">Java Magazine</a> a 5ª  vídeo aula da série sobre <a href="http://www.jboss.com/products/seam">JBoss Seam</a>.  Nesta vídeo aula eu mostrei como criar páginas em <a href="http://java.sun.com/javaee/javaserverfaces/">JSF</a> usando o conceito de URL User Friendly.</p>
<p>O caminho não é complexo, como o JBoss Seam tem suporte ao protocolo <a href="http://pt.wikipedia.org/wiki/Rest">Rest</a>, para produzir páginas com URL amigáveis basta usar o <a href="http://tuckey.org/urlrewrite/">URL Rewrite</a> em conjunto. A integração entre os dois frameworks é bem simples: Basta criar um componente Seam fazendo o papel de <a href="http://pt.wikipedia.org/wiki/Adapter">Adapter  </a>ao Filtro que o <a href="http://tuckey.org/urlrewrite/">URL Rewrite</a> utiliza. Para criar as urls amigáveis, basta usar page actions do seam e configurar as rules do URL Rewrite.</p>
<p>Nas próximas partes irei mostrar a integração com <a href="http://www.springframework.org">Spring Framework</a>, <a href="http://java.sun.com/products/ejb/index.jsp">EJB</a> e gerenciamento de escopos.</p>
<p>Críticas e sugestões são sempre bem vindas.<br />
<a href="http://www.marcossousa.com/wp-content/uploads/2008/01/seamtest.zip" onclick="return false;" title="Direct link to file">Download dos Fontes Vídeo Aula</a><br />
<a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=7770"> Vídeo Aula</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcossousa.com/2008/01/26/video-aulas-jboss-seam-url-user-friendly/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

