Ajuda - criar página jsp usando servlet

20 respostas
A

a lógica é: no jsp recebe dois valores, campo1 e campo2 ao clicar em calcular os mesmos são enviados à servlet e lá existe a lógica de soma (campo1 + campo2) e imprime o resultado...

minha servlet:

public class CalculosMatematicos extends HttpServlet {
	

	/*public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
	}*/
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
		super.doGet(req, resp);
		
	}
meu web.xml:
<servlet>
    <description></description>
    <display-name>CalculosMatematicos</display-name>
    <servlet-name>CalculosMatematicos</servlet-name>
    <servlet-class>br.edu.praticarservlet.modelo.CalculosMatematicos</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CalculosMatematicos</servlet-name>
    <url-pattern>/CalculosMatematicos</url-pattern>
  </servlet-mapping>

meu jsp:

<!-- ex: se digitar André não vai bagunçar só porque tem acento-->
<%@ 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">
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>  

<html>
<body>
<form action="src='<%=request.getContextPath()%>/br.edu.praticarservlet.modelo.CalculosMatematicos'>">
Somar valores<br>
campo1 <input type="text" name="campo1"><br>
campo2 <input type="text" name="campo2"><br>
<input type="button" value="calcular" >
</form>
</body>
</html>

não está funcionando...

20 Respostas

Hebert_Coelho

Coloca o erro. Ajude-nos a te ajudar! [=

Z111

Qual parte? o envio ou mapeamento da servlet?

olhae um detalhezinho sobre o mapeamento e a chamada de servlets … http://www.guj.com.br./posts/list/92672.java

A

então gente, conseguí mapear como podem ver mas não funciona… e não dá erro só não funciona…

A

a lógica tb não conseguí implementar:

campo1 é somado com campo2 na servlet e a mesma dá o resultado…

glaucogoca

Está funcionando mas não dá o resultado que vc quer… é isso?

Aonde vc soma os valores??? em qual linha do seu código…

rafadeaguiar

Na tua servlet, tu precisa através do request, recuperar o campo 1 e o campo 2,

e aí com estes valores tu faz a soma, e retorna o resultado.

A

tem a servlet e o jsp minha dificuldade agora é como pegar os valores e depois devolver um resultado

[code]package br.edu.andredecotia.servlet1.modelo;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CalculoMatematico
 */
public class CalculoMatematico extends HttpServlet {

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//lógica
		
	}
}
<body>
<form name="f1" action="<%=request.getContextPath()%>\CalculoMatematico" method="get">
soma valores
<br>	
campo 1	<input type="text" name="campo1">
campo 2	<input type="text" name="campo2">
	<input type="submit" value="calcular">
</form>
</body>
A

tentei implementar mais ainda tá dando erro

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String campo1;
		String campo2;
		
		request.getAttribute("campo1");
		request.getAttribute("campo2");
		
		//dão pau
		campo1 = Integer.parseInt(campo1);
		campo2 = Integer.parseInt(campo2);
		
	}
Hebert_Coelho
andredecotia:
tentei implementar mais ainda tá dando erro
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String campo1;
		String campo2;
		
		request.getAttribute("campo1");
		request.getAttribute("campo2");
		
		//dão pau
		campo1 = Integer.parseInt(campo1);
		campo2 = Integer.parseInt(campo2);
		
	}

Cara, lógico q vai dar pau... Vc não ta jogando os valores para dentro do campo1 e campo2. MAuhahuahuuah

Seu request.getAttribute() não estar retornando o valor para ninguém!

Coloca ae String campo1 = request.getAttribute("campo1");

C ya

R

estava tentando fazer também , com uma página só por exemplo. ja consegui mil vezes, mas agora estou meio destreinado e está dando erro. eu costumo ate usar php, quando faço algo, pois sempre dá pepino.

<!-- ex: se digitar André não vai bagunçar só porque tem acento-->  
<%@ 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>  
<body>
<form method="POST"  action="index.jsp">  
Somar valores<br>  
campo1 <input type="text" name="campo1"><br>  
campo2 <input type="text" name="campo2"><br>  
<input type="submit" value="calcular" >  
</form>


<%
String campo1="0";
String campo2="0";
campo1=request.getParameter("campo1");
int c1=Integer.parseInt(campo1);
campo2=request.getParameter("campo2");
int c2=Integer.parseInt(campo2);
int c=c1+c2;
out.println("c"+c);
%>


</body>  
</html>

nao vejo o erro.é java.lang.nullfornmatexecption.

A

gostaria de não usar scriptlet pois é uma má prática a melhor opção é usar o parttern MVC…

como assim usar o setAttribute?

ps.vale
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
      
    String campo1;  
    String campo2;  
      
campo1=request.getParameter("campo1");  
int c1=Integer.parseInt(campo1);  
campo2=request.getParameter("campo2");  
int c2=Integer.parseInt(campo2);  
int c=c1+c2;  

request.setAttribute("c", cs);
getServletConfig().getServletContext().getRequestDispatcher("/NOMEDAPÁGINA.jsp").forward(request,response);
}

Mais ou menos isso, vc tem que devolver pra página o valor calculado.

E na página vc recebe ele assim

<% variavel =  request.getAttribute("c"); %>
A

opa tá quase funcionando agora... só falta saber como imprimir no jsp a msg

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
		//pegando valores dos campos do jsp e preparando 
		String campo1="";   
		String campo2="";   
		
		try{
		campo1 = request.getParameter("campo1");   
		campo2 = request.getParameter("campo2");
		Integer c1 = Integer.parseInt(campo1);   
		Integer c2 = Integer.parseInt(campo2);   
		    
		//lógica de soma
		Integer resultado = c1 + c2;       
			System.out.println(c1 + c2);
		}catch(NumberFormatException e){
			System.out.println("O formato desse número é estranho!");
		}
	}
B

Vamos por partes

Servlet

package br.com.guj.exemplos;

public class MinhaServlet extends HttpServlet {
	

	/*public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
	}*/
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
		
            // aqui é feito o tratamento de métodos GET do HTTP. GET é utilizado por padrão para ler recursos que se encontram no servidor.
            // Exemplo : Clica em um link em uma página.
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
		
            // aqui é feito o tratamento de métodos GET do HTTP. GET é utilizado por padrão para trazer recursos que se encontram no servidor.
		
	}

         // também existem outros métodos HTTP, como PUT, DELETE, OPTIONS, HEAD, e outros, cada um com doPut, doDelete, etc, para tratá-los.
         // http://en.wikipedia.org/wiki/HTTP#Request_methods

web.xml:

<servlet>
    <description></description>
    <servlet-name>XPTOHelloWorld</servlet-name> <!-- servlet-name é um nome interno dado para a servlet, pode ser qqr coisa -->
    <servlet-class>br.com.guj.exemplos.MinhaServlet</servlet-class> <!-- servlet-class é o nome completo da classe que vai tratar as requisições -->
  </servlet>
  <servlet-mapping>
    <servlet-name>XPTOHelloWorld</servlet-name> <!-- servlet-name é deve ser o mesmo nome privado da servlet -->
    <url-pattern>minhaurl</url-pattern> <!-- url-pattern é o endereço público na web entrar na servlet -->
  </servlet-mapping>

OBS: url-pattern é usada em conjunto com o context-path configurado da aplicação no servidor, exemplos abaixo.

JSP /caminho/minhapagina.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>
<body>
<form action="/minhaurl" method="POST"> <!-- com method POST, vai cair no método doPost da servlet -->
Somar valores<br>
campo1 <input type="text" name="campo1"><br>
campo2 <input type="text" name="campo2"><br>
<input type="button" value="calcular" >
</form>

Resultado: $resultado

<a href="/minhaurl">Meu link</a> <!-- links usam GET, que caem no método doGet da servlet -->

<a href="/minhaurl?campo1=12345&campo2=67890">Meu link com argumentos</a> <!-- passando os parâmetros campo1 e campo2 via GET, nos links -->

<!-- Nos exemplos acima, context-path era vazio. Caso o context-path seja "guj", os links agora são: -->
<a href="/guj/minhaurl">Meu link no GUJ</a>
<!-- Obs: O url-pattern no web.xml continua sendo somente minhaurl -->
</body>
</html>

doPost implementado:

@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		
            String campo1 = request.getParameter("campo1"); // caso o parâmetro não tenha sido passado, retorna null.
            String campo2 = request.getParameter("campo2");

            int a = Integer.parseInt(campo1); // caso não esteja no formato certo, mesmo tendo um espaço a mais passado, vai dar exceção de formatação.
            int b = Integer.parseInt(campo2);

            int soma = a + b;

            request.setAttribute("resultado", soma); // ou new Integer(soma), ou qqr objeto que tenha um método toString.

            String pagina = "/caminho/minhapagina.jsp"; // caminho para a JSP dentro do servidor
            request.getRequestDispatcher(pagina).forward(request, response);	
	}
A

puxa só tá dando —> IllegalStateException e não retornando o resultado da somatória no .jsp… falaram q ia ter de usar tal de request.setAttribute…

adorei a explicação do q é o servlet…

abraço,
André AS

B

Andre, tem o livro Use a Cabeça: JSP & Servlets, ele explica todo o básico do assunto. Leia ele antes de ficar na tentativa e erro de fazer isto funcionar.

A

entendí…
valeu

Hebert_Coelho

Cara, em algum post seu sobre Web eu tinha prometido um post que pudesse te ajudar.

Criando um WebServer

Olha aí, tem um exemplo de soma de dois valores. Creio que lhe será bastante útil.

C ya! \o_

gui.vms

Otimo post!

Hebert_Coelho

Opa. Valeu

Eu até atualizei o link para o blog novo! [=

  • modo propaganda on * :lol:
Criado 20 de julho de 2010
Ultima resposta 16 de nov. de 2011
Respostas 20
Participantes 9