Sorvlet

25 respostas
R

Olá pessoal!

Estou tentando implementar um exemplo de sorvlet de uma das apostilas da Caelum, mais não estar dando certo.

Criei a classe:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OiMundo extends HttpServlet{
  protected void service(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
	  
	  PrintWriter out = response.getWriter();
	  
	  out.println("<html>");
	  out.println("<body>");
	  out.println("Primeira sorvlet");
	  out.println("</body>");
	  out.println("</html>");
	  
  }
}

E no arquivo web.xml coloquei o código:

<servlet>
  <servlet-name>primairaServlet</servlet-name>
  <servlet-class>OiMundo</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>primeiraServlet</servlet-name>
   <url-pattern>/oi</url-pattern>
</servlet-mapping>

Porém o Eclipse reclama desse código no arquivo .xml: The markup in the document following the root element must be well-formed.

O que há de errado?

Obrigado.

25 Respostas

isaiaspf

Sorvlet? Mistura de sorvete com servlet? Haha.

Cara, posta todo seu xml.

R

Desculpa, é servlet.

O código do xml é esse que já postei.

Obrigado.

Victor_Neves

cara, sorvlets sao servlets mais saborosas, menos complicadas de se mecher , elas tem um gosto mais saboroso …

andreiribas

rbcastro:
Desculpa, é servlet.

O código do xml é esse que já postei.

Obrigado.

Teu XML é só isso?

Faça assim:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <display-name>Primeiro Servlet</display-name>

<servlet>  
  <servlet-name>primairaServlet</servlet-name>  
  <servlet-class>OiMundo</servlet-class>  
</servlet>  
  
<servlet-mapping>  
   <servlet-name>primeiraServlet</servlet-name>  
   <url-pattern>/oi</url-pattern>  
</servlet-mapping>  

</web-app>
isaiaspf

Se isso que você postou é todo teu xml, então tá faltando coisa:

<?xml version="1.0" encoding="ISO-8859-1"?>

<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 http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
	version="2.5">
	
	<servlet>
		<servlet-name>primeiraServlet</servlet-name>
		<servlet-class>OiMundo</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>primeiraServlet</servlet-name>
		<url-pattern>/oi</url-pattern>
	</servlet-mapping>
	
</web-app>
Abraço.
A

Cara, o seu problema não é com java, nem com j2ee, é com XML:

Um XML bem formado tem que:

  1. ter todas as tags casando e em pinheirinho. Por exemplo, o xml abaixo não está bem formado.
<?xml version="1.0">
<comeco>
    <meio>
</comeco>

Por que? Porque conforme você abre as tags, você tem que ir fechando na ordem inversa. E não pode em nenhuma hipótese deixar uma tag sem fechar.
A correção no meu exemplo seria:

<?xml version="1.0">
<comeco>
    <meio>
    </meio>
</comeco>
  1. Todo XML tem que ter UMA, e somente UMA, tag raiz: Por exemplo, o XML abaixo está mal formado:
<?xml version="1.0">
<comeco>
   <meio>
   </meio>
</comeco>
<comeco2>
<fim>
</fim>
</comeco2>

Por que? Porque existem duas tags “raízes” no código: comeco e comeco2. Uma delas teria que estar dentro da outra.

Se o seu web.xml completo é o que você postou, seu xml está mal formado, porque tem duas raízes…

Nota: um XML bem formado é diferente de um XML válido. Para ser válido, tem que estar de acordo com o padrão esperado do arquivo… ou seja, as tags tem que aparecer em determinada ordem, e com determinado conteúdo.

R

Pessoal, já pedi desculpe pelo erro de digitação, se poderem ajudar agradeço, mais acho que os sarcasmos estão no lugar errado.

R

Bom dia rbcastro,

Posta o código todo do seu web.xml, tudo mesmo não só a parte da servlet !

:smiley:

R

Bom dia Rodrigo!

Conforme já mencionei, estou tentando implementar um exemplo, o qual cita somente isso:

<servlet>     
  <servlet-name>primairaServlet</servlet-name>     
  <servlet-class>OiMundo</servlet-class>     
</servlet>     
     
<servlet-mapping>     
   <servlet-name>primeiraServlet</servlet-name>     
   <url-pattern>/oi</url-pattern>     
</servlet-mapping>

Eu coloquei conforme o andreiribas indicou aí não ocorreu mais erro.

R

Porém quando eu coloco assim:

<?xml version="1.0" encoding="UTF-8"?>   
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">   
  
  <display-name>Primeiro Servlet</display-name>   
  
<servlet>     
  <servlet-name>primairaServlet</servlet-name>     
  <servlet-class>OiMundo</servlet-class>     
</servlet>     
     
<servlet-mapping>     
   <servlet-name>primeiraServlet</servlet-name>     
   <url-pattern>/oi</url-pattern>     
</servlet-mapping>     
  
</web-app>

O server Tomcat não starta: Server Tomcat v7.0 Server at localhost failed to start

A

Como você está tentando rodar o Tomcat? Pelo eclipse? Normalmente, não importa como você rode, seja no eclipse, seja na raça, existe em algum lugar aí um log de execução, indicando o erro exato que está acontecendo…

R

Pelo Eclipse.

andreiribas

posta o stacktrace.

R
29/07/2011 11:06:50 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_21\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jdk1.6.0_21/bin/../jre/bin/server;C:/Program Files/Java/jdk1.6.0_21/bin/../jre/bin;C:/Program Files/Java/jdk1.6.0_21/bin/../jre/lib/amd64;C:\oracle\ora92\bin;C:\Delphi\Bin;C:\Delphi\Projects\Bpl\;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM2.0\DLLShared\;C:\Program Files\Java\jdk1.6.0_21\bin;C:\PROGRA~2\Griaule\FINGER~1\bin;C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin;C:\Programas\EclipseJEE;
29/07/2011 11:06:50 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:agenda' did not find a matching property.
29/07/2011 11:06:51 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
29/07/2011 11:06:51 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
29/07/2011 11:06:51 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 713 ms
29/07/2011 11:06:51 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
29/07/2011 11:06:51 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.12
andreiribas

posta o track quando você acessa o servlet, porque aí parece tudo bem.

nem apareceu o erro que você falou anteriormente:

Server Tomcat v7.0 Server at localhost failed to start

R

Veja André, eu fiz da seguinte forma:

<?xml version="1.0"?>
<servlet> 

<servlet-name>servletOiMundo</servlet-name> 
<servlet-class>OiMundo</servlet-class> 

<servlet-mapping> 
<servlet-name>servletOiMundo</servlet-name> 
<url-pattern>/oi</url-pattern> 

</servlet-mapping> 
</servlet>

O Eclipse não reclamou porém quando eu entro no navegador e digito o caminho (http://localhost:8080/agenda/oi), veja o que aparece:
HTTP Status 404 - /agenda/oi


type Status report

message /agenda/oi

description The requested resource (/agenda/oi) is not available.


Apache Tomcat/7.0.12

andreiribas

posta o código do teu servlet

R
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OiMundo extends HttpServlet{
	protected void service(HttpServletRequest request, HttpServletResponse response)
		      throws ServletException, IOException {
  	  PrintWriter out = response.getWriter();		
		
	  PrintWriter out = response.getWriter();
	  
	  out.println("<html>");
	  out.println("<body>");
	  out.println("Primeira sorvlet");
	  out.println("</body>");
	  out.println("</html>");
	  */
	}
}
R

Desculpe, é esse o código:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OiMundo extends HttpServlet{
	protected void service(HttpServletRequest request, HttpServletResponse response)
		      throws ServletException, IOException {
  	  PrintWriter out = response.getWriter();		
	  
	  out.println("<html>");
	  out.println("<body>");
	  out.println("Primeira sorvlet");
	  out.println("</body>");
	  out.println("</html>");
	 
	}
}
andreiribas

Bom, testei teu código e realmente não tava dando certo.

Mudei um pouco e agora está funcionando aqui:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>agenda</display-name>

	<servlet>
		<servlet-name>Oi</servlet-name>
		<servlet-class>OiMundo</servlet-class>
	</servlet>


	<servlet-mapping>
		<servlet-name>Oi</servlet-name>
		<url-pattern>/oi</url-pattern>
	</servlet-mapping>

</web-app>

Servlet OiMundo.class:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OiMundo extends HttpServlet {

	private static final long serialVersionUID = 5594330465046634984L;

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		PrintWriter out = response.getWriter();

		out.println("<html>");
		out.println("<body>");
		out.println("Primeira servlet");
		out.println("</body>");
		out.println("</html>");

	}

}
R

Aqui também funcionou.

Andrei, o que estava errado?

Obrigado.

andreiribas

Acredito que seja seu web.xml.

Estava mapeado errado:

Você não fechava a tag para então começar a tag :

servletOiMundo OiMundo servletOiMundo /oi

Deveria ser assim:

<servlet>  
        <servlet-name>Oi</servlet-name>  
        <servlet-class>OiMundo</servlet-class>  
    </servlet>  
  
  
    <servlet-mapping>  
        <servlet-name>Oi</servlet-name>  
        <url-pattern>/oi</url-pattern>  
    </servlet-mapping>
R

Eu fiz da forma como estava na apostila da Caelum, o exemplo da apostila consta somente isso:

<servlet>     
        <servlet-name>Oi</servlet-name>     
        <servlet-class>OiMundo</servlet-class>     
    </servlet>     
     
     
    <servlet-mapping>     
        <servlet-name>Oi</servlet-name>     
        <url-pattern>/oi</url-pattern>     
    </servlet-mapping>

Desculpa a ignorância, é que estou começando mexer com web e não entendi esse monte de código do .xml:

<?xml version="1.0" encoding="UTF-8"?>   
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   
    id="WebApp_ID" version="2.5">

Isso é obrigatório?

Obrigado.

isaiaspf
Sim, é obrigatório.
<?xml version="1.0" encoding="ISO-8859-1"?>  
      
    <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 http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"  
        version="2.5">  
          
        <servlet>  
            <servlet-name>oi</servlet-name>  
            <servlet-class>OiMundo</servlet-class>  
        </servlet>  
          
        <servlet-mapping>  
            <servlet-name>oi</servlet-name>  
            <url-pattern>/oi</url-pattern>  
        </servlet-mapping>  
          
    </web-app>
R

Obrigado pessoal, pela ajuda e pela paciência.

Criado 29 de julho de 2011
Ultima resposta 29 de jul. de 2011
Respostas 25
Participantes 6