sábado, 26 de abril de 2014

Java Web Sem Java

Bom, Isto não é um tutorial. É pra descontrair.

Vejo muito artigo de tecnologia mostrando  como fazer aplicativo web sem precisar de javascript ou html, apenas java. Que tal a reversal?

Você precisará dos seguintes ítens:


  1. java 7
  2. apache tomcat 7
  3. eclipse JEE com maven
Abra seu eclipse e crie um novo projeto maven:


Marque a opção "create a simple project":


Preencha conforme o screenshot e dê finish:


Como escolhemos o empacotamento do tipo war, o eclipse adiciona os floreados do wtp magicamente pra você:


Agora é hora de configurarmos o tomcat. Siga para http://tomcat.apache.org/download-70.cgi e baixe a versão .tar.tgz:


Descompacte:




Agora no eclipse vá até a aba Servers e adicione um novo servidor:


Indique a pasta do tomcat 7 e aperte finnish:


Agora vamos colocar o maven para trabalhar! abra o arquivo pom.xml e siga para a aba homônima:

Adicione as seguintes dependências:
<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>jstl</artifactId>
 <version>1.2</version>
</dependency>
<dependency>
 <groupId>javax</groupId>
 <artifactId>javaee-api</artifactId>
 <version>7.0</version>
 <scope>provided</scope>
</dependency>
<dependency>
 <groupId>com.h2database</groupId>
 <artifactId>h2</artifactId>
 <version>1.4.177</version>
</dependency>


Seu pom.xml deve estar assim:


A esta altura, o eclipse deve estar acusando um erro sobre a versão do java; adicione o compiler plugin no pom.xml para subirmos a versão do java:
<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>3.1</version>
 <configuration>
  <source>1.7</source>
  <target>1.7</target>
 </configuration>
</plugin>

Seu pom deve ficar assim:


Não esqueça de atualizar o projeto (maven > update project):

Agora, crie o arquivo context.xml, que é onde vamos configurar nosso datsource. ele deve ficar dentro da pasta META-INF em webapp, conforme pode ser visto abaixo:


Como?! A pasta não existe? O arquivo é vazio? Crie a pasta e o arquivo e adicione no xml este conteúdo:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Context>
 <Resource name="jdbc/justjstl-ds" auth="Container"
  type="javax.sql.DataSource" driverClassName="org.h2.Driver"
  username="sa" password="sa" url="jdbc:h2:justjstl"
  maxActive="100" maxIdle="30" maxWait="5000" testWhileIdle="true" 
  testOnBorrow="true" testOnReturn="false" validationQuery="SELECT 1" 
  validationInterval="30000" timeBetweenEvictionRunsMillis="30000" 
  minIdle="10" initialSize="10" removeAbandonedTimeout="60" 
  removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" />
</Context>

Vamos criar nossos jsp's agora. crie este arquivo dentro da pasta webapp e chame-o de index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/sql"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Just JSTL</title>
</head>
<body>
 <h1>JSTL Agenda</h1>
 <a href="new.jsp">Novo contato</a>
 <h2>Contatos</h2>
 <table style="width: 100%">
  <thead>
   <tr>
    <th>ID</th>
    <th>Nome</th>
    <th>Endereço</th>
    <th>Telefone</th>
    <th>Ações</th>
   </tr>
  </thead>
  <tbody>
   <s:setDataSource dataSource="jdbc/justjstl-ds" var="ds" />
   <s:update dataSource="${ds}">
    create table if not exists agenda(
     id integer not null primary key auto_increment,
     nome varchar(255),
     endereco varchar(255),
     telefone varchar(255)
    );    
   </s:update>
   <s:query var="result" dataSource="${ds}">
    select * from agenda
   </s:query>
   <c:forEach var="row" items="${result.rows}">
    <tr>
     <td>${row.id}</td>
     <td>${row.nome}</td>
     <td>${row.endereco}</td>
     <td>${row.telefone}</td>
     <td><a
      href="update.jsp?id=${row.id}&nome=${row.nome}&endereco=${row.endereco}&telefone=${row.telefone}">Editar</a>
      |<a href="delete.jsp?id=${row.id}">Excluir</a></td>
    </tr>
   </c:forEach>
  </tbody>
 </table>
</body>
</html>

Agora crie o new.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Editar contato</title>
</head>
<body>
 <h1>JSTL Agenda</h1>
 <a href="index.jsp">Voltar</a>
 <h2>Contatos</h2>
 <form action="save.jsp" method="POST">
  <p>
   <label>Nome</label><br /> <input name="nome"/>
  </p>
  <p>
   <label>Endereço</label><br /> <input name="endereco"/>
  </p>
  <p>
   <label>Telefone</label><br /> <input name="telefone"/>
  </p>
  <p>
   <input type="submit" />
  </p>
 </form>
</body>
</html>

save.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Novo contato</title>
<meta http-equiv="refresh" content="2;URL=index.jsp"/>
</head>
<body>
 <s:setDataSource dataSource="jdbc/justjstl-ds" var="ds" />
 <s:update dataSource="${ds}">
  
  <c:if test="${param.id eq null}">
   insert into agenda (nome,endereco,telefone) values (?,?,?);
  </c:if>
  
  <c:if test="${param.id ne null}">
   update agenda set nome = ?, endereco = ?, telefone = ? where id = ?
  </c:if>
  
  <s:param value="${param.nome}" />
  <s:param value="${param.endereco}" />
  <s:param value="${param.telefone}" />

  <c:if test="${param.id ne null}">
   <s:param value="${param.id}" />
  </c:if>
 </s:update>
 <h1>Sucesso!</h1>
</body>
</html>

update.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Editar contato</title>
</head>
<body>
 <h1>JSTL Agenda</h1>
 <a href="index.jsp">Voltar</a>
 <h2>Contatos</h2>
 <form action="save.jsp" method="POST">
  <p>
   <label>ID</label><br /> <input name="id" readonly value="${param.id}"/>
  </p>
  <p>
   <label>Nome</label><br /> <input name="nome" value="${param.nome}"/>
  </p>
  <p>
   <label>Endereço</label><br /> <input name="endereco" value="${param.endereco}"/>
  </p>
  <p>
   <label>Telefone</label><br /> <input name="telefone" value="${param.telefone}"/>
  </p>
  <p>
   <input type="submit" />
  </p>
 </form>
</body>
</html>

delete.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/sql"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Excluir</title>
<meta http-equiv="refresh" content="2;URL=index.jsp" />
</head>
<body>
 <s:setDataSource dataSource="jdbc/justjstl-ds" var="ds" />
 <s:update dataSource="${ds}">
  delete from agenda where id = ?
  <s:param value="${param.id}" />
 </s:update>
 <h1>Sucesso</h1>
</body>
</html>

A aplicação completa deve estar mais ou menos assim:

Execute a aplicação:


Pode acontecer de dar um erro dizendo que é impossível executar a aplicação:


Caso este erro ocorra, nada tema! adicione este aquivo na pasta WEB-INF:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 version="3.0">
</web-app>

abra o arquivo de configuração do eclipse chamado org.eclipse.wst.common.project.facet.core.xml e mude o valor da installed facet jst.web para 3.0. Este arquivo não é visível normalmente, use o Navigator (window>show view>navigator) para encontrá-lo:


Rode o update project do maven mais uma vez e tudo deve estar curado. volte a executar o projeto:


Após executar, pode ocorrer outro erro:


Leia o erro da stacktrace e faça a correção pedida no context.xml:

Execute a aplicação novamente e...


Pronto! uma agenda perfeitamente funcional sem uma linha de java rodando em cima de toda tecnologia do java para a web.

Finalizando, reitero que isto é um exercício de descontração; você tem mais benefícios usando java e/ou qualquer outra tecnologia de controle mais decente. escrevendo seu aplicativo em jstl puro você conseguirá fazer códigos desnecessariamente complicados mais facilmente. Pense nisso.

No mais, jstl é uma tecnologia básica e tem sua aplicação até hoje. Basta saber como e quando usar.

Sem mais, até a próxima.










Nenhum comentário :

Postar um comentário