Aplicação simples com JSP e Servlet

10 respostas
renatoramiro

Oi pessoal,

Já estudei JSP e Servlet, mas já faz algum tempo que não utilizo. E de umas semanas para cá, voltei a estudar. E logo apareceram diversas dúvidas. Lá vai a primeira:

Estou fazendo uma aplicação simples para calcular o IMC. Criei o arquivo jsp com um form para o usuário digitar o peso e a altura. Mas não sei como fazer o cálculo.

Tentei fazer o cálculo na própria página jsp, mas me lembrei que o jsp é apenas visual, todos os cálculos devem ser feitos nos servlets.

E é exatamente aí que está a duvida. Não sei como jogar o resultado do cálculo para a página jsp. Como eu poderia fazer isso?

Valeu.

10 Respostas

wandersonxs

Segue um exemplo.:

No Servlet:

request.setAttribute("erro","ok");

RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
dispatcher.forward(request,response);

Na página de jsp coloque assim:

<% request.getAttribute("erro")
out.println("Login ou senha inválidos!");
%>

Ou melhor ainda pode usar EL para captar o valor na JSP.

Abraços
Wanderson

caio_ferreira

Olá, eu fiz um exemplo para calcular o IMC, mas acontece um problema, eu so consigo passar um valor para o Servlet, como String, se eu tento colocar no formulario minha altura 1,80, gera um erro, alguem sabe como resolver isso.

o código ta ai.

Formulario

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Calcular IMC</title>
    </head>
    <body>
        <h2>Informe seus dados</h2>
        <form method="GET" action="imc.do">
            Altura:<input type="text" name="altura"/><br>
            Peso:<input type="text" name="peso"/><br>
                <input type="submit"/>
        </form>
    </body>
</html>

O servlet

package com.imc;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;



public class calcularIMC extends HttpServlet
{
    public float imc;
    public String condicao;
        
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            IOException, ServletException{
        
       
        String altura = request.getParameter("altura");
        String peso = request.getParameter("peso");
        
        imc = Float.parseFloat(peso) / (Float.parseFloat(altura) * Float.parseFloat(altura));
        
        
        
        if(imc < 18)
        {
            condicao = "Abaixo do peso";
        }
        else
            if(imc > 18 & imc < 25)
            {
                condicao = "Peso normal";
            }
            else
                if(imc > 25 & imc < 30)
                {
                    condicao = "Acima do peso";
                }
                else
                    if(imc > 30)
                    {
                        condicao = "obesso";
                    }
        
        request.setAttribute("condicao", condicao);
        
        RequestDispatcher rd = request.getRequestDispatcher("resultadoimc.jsp");
        rd.forward(request, response);
        
        
    }
}

O JSP que exibe a resposta

<html>
    <head>
        <title>Resultado IMC</title>
    </head>
    <body>
        <h3>Voce esta: </h3>
        <% String condicao = (String) request.getAttribute("condicao");
        out.print(condicao);
        %>
 
    </body>
</html>
caio_ferreira

ae, ja resolvi o problema, eu q tava fazendo besteira, na hora de colocar os dados no formulario eu tava colocando a altura assim: 1,80 e o certo seria assim 1.80
:lol: :lol: :lol:

wandersonxs

Vivendo e aprendendo… rs

Boa sorte.

Abracos
Wanderson 8)

R

Nao eh uma boa pratica tu usar scriptlet em sua camada de visualizaçao vc pode muito bem utilizar tags que foram feitas para isso por exemplo, outra coisa eh que para vc mandar os campos do seu formulario para sua servlet basta mapeala dentro do web.xml da seguinte forma

<servlet>
    <servlet-name>Nome da sua servlet</servlet-name>
    <servlet-class>classe da servlet</servlet-class>
</servlet>

<servlet-mapping>
        <servlet-name>nome da servlet que vai mapear alguma coisa(no caso o mesmo da servlet dai de cima)</servlet-name>
        <url-pattern>aqui o diretorio da pagina que vc vai mapear</url-pattern>
<servlet-mapping>

dessa forma os campos do seu formulario serao passados para a servlet que foi mapeada dentro do web.xml e la em sua servlet basta pegar os parametros utilizando o request.getParameter("nome co campo");

depois de ter pego os campos vc fara o calculo necessario e ira atribuir a sua camada de visualizaçao um atributo atraves do

request.setAttribute("como vc vai referenciar na visualizaçao", nome do atributo na servlet);

depois eh so mandar um dispatch para a pagina correspondente, tem em um exemplo la em cima!!

apos isso na sua jsp vc vai poder imprimir o valor utilizando jstl da seguinte forma

utilizando a taglib core do jstl

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <c:out value="valor a ser mostrado  ${como vc vai referenciar na visualizaçao}"/>
<html>

boa sorte!!

caio_ferreira

kra não entendi a parte q vc falou q eu tenho q mapear a classe no web.xml e com isso a servlet ja vai conseguir recuperar os parametros da jsp.
como é feito, como ela vai recuperar os dados se eu não solicitar isso??? quem vai enviar os dados é o usuáro, nem sempre será os mesmos.

agora na questão do JSTL vc tem razão.

mas na explicação do web.xml, não entendi oq vc disse

R

bom eh o seguinte seus formularios podem ser maepados no web.xml cada logica de negocio sua pode ser mapeada para uma servlet especifica!

Agora como esse mapeamento ocorre vou explicar

primeiro vc declara a servlet dessa forma no arquivo web.xml que tem que estar dentro do seu diretorio WEB-INF

se nao houver um crie um como se segue

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4">

/* na tag servlet-name vc poe Nome qualquer para sua servlet jah na tag servlet-class vc especifica o caminho onde se encontra sua servlet ou seja a sua classe que eh uma servlet */

<servlet>
	<servlet-name>calculoIMC</servlet-name> /* aqui vc batiza sua servlet com um nome qualquer*/
	<servlet-class>be.com.calculoimc</servlet-class> /* aqui vc poe o caminho onde se encontra a sua servlet  de acordo com os pacotes em cima estou apenas dando um exemplo usando pacotes*/
</servlet>

/* bem aqui vc vai mapear sua servlet para uma url no campo servlet name vc deve colocar o mesmo nome que foi dado ai em cima dentro da tag servlet jah na tag url-pattern vc deve colocar o caminho da sua pagina qeu vai ser mapeada no caso o seu formulario */

<servlet-mapping>
	<servlet-name>calculoIMC</servlet-name>
	<url-pattern>/servlets/calculoIMCPage</url-pattern> // aqui sempre começando por barra
</servlet-mapping>

bom se vc fez tudo isso certinho quando o usuario preencher os campos do seu formulario e der um submit o qeu vai acontecer a sua servlet vai ver que foi mapeada para aquela pagina e entao os dados que usuario digitou serao passados para tal servlet dessa forma vc vai poder pegar os parametros passados usando o

request.getParameter(“nome do campo”);

Boa sorte!!

Qualquer duvida posta ai de novo que eu respondo!!

Abraço!!

R

Desculpa cara mas faltou fechar a tag web-app do web.xml

la no final do arquivo web.xml

basta colocar no final o seeguinte

falowss

caio_ferreira

ah! agora sim, entendi, eu tinha feito.

e no meu formulario eu coloquei a ação q aponta para a servlet

flw

R

Bom faltou esse detalhe mesmo na action do seu form vc poe o mesmo valor da tag que mapeia sua servlet la no arquivo web.xml

Abraço Boa sorte!!

Criado 13 de janeiro de 2009
Ultima resposta 15 de jan. de 2009
Respostas 10
Participantes 4