Problemas com o Exemplo do Livro Use a cabeça Servlet & JSP

Ja editou chegei atrasado rsrs

VLw a Todos pela Ajuda,
Consegui compilar…

Com certeza voltarei aki com mais problemas xDd~

Agradeço a todos.

Att,

Ricardo Zanca.

HTTP Status 404 - /SelectBeer.do

type Status report

message /SelectBeer.do

description The requested resource (/SelectBeer.do) is not available.
Apache Tomcat/5.5.28

olha o erro q esta dando agora.

Esse erro eh no XML? ou no action do Form?

Mais uma vez erro na hora de copiar o exercicio… da uma olhada na sintaxe do livro e ve se bate com os seus arquivos…

esse erro é de digitação :wink:

faça os exercicios sem pressa, senao alguns erros desses passam desapercebidos…

Mais uma vez erro na hora de copiar o exercicio… da uma olhada na sintaxe do livro e ve se bate com os seus arquivos…

esse erro é de digitação :wink:

faça os exercicios sem pressa, senao alguns erros desses passam desapercebidos…

Não era erro de codigo andre, esqueci de copiar o arquivo .class para o Tomcat.

Vlw Pela ajuda.

Assim que eu travar no livro novamente eu volto… ^^

Bom Dia Galera,

Travei novamente. ¬¬

Tenho que criar uma classe para chamar um modelo chamado BeerExpert.

O codigo do modelo eh esse:

package com.example.model;
import java.util.*;

public class BeerExpert
(
       public List getBrands(String color)
       {
              List brands = new Arraylist();
              if (color.equals("amber"))
              {
               brands.add("Jack Amber");
               brands.add("Red Moose");
              }
              else
              {
               brands.add("Jail Pale Ale");
               brands.add("Gout Stout");
              }
              returns(brands);
       }
}

Eu Devo criar a classe no DD certo? (que no meu caso se chama web.xml)
Eu modifiquei o arquivo e o mesmo ficou assim:


<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
	version="2.4">


`<servlet>
	`<servlet-name> Ch3 Beer </servlet-name>
	`<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>


<servlet-mapping>
	<servlet-name>Ch3 Beer</servlet-name>
	`<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>

`<servlet>
	`<servlet-name> Ch4 Beer </servlet-name>
	`<servlet-class>com.example.model.BeerExpert</servlet-class>
</servlet>


<servlet-mapping>
	<servlet-name>Ch4 Beer</servlet-name>
	`<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>

</web-app>

O erro que aparece quando mando compilar o arquivo BeerExpert eh o seguinte:

C:\MyProjects\BeerV1>javac -classpath C:\Tomcat\common\lib\servlet-api.jar;class
es;. -d classes src\com\example\model\BeerExpert.java
src\com\example\model\BeerExpert.java:4: ‘{’ expected
public class BeerExpert
^
1 error

O que eu estou fazendo de errado?

Agradeço a ajuda.

Coloque seu código sempre entre as tags “code”. Assim:

seu código aqui

vlw marcos, não sabia que ficava desse jeito!!

Bem melhor de visualizar

Alguem pra ajudar hoje?

Olha, se não me engano é um detalhe ínfimo: você abriu parênteses ao invés de abrir chaves na definição da sua classe. Está assim:

public class BeerExpert [color=red]([/color]

Enquanto deveria ser assim:

public class BeerExpert {

Encontrei o erro do parenteses,

Agora quando eu Compilo aparece o seguinte erro:

C:\MyProjects\BeerV1>javac -classpath c:\tomcat\common\lib\servlet-api.jar;class
es;. -d classes src\com\example\model\beerexpert.java
src\com\example\model\beerexpert.java:9: cannot find symbol
symbol  : class Arraylist
location: class com.example.model.BeerExpert
              List brands = new Arraylist();
                                ^
src\com\example\model\beerexpert.java:20: cannot find symbol
symbol  : method returns(java.util.List)
location: class com.example.model.BeerExpert
              returns(brands);
              ^
Note: src\com\example\model\beerexpert.java uses unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.
2 errors

O que estou fazendo de errado?

Atenção pois o Java é case-sensitive: é ArrayList. E quando se retorna algo é return (e não return[color=red]s[/color]).

Além disso, procure respeitar o nome do arquivo e da classe (se a classe chama-se BeerExample, chame o arquivo de BeerExample.java, respeitando capitalização).

E compile com a opção -Xlint.

Só adicionando, o return não precisa ter o retorno entre parênteses (apesar de não ser proibido também). Prefira a versão sem parênteses para evitar que você confunda o return com um método. Por exemplo:

public static int getZero() {
    return 0; // sem parênteses
}

Obrigado mesmo pela Atenção Marcos,

Como pode ver, sou novo nessa linguagem…venho do PHP e estou apanhando muito pra aprender isso. Toda hora estou errando bobeiras…mas vou seguindo tentando…graças a ajuda de pesoas como você. Obrigado Mesmo.

Como eu faço para usar o xlint?

Mesmo sem Xlint o arquivo foi compilado.

Mas agora aparece o seguinte erro quando eu rodo a pagina:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Class com.example.model.BeerExpert is not a Servlet
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Unknown Source)

root cause

java.lang.ClassCastException: com.example.model.BeerExpert cannot be cast to javax.servlet.Servlet
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Unknown Source)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.28 logs.

O meu arquivo web.xml é o seguinte:


<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
	version="2.4">


`<servlet>
	`<servlet-name> Ch3 Beer </servlet-name>
	`<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>


<servlet-mapping>
	<servlet-name>Ch3 Beer</servlet-name>
	`<url-pattern>/SelectBeer.do</url-pattern>


</servlet-mapping>


`<servlet>
	`<servlet-name>Ch4 Beer </servlet-name>
	`<servlet-class>com.example.model.BeerExpert</servlet-class>
</servlet>


<servlet-mapping>
	<servlet-name>Ch4 Beer</servlet-name>
	`<url-pattern>/SelectBeer.do</url-pattern>


</servlet-mapping>

</web-app>

é um erro de classe certo?

Para que sua classe seja um Servlet ela deve extender de HttpServlet, ou implementar de outra forma a interface Servlet (coisa que a classe BeerExpert não faz). Se esse é um exemplo do livro, verifique se não há mais nenhuma classe adicional, ou coisa parecida.

Consegui fazer rodar.

Mas pra falar a verdade eu não sei ao certo pq está rodando…eu retirei o caminho pro servlet do BeerExpert e pronto…rodou.

Segue abaixo as modificações que fiz:

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
	version="2.4">


`<servlet>
	`<servlet-name> Ch3 Beer </servlet-name>
	`<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>


<servlet-mapping>
	<servlet-name>Ch3 Beer</servlet-name>
	`<url-pattern>/SelectBeer.do</url-pattern>


</servlet-mapping>



</web-app>

BeerSelect


package com.example.web;

import com.example.model.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class BeerSelect extends HttpServlet
{

	public void doPost(HttpServletRequest request,
			HttpServletResponse response)
	
	throws IOException, ServletException
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("Conselho sobre Escolha de Cerveja<br>");
		
		String c = request.getParameter("color");
               BeerExpert be = new BeerExpert();
               List result = be.getBrands(c);
               Iterator it = result.iterator();
               while (it.hasNext())
               {
                     out.print("<br>Tente: " + it.next());
               }
	}
}

e por ultimo o BeerExpert

package com.example.model;
import java.util.*;

public class BeerExpert
{

       public List getBrands(String color)
       {
              List brands = new ArrayList();
              if (color.equals("amber"))
              {
               brands.add("Jack Amber");
               brands.add("Red Moose");
              }
              else
              {
               brands.add("Jail Pale Ale");
               brands.add("Gout Stout");
              }
              return(brands);
       }
}

Segundo o livro eu deveria ter criado a classe Model do BeerExpert antes de criar o arquivo. (essa classe eles não iriam ensinar a criar)
Mas sem modificar nada e seguindo os proximos passos deu certo. alguem poderia me dizer onde foi que eu criei a classe para eu poder entender o que estou fazendo?
Estou apanhado bastante para conseguir entender esse livro de JSP do Use a Cabeça.

Att,