Saudações, estou com problemas para compilar um servlet, segue informações que podem ser úteis:
- Dentro de C:TomcatwebappschatWEB-INFclasses tenho duas packages: chat e servlet
- Dentro de chat tenho duas classes: Usuario e UsuarioChat
- O código de Usuario é:
package chat;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract interface Usuario {
/* Pega o nome do usuário */
public String getNome();
/* Verifica se o usuário está conectado */
public boolean estaConectado();
/* Verifica se o usuário está ativo */
public void checaSessao();
/* Desconecta o usuário */
public void desconecta();
/* Pega resposta */
public HttpServletResponse getResposta();
/* Seta resposta */
public void setResposta(HttpServletResponse resposta);
/* Pega a sessão */
public HttpServletRequest getSessao();
/* Seta a sessão */
public void setSessao(HttpServletRequest sessao);
/* Pilha de Mensagens
* Adiciona mensagem na pilha */
public void adicionaMsg(Mensagem msg);
// Espera uma nova mensagem e pega mensagem da pilha
public Mensagem getNovaMensagem();
// Mostra a mensagem na tela
public void mostraMensagem(Mensagem msg) throws IOException;
public void addLog(String log);
/**
* @param string
* @param string2
*/
public void addLog(String string, String string2);
}
e UsuarioChat:
package chat;
import java.io.IOException;
import java.util.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract class UsuarioChat extends HttpServlet implements Usuario, Sala{
String nome = null;
private HttpServletResponse resp = null;
private HttpServletRequest req = null;
private boolean conectado = true;
/* Lista de Mensagens */
private ArrayList mensagens = new ArrayList();
/* Lista de Usuários*/
private Hashtable listaUsuarios = new Hashtable();
private ArrayList logs = new ArrayList();
public UsuarioChat(String nome){
this.nome = nome;
if (getPorNome(getNome())!= null){
throw new IllegalArgumentException("Usuário Inválido");
// 'getPorNome' retorna o usuário pelo nome
}else{
addUsuario(this);
// Adiciona o usuário a lista de logados
}
}
public String getNome(){
return nome;
}
public HttpServletResponse getResposta(){
return resp;
}
public void setResposta (HttpServletResponse res){
this.resp = res;
}
public HttpServletRequest getSessao(){
return req;
}
public void setSessao(HttpServletRequest requ){
this.req = requ;
}
/* Verifica se o usuário ainda está conectado */
public boolean estaConectado(){
return conectado;
}
/* Desconecta o usuario e já altera o status */
public void desconectar(){
conectado = false;
}
/* Verifica se a sessão está ativa e se
* o usuário ainda se encontra nela */
public void checaSessao(){
try {
if (getSessao().getSession() == null ||
getSessao().getSession().getAttribute("usuario")== null){
this.desconectar();
}
}catch(IllegalStateException isex){
this.desconectar();
}
}
/* Métodos que lidam com as mensagens
* Método que adiciona mensagem e avisa a todos */
public void adicionaMsg(Mensagem msg){
mensagens.add(msg);
synchronized (mensagens){
// Sinaliza para quem está esperando
mensagens.notifyAll();
}
}
/* Verifica se já existe uma mensagem, se já existir,
* devolve ela mesma. */
public synchronized Mensagem getNovaMensagem(){
if (mensagens.isEmpty()){
try{
synchronized (mensagens){
/* Tempo que espera para ver se o usuario
* ainda está na sala*/
mensagens.wait(5 * 1000); // 5 segundos
}
}catch(InterruptedException e){
/* Caso usuário não esteja na sala,
* ele deve ser desconectado*/
// Desconecta
this.desconectar();
return(null);
}
// Caso o tempo acabou
if (mensagens.isEmpty()){
return (null);
}
}
return (Mensagem) (mensagens.remove(0));
}
// Adiciona um usuário a lista
public void addUsuario(Usuario usuario){
synchronized (listaUsuarios){
listaUsuarios.put(usuario.getNome(),usuario);
}
}
// Remover usuário da lista
public void remUsuario(Usuario usuario) throws IOException{
// Verifica se o usuário ainda está na sala
synchronized(listaUsuarios){
// Se não está
if(!listaUsuarios.containsValue(usuario)){
return;
}
// Remove
listaUsuarios.remove(usuario.getNome());
// Desconecta
usuario.desconecta();
// Notifica a saída
Mensagem msg = new UsaMensagem(usuario,
" saíu da sala" +
"<script>removeUsuario('" +
usuario.getNome() +
"');</script>");
enviaMensagem(msg);
synchronized (usuario){
usuario.notifyAll();
}
}
}
// Retorna usuário pelo nome
public Usuario getPorNome(String nome){
return (Usuario) listaUsuarios.get(nome);
}
// Retorna lista com todos os usuários da sala
public Hashtable getUsuarios(){
synchronized (listaUsuarios){
return (new Hashtable(listaUsuarios));
}
}
/* Envio das mensagens
* Pode ser de duas maneiras */
public void enviaMensagem(Mensagem msg) throws IOException{
// I) Para um destinatário especifico
if (msg != null && msg.getPara() != null) {
msg.getPara().adicionaMsg(msg);
msg.getDe().adicionaMsg(msg);
return;
}
// II) Para todos da sala
Hashtable todos = getUsuarios();
Iterator i = todos.keySet().iterator();
while (i.hasNext()){
String nomeUsuario = (String) i.next();
Usuario usuario = ((Usuario) todos.get(nomeUsuario));
try{
usuario.adicionaMsg(msg);
}
catch(Exception e){
e.printStackTrace();
remUsuario(usuario);
}
}
}
UsuarioChat enviaMensagem;
public void desconecta() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see chat.Usuario#mostraMensagem(chat.Mensagem)
*/
public void mostraMensagem(Mensagem msg) throws IOException {
// TODO Auto-generated method stub
}
/** adiciona um texto no log do usuario */
public void addLog(String log) {
if (logs.size() == 100) {
logs.remove(0);
}
logs.add(log + "
");
}
}
Todos compilando corretamente.
4) Dentro da package servlet tenho uma Servlet chamada Login com o código:
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Login extends HttpServlet {
// Tempo de sessão: 10 minutos
final private static int tempoDeSessao = 10 * 60;
protected void doGet(
final HttpServletRequest req,
final HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html");
res.getWriter().println("<html><header><meta HTTP-EQUIV="Pragma" " +
"CONTENT="no-cache"></header><body>");
res.getWriter().println("Login para o chat: " +
"<form action="" +
this.getClass().getName() +
"" method=post><input name=login><input type=submit" +
" value=Login></form></html>");
}
/* O método POST checa a viabilidade de criar um usuário
* e o cria */
protected void doPost(final HttpServletRequest req,
final HttpServletResponse res)
throws ServletException, IOException{
// Seta o tipo de conteúdo
res.setContentType("text/html");
// Se já existe uma sessão, invalida ela
if (req.getSession() != null
&& req.getSession().getAttribute("user") != null) {
req.getSession().invalidate();
}
try{
// Cria um usuário
Usuario usuario = new UsuarioChat(req.getParameter("login"));
req.getSession().setAttribute("user", usuario);
// Tempo Limite
req.getSession().setMaxInactiveInterval(tempoDeSessao);
}catch(IllegalArgumentException iaex){
// se já existe um usuário, mostra pagina de login novamente
res.getWriter().println("<html><header><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"></header><body>");
res.getWriter().println(
""
+ "
Ja existe um usuario com esse login:<br>"
+ "
<form action="
+ this.getClass().getName()
+ " method=post>"
+ "
<input name=login>"
+ "
<input type=submit value=Login>"
+ "
</form>"
+ "
</html>");
return;
}
// Mostra os dois frames
res.getWriter().print(
"<html>
"
+ " <frameset rows=*,100>
"
+ " <frame name="text" src=""
+ this.getClass().getPackage().getName()
+ ".Sala">
"
+ " <frame name="form" src=""
+ this.getClass().getPackage().getName()
+ ".Form">
"
+ " </frameset>
"
+ "</html>");
return;
} }
- Tento compilar Login usando:
C:j2sdk1.4.1_01injavac.exe -classpath C:Tomcatcommonlibservlet-api.jar
Mas retorna os erros:
C:TomcatwebappschatWEB-INFclassesservletLogin.java:42: cannot resolve symbol
symbol : class Usuario
location: class servlet.Login
Usuario usuario = new UsuarioChat(req.getParameter(“login”));
^
C:TomcatwebappschatWEB-INFclassesservletLogin.java:42: cannot resolve symbol
symbol : class UsuarioChat
location: class servlet.Login
Usuario usuario = new UsuarioChat(req.getParameter(“login”));
^
Alguém sabe qual o problema? Se precisar de mais informações, me comunique!
Obrigado!