sexta-feira, 29 de abril de 2011

Olá Mundo com Struts2 e NetBeans

Olá galerinha!!

Vamos pra mais um Hello World, agora com o Struts2. Pra comecar crie um novo projeto no NetBeans (estou usando no Linux, aqui no Foojava tem um post que ensina instalar tudo certinho), segue -> JavaWeb -> Aplicacao Web, de o nome de HelloStruts, estou a utilizar servidor Tomcat 6.0.26 e Java EE 5, no passo 4 selecione o framework Struts2 e desmarque a opcao de Criar pagina de exemplo, caso contrário o hello world já vem pronto de exemplo, sacanagem!

Segue imagens dessa primeira parte pra ajudar vocês que ficaram com alguma dúvida nessa primeira parte.




Bom, projeto criado, vamos editar o arquivo index.jsp que foi criado junto com o projeto, este arquivo está marcado para ser sua página inicial no arquivo web.xml. Dentro do index coloque o seguinte código:

<%-- 
    Document   : index
    Created on : 28/04/2011, 20:55:03
    Author     : bolivar
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%-- Adicione essa taglib para usar as tags do Struts --%>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <s:form action="Hello">
            <s:textfield name="nomeUsuario" label="Seu nome" />
            <s:submit />
        </s:form>
    </body>
</html>

Perceba que no início da página foi adicionado uma linha de código que inclui as tags especiais do Struts, para usar essas tags devemos adicionar o prefixo s: nas tags, é interessante dar uma olhada nessas tags, o NetBeans tem um autoComplete que msotra todas as tags possíveis de serem utilizadas. Essas tags serão substituidas por tags HTML normais quando o projeto for executado, em tempo de execução/compilaçao, não tenho bem certeza.

Crie agora mais duas páginas JSP, chame uma de sucesso.jsp e outra de erro.jsp.


 Na página de erro coloque apenas HTML normal com uma mesangem de erro e link para volar ao início.
<%-- 
    Document   : erro
    Created on : 28/04/2011, 21:08:18
    Author     : bolivar
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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=UTF-8">
        <title>Primeiro Hello Struts</title>
    </head>
    <body>
        <p>
            Erro: Campo nome nao pode ser vazio, informe seu nome!<br><br>
            <a href="index.jsp">clique aqui pra voltar</a>
        </p>
    </body>
</html>

Na página de sucesso vamos utilizar novamente a taglib do Struts2, para exibir uma mensagem de Ola.
<%-- 
    Document   : sucesso
    Created on : 28/04/2011, 21:06:57
    Author     : bolivar
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Primeiro Hello Struts</title>
    </head>
    <body>
        <h1><s:property value="mensagem" /></h1>
    </body>
</html>

Bom, até agora temos duas variáveis/propriedades para trabalhar, uma está na index.jsp que é o nomeUsuario e outra na página de sucesso que é a mensagem. Para manipularmos estes campos vamos criar uma classe Java que será a nossa Action, crie uma classe java dentro de um novo pacote chamado acoes. De o nome para a nova classe de HelloAction.



Criado a classe HelloAction, dentro de um pacote acoes, coloque o seguinte código.

package acoes;

/**
 * @author bolivar
 */
public class HelloAction {

    private String Mensagem;
    private String nomeUsuario;

    public String execute() {
        if (getNomeUsuario().length() > 0)
        {
            setMensagem("Ola " + getNomeUsuario());
            return "SUCESSO";
        } else
        {
            return "ERRO";
        }
    }

    /**
     * @return the Mensagem
     */
    public String getMensagem() {
        return Mensagem;
    }

    /**
     * @param Mensagem the Mensagem to set
     */
    public void setMensagem(String Mensagem) {
        this.Mensagem = Mensagem;
    }

    /**
     * @return the nomeUsuario
     */
    public String getNomeUsuario() {
        return nomeUsuario;
    }

    /**
     * @param nomeUsuario the nomeUsuario to set
     */
    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }
    
}

Esta classe estamos criando duas variáveis String que correspondem aos nossos elementos nas JSP, nomeUsuario e mensagem, implementamos os métodos GET e SET para definir valores e recuperar os valores dessas propriedades e criamos uma função chamada execute(), que é o método padrão das actions dentro do Struts.

Dentro desse método execute() nós verificamos se foi preenchido o campo nomeUsuario, em caso TRUE nós setamos a propriedade mensagem com o valor 'Olá ' e concatenamos com nome informado pelo usuário que está na propriedade nomeUsuario, tudo certo, retorna 'SUCESSO', este retorno é muito importante, não é necessário ter o nome 'sucesso', mas precisa existir para mapearmos dentro do struts depois.

No caso do usuário não ter digitado o seu nome, o método vai retornar 'ERRO'.

Muito bem, vamos para nossa parte final do Hello World, é impressão minha ou fazer um hello em Struts é super complicado? hehe Seguindo, agora só nos falta relacionar tudo isso dentro do arquivo de configuração struts.xml, o código abaixo simples e comentadinho.

<struts>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
        <!-- Configura as actions, o name é o que esta sendo chamada no form da index.jsp,
 class é local da action a ser executada e adicionei também o method execute, 
isso não é necessário quando o método tem este nome, mas se tivesse outro nome como remover, listar... ai seria necessário -->
        <action name="Hello" class="acoes.HelloAction" method="execute">
            <!-- Configura os resultados da action, em caso da funçao retornar SUCESSO 
vai ir para pagina JSP sucesso, caso de ERRO vai para erro.jsp -->
            <result name="SUCESSO">/sucesso.jsp</result>
            <result name="ERRO">/erro.jsp</result>
        </action>

    </package>
</struts>

Bom pessoal, basicamente é isso ai, para ver o Hello com Struts funcionando basta executar o projeto agora e correr pro abraço. A estrutura do projeto ficou igual a imagem abaixo.


Até mais!

quarta-feira, 30 de março de 2011

Netbeans + Tomcat + Struts2 + Hibernate + Linux

Buenas, vou mostrar aqui rapidamente como instar o Netbeans em Linux (alguma distro baseada em Debian). A diferença básica é que vamos instalar o servidor de aplicação Tomcat também, e vamos dar suporte a Struts2, e padrão o Netbeans suporta a 1.8 se não me engano.

Na teba abaixo tenho a versão completa baixada. Mando instalar:
sh nome_do_executavel.

Em seguida, resista a tentação de dar "next" na primeira tela e vá em "costomize".

Marque o Tomcat, e aí sim, daqui por diante é instalação padrão.


Se por um acaso, na tela seguinte ele reclamar que você não tem o JDK, ou ele não acha o path, mande instalar o JDK antes. Repita daí a instalação.

Hibenate
Não há nada a fazer, na instalação padrão vem com suporte tudo certinho, drivers para alguns bancos. Tudo ok.

Struts2
No o Netbeans instado, precisamos dar suporte a Struts2. Baixe esse aquivo aqui. Descompacte a pasta.

Abra o Netbeans, no menu "tools" e em seguida em "plugins", e na aba "downloaded". Vamos instalá-los.

Mande adicionar os plugins, busque-os, selecione-os.


E em seguida vá em "install".


Aceite os termos, mande continuar no aviso que ele fala da compatibilidade... e no fim ele vai pedir para reiniciar a IDE. Ok, pode ser.

Pronto! IDE configurada!

sábado, 27 de novembro de 2010

Jogo da Forca em Java

Olá pessoas!
Voltando a postar no Blog.
Desta vez, vou postar um joguinho que tivemos que fazer para a aula de Java, um jogo da Forca. Não é muito complicado, visual bonitinho e funciona \o/
Vou colocar as telas e o código abaixo.

Tela Inicial:

 Nesta tela, temos o desenho da forca e onde será colocado as letras para verificação e aparecem as dicas. Para jogar, é necessário ir em Arquivo, Novo Jogo, que habilitará as caixas de texto e ja sorteara uma palavra. Claro que pode não haver nenhuma palavra cadastrada, então o usuário terá que ir no menu Cadastrar, Palavras e Dicas, que será explicado depois.
Voltando ao jogo, uma palavra foi sorteada, como na imagem abaixo, mostrando a dica:
Após aparecer a dica, o usuário pode testar as letras, embaixo aparecerão riscos, mostrando quantas letras a palavra possui.
Testarei a letra E:
 Como a letra não existe na palavra, ele ja mostra uma parte da figura que formará o corpo do enforcado.
Vou agora inserir a letra A:
Como esta letra existe na palavra, ela aparece em seu(s) respectivo(s) lugar(es) nos riscos abaixo.
Completando com as letras C e S:
Como eu acertei a palavra, o programa exibe uma mensagem de que eu venci o jogo e me pede se eu quero jogar novamente. Se eu escolher Sim, ele sorteará uma nova palavra; se eu escolher Não, o programa será fechado.
Vou colocar agora os códigos para ver como funciona.
O Primeiro código será do botão Novo Jogo:




private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
   lblDigite.enable(true);//habilita os campos do jogo
   CampoTentar.enable(true);
   // btVerifica.enable(true); não desabilitar botão pq depois não habilita        TxtDica.enable(true);
   PalavraForca.enable(true);
   // Dá um reset no jogo:
   PalavraForca.setText("");//limpa os campos
   Tentativas.clear();//limpa as tentativas
   sortearpalavra(); //pega uma palavra do Txt e sorteia
   FimDoJogo=false; //Como ainda não é o fim do jogo, a opção se torna falsa
   LabelImagem.setIcon(icon0); //seta o ícone normal, do desenho da forca
   NumTentativas=0; // zera o numero de tentativas
   desenharpalavra(false);//a palavra só será desenhada se o usuário perder o jogo
}

O próximo código, é o do botao verificar:

private void btVerificaActionPerformed(java.awt.event.ActionEvent evt) {                                           
   if(!FimDoJogo){//verifica se não é o fim do jogo
      tentarletra(CampoTentar.getText());//se não for, pega a letra escrita e verifica se tem na palavra
      CampoTentar.setText("");//deixa o campo onde são digitadas as letras vazio
   }

}

Agora, vou colocar os métodos utilizados, que são chamados no menu e botão:


public class principal extends javax.swing.JFrame { //criacao de variáveis e definição das imagens e cria os vetores
    String PalavraSorteada = new String();
    ArrayList Tentativas = new ArrayList();
    int MaxTentativas = 6 ;
    int NumTentativas = 0 ;
    boolean FimDoJogo = true;
    ImageIcon icon0 = new ImageIcon("forca00.jpg");
    ImageIcon icon1 = new ImageIcon("forca11.jpg");
    ImageIcon icon2 = new ImageIcon("forca22.jpg");
    ImageIcon icon3 = new ImageIcon("forca33.jpg");
    ImageIcon icon4 = new ImageIcon("forca44.jpg");
    ImageIcon icon5 = new ImageIcon("forca55.jpg");
    ImageIcon icon6 = new ImageIcon("forca66.jpg");
    ArrayList PalavrasArquivo = new ArrayList();
    ArrayList DicasArquivo = new ArrayList();

Essas são as declarações no começo da classe; é necessário importar:


import java.awt.Image;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JDialog;


Abaixo, o método que faz o sorteio da palavra:

public void sortearpalavra() {
   try {
        File Arquivo = new File("Palavras.txt"); //lê o arquivo Txt
        FileReader leitor = new FileReader(Arquivo);
        BufferedReader leitorBuf = new BufferedReader(leitor);
        PalavrasArquivo.clear(); //limpa o temporario que armazena as palavras
        DicasArquivo.clear(); //limpa o temporaio que aramzena a dica

        String linha=null;

        while((linha = leitorBuf.readLine()) !=null){
              String colunas[] = linha.split("#"); //lê a linha contendo a palavra e a dica, sabendo q as mesmas sao separadas pelo
              PalavrasArquivo.add(colunas[0]);//caractere #
              DicasArquivo.add(colunas[1]);
        }

        leitorBuf.close();

        int TotalPalavras = PalavrasArquivo.size();//lê o tamanho da palavra para desenhar os traços
        int CodPalavraSorteada = (int) (Math.random()*(TotalPalavras)) ;//sorteia uma palavra randomicamente
        PalavraSorteada = (String) PalavrasArquivo.get(CodPalavraSorteada);//pega a plavra sorteada
        PalavraSorteada= PalavraSorteada.toUpperCase();//coloca em maiusculo
        TxtDica.setText("DICA: "+(String) DicasArquivo.get(CodPalavraSorteada));//pega a dica e exibe
   }
   catch(Exception ex) {
       System.out.println("Erro: "+ ex.toString());};
} 

O próximo método, é o que desenha a palavra na tela, nos riscos, quando o usuário acerta a palavra:

public void desenharpalavra(boolean MostrarTodaAPalavra){
    String tempTexto = new String();
    boolean faltauma = false;
    for(int n=1;n<=PalavraSorteada.length();n++){ //pega o tamanho da palavra e cria os tracinhos
        if((MostrarTodaAPalavra) || (Tentativas.contains(PalavraSorteada.substring(n-1, n)))){
            tempTexto=tempTexto+PalavraSorteada.substring(n-1, n);
        }else{
            tempTexto=tempTexto+"_";
            faltauma=true;
        }
        tempTexto=tempTexto+" ";
    }

    PalavraForca.setText(tempTexto);

    if(!faltauma){
       FimDoJogo=true;
           if ((NumTentativas)<6){ //verifica se o num de tentativas é menor q 6; se for, o usuario ganhou
                joga_nov.pack(); //abre a mensagem q pede se o usuário quer jogar novamente
                joga_nov.setLocationRelativeTo(null);
                joga_nov.setVisible(true);
           }
            
       // Dá pra mostrar uma outra mensagem aqui.
    }
}

O próximo método, é o qe verifica as letras se existem na palavra:

    public void tentarletra(String Letra){
        Letra= Letra.toUpperCase();
        if(Tentativas.contains(Letra)){
            // Mostrar mensagem de q já foi tentada esta letra
        }else{ 
            // Armazena a letra nova na lista de tentativas.
            Tentativas.add(Letra);
            if(PalavraSorteada.contains(Letra)){
                // Acertou
                desenharpalavra(false);
            }else{
                NumTentativas=NumTentativas+1;//vai adicionando o num de tentativas; se errar, adiciona o desenho
                switch(NumTentativas){
                    case(1):{
                        LabelImagem.setIcon(icon1);
                        break;
                    }
                    case(2):{
                        LabelImagem.setIcon(icon2);
                        break;
                    }
                    case(3):{
                        LabelImagem.setIcon(icon3);
                        break;
                    }
                    case(4):{
                        LabelImagem.setIcon(icon4);
                        break;
                    }
                    case(5):{
                        LabelImagem.setIcon(icon5);
                        break;
                    }
                    case(6):{
                        LabelImagem.setIcon(icon6);
                        FimDoJogo=true;
                        desenharpalavra(true);
                        FimDoJogo=true;
                        jogo_novo.pack();
                        jogo_novo.setLocationRelativeTo(null);
                        jogo_novo.setVisible(true);
                        break;
                    }
                }
            }
        }
    }

Esta é a tela que aparece se o usuário ganha o Jogo. Se clicar em Sim, o jogo recomeçará, com uma nova palavra; se Não, o jogo seá fechado.
O código no botão Sim é o seguinte:





private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // Dá um reset no jogo:
        PalavraForca.setText("");
        Tentativas.clear();
        sortearpalavra();
        FimDoJogo=false;
        LabelImagem.setIcon(icon0);
        NumTentativas=0;
        desenharpalavra(false);
        joga_nov.setVisible(false);
    }

E no botão Não:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.exit(0);
    }

Quando o usuário perde o jogo, as mensagens são as mesmas, com os mesmos códigos.

Vou passar agora para a parte do Cadastro. O post ta grandinho ja hehehe
Não estou explicando muito o código porque a maior parte está comentada. E acho que o código não é muito difícil de entender.
Continuando, a seguir a tela de Cadastro.

No primeiro Campo, o usuário digita a Palavra que ele quer que seja usada no jogo; na segunda, a Dica da palavra.
No botão Salvar, o código é o seguinte:










private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        BufferedWriter arquivo;
 String valores = txtpalavra.getText() + "#" + txtdica.getText();
 try {
  // abre o arquivo de texto para acrescentar linhas
  arquivo = new BufferedWriter(new FileWriter("Palavras.txt", true));
  // escreve a linha de texto
  arquivo.write(valores);
  // insere uma quebra de linha
  arquivo.newLine();
  // força a gravação dos dados em disco
  arquivo.flush();
  arquivo.close();
                txtpalavra.setText("");
                txtdica.setText("");
  }
 catch (IOException erro)
  {
  // trata o erro
  }
    } 

É claro que terá alguns imports também, nada muito complicado.

Bom, acho que no básico é isso.
Não sou uma grande Expert em Java, mas to aprendendo ^^
Faltou implementar algumas coisas também, quem sabe depois de modificar eu posto as mudanças aqui.

Eabaixo, segue o Link pra quem quiser fazer download do Jogo. Só não consegui fazer o .jar executável funcionar XD

http://www.4shared.com/file/NKEODY4G/FORCA.html


Fui! :D

terça-feira, 20 de abril de 2010

Hello world, soma em JSP - JavaServer Pages - Java para web

Olá pessoal! Bem vindos ao site que a um ano prublica tudo quanto é tipo de "hello world" em java. Mas esse vocês ainda não viram, pelo menos não aqui.

Estou usando o NetBeans 6.8, completo. Devidamente instalado (já vimos como fazer isso).

Vou criar minha primeira JSP! Que emoção!

Com a IDE aberta, vamos em file->New Project. Escolha "Java Web" e "Web Application". Next.


Agora definimos onde vamos salvar os arquivos e qual vai ser o nome do projeto. Chamamos ele de "hello". Next.

O próximo passo é configurar "quem" vai rodar essas páginas. Durante a instalação instalamos o "GlassFish" que é um servidor web que entende JAVA. Tipo um "mod-php" do apache. Finish.


Depois do finish, ele vai demorar um pouco, criar arquivos, diretórios, registrar qualquer coisa... e vai te largar numa tela como a seguinte:



Nosso código ficou assim:
int a = 5;
int b = 8;        
int r = a+b;

Veja a tela - preste atenção nos delimitadores do bloco de instruções (linha 18 e 22):


Observem que junto a "resultado" tem o comando para imprimir o r.

Buenas! É isso!



Bom feriado!