<?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>Blog da Especializa &#187; jsp</title>
	<atom:link href="https://especializa.com.br/blog/tag/jsp/feed/" rel="self" type="application/rss+xml" />
	<link>https://especializa.com.br/blog</link>
	<description>Novidades, curiosidades e nosso ponto-de-vista sobre o mercado de TI</description>
	<lastBuildDate>Sat, 04 May 2013 07:55:07 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>JSP &#8211; Java Server Pages ou Ja Se Phoi?</title>
		<link>https://especializa.com.br/blog/2010/07/07/jsp-java-server-pages-ou-ja-se-phoi/</link>
		<comments>https://especializa.com.br/blog/2010/07/07/jsp-java-server-pages-ou-ja-se-phoi/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 21:22:10 +0000</pubDate>
		<dc:creator>especializa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java ee]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[servlets]]></category>

		<guid isPermaLink="false">http://especializa.com.br/blog/?p=207</guid>
		<description><![CDATA[Desde os tempos mais remotos, o JSP (Java Server Pages) sempre fez parte da especificação Java 2 Enterprise Edition (nossa conhecida J2EE 1.x). A idéia era simples: Servlets onde o foco for código Java, JSP onde o foco for HTML. A clássica divisão de responsabilidades entre designers e programadores. Com a constante sugestão de alguns [...]]]></description>
				<content:encoded><![CDATA[<p>Desde os tempos mais remotos, o JSP (Java Server Pages) sempre fez parte da especificação Java 2 Enterprise Edition (nossa conhecida J2EE 1.x). A idéia era simples: Servlets onde o foco for código Java, JSP onde o foco for HTML. A clássica divisão de responsabilidades entre designers e programadores.</p>
<p>Com a constante sugestão de alguns frameworks MVC populares em usar outros engenhos de templates em detrimento do padrão JSP, como Velocity ou FreeMarker, e ainda, desde o Java EE 5.0, com a inserção do JSF, que nunca se deu muito bem com JSP, a pergunta foi, será que o JSP ficou obsoleto? Agora no Java EE 6.0, o Facelets virou padrão e a própria documentação oficial que saiu agora em Junho quase esqueceu de falar de JSP. Seria JSP <strong>J</strong>á <strong>S</strong>e <strong>P</strong>hoi? (E se foi com pê-agá).</p>
<p>Clica aí no leia mais pra gente discutir esse assunto.</p>
<p><span id="more-207"></span></p>
<p><em>N</em><em>o princípio era o verbo</em>, digo: <em>o socket</em>. Em nossas turmas de Java Developer, falamos sobre esse fundamento da programação distribuída. Como duas máquinas conseguem se comunicar em uma rede, preferencialmente via TCP/IP. Sempre acreditei que isso fosse interessante para quem ainda vai estudar Java para Web, porque podemos criar um exemplo construindo o browser e o servidor Web. Claro que o foco não é a reinvenção da roda, mas a discussão sobre a necessidade de um protocolo de comunicação que diga quem escreve e quem lê e qual o formato da escrita para que a comunicação se dê plenamente.</p>
<p>No Java Enterprise, existe a figura do servidor Web, como o nosso conhecido Apache Tomcat. A função dele é responder à onipresente outra figura que não necessariamente é escrita em Java, o browser, conhecendo plenamente o protocolo HTTP (obviamente que bem mais aprofundado do que no nosso curso Java Developer) e já entendendo que deve criar um objeto Java e chamar um método específico seu de acordo com a URL da requisição. Para os que já sabem disso, é aquela história do arquivo web.xml mapear um &lt;url-pattern&gt; para alguma &lt;servlet&gt; e a chamada ao método service() da servlet, que se for subclasse de HttpServlet, vai direcionar a requisição para um método como doGet(), doPost(), etc, de acordo com o método de requisição.</p>
<p>Para quem vem dessa linha, ou seja, quem aprendeu a programar em Java standalone, depois em rede, em rede com respostas concorrentes e finalmente caiu na Web, as Servlets são algo bem simples e interessante. No entanto, para quem aprendeu primeiro o HTML para criação de páginas estáticas, sabe como navegar na Internet e pretende tornar seu site mais dinâmico, ter que aprender Servlet pode não ser a coisa mais instigante da face da Terra.</p>
<p>O JSP entra justamente nessa lacuna. Fornecendo a capacidade de se escrever uma página HTML onde o programador (ou mesmo o designer) pode adicionar tags  &lt;% e %&gt; (e algumas variações que não vou entrar no mérito) e inserir assim conteúdo dinâmico à página. O problema é que mesmo quem nunca viu uma Servlet mais gorda na vida, vai acabar querendo escrever códigos de programação mais densos dentro dessas tags, conhecidas como scriptlets. O que vai acabar construindo um código que fora é HTML, dentro é Java. E esse Java acessa banco de dados, aplica regras de negócio, controla navegação, itera sobre resultados, enfim, faz tudo junto e misturado. Daí o termo código macarrônico.</p>
<p>Surgiram então soluções como JSP EL e JSTL que, juntas, dão mais cara de HTML e menos de Java aos códigos JSP e resolvendo detalhes como não precisar chamar get/sets dos objetos e misturar os escopos dos atributos setados na requisição, na sessão e na aplicação (engraçado, isso em PHP é visto como algo ruim, vai entender &#8230;).</p>
<p>O problema é que o JSP não se adequa muito bem ao mecanismo de alguns frameworks MVC e foi preterido pelos Struts I e II, por exemplo. Com JSF, a coisa foi ainda pior. O JSP não se encaixa no ciclo de vida de um componente JSF, o que torna as coisas mais lentas quando não dão erro. Um exemplo de erro é quando usamos a tag &lt;c:forEach&gt; do JSTL com tags JSF dentro. Se no interior dela inserirmos alguma tag com o atributo Id, a página não será renderizada quando houver mais de uma iteração da coleção varrida pelo &lt;c:forEach&gt;. No código abaixo:</p>
<pre class="brush: xml;">
&lt;c:forEach items=&quot;#{meuBean.itens}&quot; var=&quot;meuItem&quot;&gt;
    &lt;h:inputText id=&quot;elemento&quot; value=&quot;#{meuItem.nome}&quot;/&gt;
&lt;/c:forEach&gt;
</pre>
<p>Quando <em>itens</em>, uma coleção de qualquer coisa de <em>meuBean</em> tiver mais de um item adicionado, a página vai dar erro. Isso ocorre porque o JSP é processado antes. Quando chegar a fase JSF de renderização da página, o JSP terá sido executado e gerado duas linhas inputText com o mesmo id.</p>
<p>Já no código abaixo:</p>
<pre class="brush: xml;">
&lt;h:dataTable value=&quot;#{meuBean.itens}&quot; var=&quot;meuItem&quot;&gt;
    &lt;h:column&gt;
        &lt;h:inputText id=&quot;elemento&quot; value=&quot;#{meuItem.nome}&quot; /&gt;
    &lt;h:column&gt;
&lt;/h:dataTable&gt;
</pre>
<p>Refizemos a mesma coisa usando apenas tags JSF. Aqui, tudo é executado no mesmo momento, chegando apenas um id elemento.</p>
<p>Na nova documentação oficial do Java EE 6.0, há uma passagem no mínimo curiosa:</p>
<p>&#8220;<em>JSP is considered as a deprecated presentation technology for JavaServer Faces 2.0.</em>&#8221;</p>
<p>Claro, não estou negando o fato de que nem sempre você vai precisar do JSF. Nesses momentos o JSP pode lhe atender. Enfim, o que acho estranho é o fato de depois de grandes investimentos sobre o JSP ele estar sendo resumido a pequenos códigos uma vez que se vende o JSF para aplicações corporativas. Fica a dúvida sobre o que fazer quando utilizarmos JSP em um projeto mais simples que depois se torne um grande sistema. Devemos trocar todo o legado por JSF+Facelets, manter o JSP mesmo que menos integrado com o background corporativo gerando um custo de manutenção mais elevado ou misturar os dois e investir em uma combinação considerada oficialmente obsoleta?</p>
<p>Posso mudar de opinião amanhã, mas pra mim JSP Já Se Phoi.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 808px; width: 1px; height: 1px; overflow: hidden;">&lt;h:inputText id=&#8221;elemento&#8221;/&gt;&lt;h:inputText id=&#8221;elemento&#8221;/&gt;</div>
]]></content:encoded>
			<wfw:commentRss>https://especializa.com.br/blog/2010/07/07/jsp-java-server-pages-ou-ja-se-phoi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
