Saudações.
Desenvolvi 3 classes servlets para usar como chat num exemplo que peguei no Guj. As classes são://package classes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.*;
//import classes.*;
public class Formulario extends HttpServlet {
// Método Get
protected void doGet(
final HttpServletRequest req,
final HttpServletResponse res)
throws ServletException{
try{
// seta o Tipo de Conteúdo
res.setContentType("text/html");
res.getWriter().println("<html><header><meta HTTP-EQUIV="Pragma" CONTENT="no-cache">"
+ "</header><body>");
// Pega a lista de Usuários
String codigoPara = "<option selected value="">Todos</option>";
Iterator i = new HashMap(UsuarioChat.getUsuarios()).keySet().iterator();
while (i.hasNext()){
String value = (String) i.next();
codigoPara += "<option value=""
+ value
+ "">"
+ value
+ "</option>";
}
// mostra o formulário
res.getWriter().print(
"<html> <form name=chat action=""
+ this.getClass().getName()
+ "" method=post>
"
+ "<input type=hidden name=show value=form>
"
+ "
<input name=message> para <select name=para>"
+ codigoPara
+ "</select>"
+ "
<input type=submit value="Enviar">
"
+ "
<input type=hidden name=sair value="">"
+ "<input onClick="chat.sair.value='1';chat.submit();" type=button value=Sair>
"
+ "</form>
"
+ "<script>document.getElementById('message').focus();</script>"
+ "</html>"
);
}catch(Exception ex){
Sala.saveLog("Execption Ocorreu! ", ex);
throw new ServletException("Servlet Exception", ex);
}
}
/**
* Sends a message
* @see javax.servlet.http.HttpServlet#doPut(HttpServletRequest, HttpServletResponse)
*/
protected void doPost(
final HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
// a sessao
HttpSession session = req.getSession(false);
if (session == null) {
res.getWriter().println("Sua sessao expirou!");
// manda uma msg nula pra verificar quem saiu
UsuarioChat.enviaMensagem(null);
return;
}
// o usuario
final Usuario user = (Usuario) req.getSession(false).getAttribute("user");
try {
// se existir algum texto
if (req.getParameter("message") != null) {
// se mensagem nao for vazia
if (!req.getParameter("message").trim().equals("")) {
// cria a mensagem
Mensagem msg =
new UsaMensagem(
user,
UsuarioChat.getPorNome(req.getParameter("para")),
req.getParameter("message"));
// envia a mensagem
UsuarioChat.enviaMensagem(msg);
}
// mostra o formulario novamente
doGet(req, res);
}
// se for para sair
if (req.getParameter("sair").equals("1")) {
user.desconecta();
res.getWriter().println(
"<script>top.document.location.href='http://www.guj.com.br';</script>");
return;
}
} catch (Exception ex) {
Sala.saveLog("Usuario " + user.getNome() + " deu pau", ex);
}
}
}
//package classes;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import classes.*;
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>" +
"<title> Ead ChAt - Ensino á Distância Unerj </title><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(
""
+ "
<b>Desculpe!</b> Já existe um usuario com esse nome:<br>"
+ "Por favor, insira um nome diferente!<br>"
+ "
<form action="
+ this.getClass().getName()
+ " method=post>"
+ "
<input name=login>"
+ "
<input type=submit value=Entrar>"
+ "
</form>"
+ "
</html>");
return;
}
res.getWriter().print(
"<html><frameset rows=*,100><frame name="text""
+ "src="" + this.getClass().getName()
+ ".sla">
<frame name="form" src="" + this.getClass().getName()
+ ".for">"
+ "</frameset></html>");
return;
}
}
//package classes;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;
//import classes.*;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Sala extends HttpServlet {
/** static class UsuarioChat{
public static void enviaMensagem(UsaMensagem mensagem) {
}
public static void remUsuario(Usuario usuario) {
}
} */
/** Mensagem de Boas Vindas */
final private static String bemVindo =
"<table widht=100%><tr><td><font size= +1 color=red>Bem Vindo ao Chat EaD </font> <br><br>
"
+ "<li> Envie seus comentários para <a href='mailto:[email removido]' target=novo> o Ead </a><br>
"
+ "</td></tr></table><br><br><br>";
Usuario usuario;
Sala sessao;
/** Tempo de sessão = 10 minutos */
final private static int tempoSessao = 10 * 60;
/** Método get */
public final void doGet(
final HttpServletRequest req,
final HttpServletResponse res)
throws ServletException, IOException{
try{
// Seta o tipo de conteúdo
res.setContentType("text/html");
res.getWriter().println("<html><header><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"></header><body>");
// Envia o cabeçalho Html
res.getWriter().print(bemVindo);
// A sessão
HttpSession sessao = req.getSession(false);
if (sessao == null){
res.getWriter().println("Sua sessão expirou");
Sala.saveLog(
"Sessão Expirada",
new SocketException("Sessão expirou durante envio de mensagem"));
return;
}
// O Usuário
final Usuario usuario = (Usuario) sessao.getAttribute("user");
if (usuario == null){
res.getWriter().println("Não foi possivel fazer identificação");
Sala.saveLog(
"Não foi possivel achar o usuário", new SocketException("Cadê ele?"));
return;
}
usuario.setResposta(res);
usuario.setSessao(req);
// Script de auto scrolling, auto removing de usuário e auto add
res.getWriter().println(
"<script>
"
+ "function scl()
"
+ "{
"
+ " document.writeln("<S"+"CRIPT>window.scrollBy(0,100000)</S"+"CRIPT>");
"
+ "}
"
+ "function remUsuario(my_value)
"
+ "{
"
+ " var my_index=-1;
"
+ " for (var m=0; m<top.frames[1].document.forms[0].para.options.length; m++) {
"
+ " if (top.frames[1].document.forms[0].para.options[m].value==my_value) {
"
+ " my_index=m;
"
+ " }
"
+ " }
"
+ " if(my_index!=-1) { top.frames[1].document.forms[0].para.options.remove(my_index); }
"
+ "}
"
+ "function addUser(my_value)
"
+ "{
"
+ " var oOption = document.createElement("OPTION");
"
+ " oOption.text=my_value;
"
+ " oOption.value=my_value;
"
+ " top.frames[1].document.forms[0].para.options.add(oOption);
"
+ "}
"
+ "document.write("
+ "Este é um JavaScript!"
+")"
+ "</script>
"
);
// Emite o flush
res.getWriter().flush();
res.flushBuffer();
// Envia mensagem de entrada
UsuarioChat.enviaMensagem(
new UsaMensagem(usuario, " entrou na sala"
+ new SimpleDateFormat("hh:mm").format(new Date())
+ "<script>addUser('"
+ usuario.getNome()
+ "');</script>")
);
// Roda eternamente até houver uma exceção
while (usuario.estaConectado()){
try{
// Espera pela próxima mensagem
Mensagem msg = usuario.getNovaMensagem();
// Checa a sessão
usuario.checaSessao();
// Se for uma mensagem mostra ela senão ...
if (msg != null){
//usuario.addLog(msg.getCodHtml());
usuario.mostraMensagem(msg);
}
// ... verifica a conexão
else{
usuario.mostraMensagem(null);
}
}catch(SocketException e){
//usuario.addLog("socketexception:
" + exceptionToString(e));
usuario.desconecta();
}
}
}catch(Exception e){
UsuarioChat.enviaMensagem(
new UsaMensagem(usuario, exceptionToString(e)));
// usuario.addLog("deu exception, desconectar: ", e.toString());
usuario.desconecta();
}
// Tira o usuário da lista e ...
//usuario.addLog("usuário saíu da sala");
UsuarioChat.remUsuario(usuario);
// ... inválida a sessão
try{
// sessao.in
}catch(IllegalStateException ex){
Sala.saveLog("Exception Ocorreu!", ex);
throw new ServletException("ServletException", ex);
}
}
// Salva a informação
static public void saveLog(String msg, Throwable ex) {
}
private static String exceptionToString(Throwable e) {
// se der uma exception
StringWriter writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
return (writer.getBuffer().toString());
}
}
Executando no Tomcat consigo fazer o login normalmente usando a classe Login, abre os 2 frames com Sala e Formulario, mas quando digito a mensagem e mando enviar não aparece nada em Sala.
Como poderia resolver isso?
Obrigado pela atenção!