JSP e JavaScript

Olá galera!

Sou iniciante em desenvolvimento web com java e estou tento algumas dificuldades.
Eu gostaria de saber como faço para que uma jsp chame uma função qualquer em um arquivo javascript?? Eu tenho uma servlet que chamará essa jsp e por sua vez chamará essa função javascript.

Abraços.

Não tem segredo, da mesma forma que vc chama um javascript de uma págima html comum, no evento do campo.

exemplo:

Se vc quiser chamar uma função javascript em um button:

<INPUT TYPE=button ID=btnNovo VALUE="Clique aqui!" onClick="suafuncaojavascript()">  

Se for chamar uma função de uma biblioteca de javascript sua (arquivos js) , inclua a linha do head da sua página:

<SCRIPT LANGUAGE="JavaScript" SRC="recursos/projeto.js"></script> 

Ok? qualquer dúvida poste ai…

Valew,

No meu caso eu tenho um jsp que irá chamar essa função js após um click em um link!!
Quando eu clico no link eu redireciono para uma servlet que fecha um sessão e porterior deveria chamar esa função js!!

[quote=rodrigo.fai]Valew,

No meu caso eu tenho um jsp que irá chamar essa função js após um click em um link!!
Quando eu clico no link eu redireciono para uma servlet que fecha um sessão e porterior deveria chamar esa função js!!
[/quote]

Mas então vc esta querendo chamar o js através de um Servlet, não da página jsp?

Quando vc faz um link para um servlet vc esta direcionando todo o controle para esse Servlet.

Quando eu clico no link do jsp, ele chama a servlet que remove os atributos da sessão criada.
Eu poderia fazer isso na mesma jsp e posterior chamar essa função no js???

Obrigado.

Estranho o que você quer fazer, tipo se chamar o servlet primeiro o fizer o que você tem que fazer com a sessão acho que o único jeito de fazer o js executar é com o evento onload, mas com isso toda vez que você carregar essa página o js vai executar precisa ver o que esse js faz. Falow

Ah blz

Eu já resolvi meu poblema!!! Valew
Mas agora to tendo outro problema com sessão. Poderia me indicar um tutorial explicando detalhadamente com se trabalha com sessões???

Valew

Cara tutorial eu não sei não mas a sessão não tem muito segredo cara, qual é seu problema? Posta aí para que a gente tente ajudar! A só por curiosidade como você resolveu o seu o problema antigo do js? Abraços.

No problema anterior eu discartei o uso do arquivo js! Estava querendo enfeitar demais… rs

O meu problema com sessão é o seguinte:
Eu tenho uma página de login com os campos usuário e senha. Quando eu preencho os campos e mando enviar, a servlet Login é chamada através do action.

Código da servlet Login:

[color=blue]package servlet;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

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

import tsda.dao.DAO_Interface;
import tsda.dao.DAO_Connector;

public class Login extends HttpServlet
{
private DAO_Interface obj_dao = null;

public void init(ServletConfig config) throws ServletException
{
	super.init(config);
	obj_dao = DAO_Connector.conecta();
}

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
	try 
	{
		//salvando os dados do usuario vindos da pagina
		String nome = request.getParameter("tf_usuario");
		String senha = request.getParameter("tf_senha");
		
		ResultSet rs = obj_dao.getUsuario(nome, senha);
		
		if(rs.next())
		{
			//criando uma sessao p/ o usuário
			HttpSession sessao = request.getSession();
			//setando atributos da sessao do usuário
			sessao.setAttribute("Usuario",nome);
			sessao.setAttribute("Senha",senha);
			
			response.sendRedirect("/tsda/index.jsp");
		}
		else
		{
			response.sendRedirect("/tsda/invalido.jsp");
		}
	}
	catch (SQLException e) 
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	catch (IOException e) 
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void destroy()
{
	super.destroy();
	obj_dao.closeConn();
}

}[/color]

Se o usuário exitir, é exibida a página index.
Na página index eu verifiquei novamente se há uma sessão criada. É esta parte que eu acho que fiz errado!

Código da página index:

[color=blue]

<%
HttpSession sessao = request.getSession(true);
String usuario = (String) sessao.getAttribute(“Usuario”);
if(usuario == null)
{
response.sendRedirect(“login.jsp”);
}
else
{
%>

//página

<%
}
%>[/color]

Eu verifiquei se a sessão estava criada p/ que usuário se loge obrigatoriamente no sistema. Porque estava acontecendo de o usuário digitar o endereço tsda/index.jsp e exibir a página sem a necessidade de se logar!!
Mas está funcionando somente na primeira vez que o usuário entra na página. Quando o usuário clica no link Sair da página index e é redirecionado p/ o login novamente, se ele digitar o endereço tsda/index.jps, é exibida a página sem a necessidade de se logar!!!
Deu p/ endender??? :smiley:

Esqueci de t explicar uma coisa. Quando c clica no link Sair, é chamada a servlet FechaSessao que possui o seguinte código:

[color=blue]package servlet;

import java.io.IOException;

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

public class FechaSessao extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
	HttpSession sessao = request.getSession(true);
	
	sessao.removeAttribute("Usuario");
	sessao.removeAttribute("Senha");
			
	response.sendRedirect("/tsda");
}

public void destroy()
{
	super.destroy();
}

}[/color]

O que está acontecendo d errado???

Valew.

Faz um teste aí usa somente assim HttpSession sessao = request.getSession(); não coloca o true no getSession(). Posta o que deu! Falow

Eu ja tinha tentado assim e deu na mesma!!
A impressão que dá é que ta criando outra sessão na index.jsp!!
Q vc acha?

Flw.

Estranho hein cara, bom tenta usar o session.invalidate() no lugar dos removeAtributtes(). Falow

Eu já tinha tentado sessao.invalidade(), mas deu na mesma.
Está certo o uso de getSession() no código da página index.jsp??

Pow cara que bagulho estranho, parece que está criando outra session. Bom vamoa as tentativas na JSP tenta fazer um getSession(false) dessa maneira ele não tentará criar outra session, caso a session não exista ele volta nulo. Depois de dar o getSession(false) verifica se tá vindo nulo ou não.

Ta feio o negócio aq kra!! rs
Eu troquei aqui para getSession(false) e continuou a contecendo a mesma coisa.
Soh da certo mesmo na primeira vez que entro na página kra! Já não sei mais o que fazer.
Se tiver mais alguma solução poste fazendo o favor.
Flw.

Fala sic!!!
Sem mais alternativas kra???
Eu estive pedindo ajuda para uns kras q moram comigo, mas nem conseguiram me ajudar direito!!
Falow.

Ops, você já viu um JSP depois de compilado? Ele gera um .java lá no diretório C:\Tomcat50\work\Catalina\localhost<sua aplicação>\org\apache\jsp.

Abra esse .java e você vai verificar o seguinte:

public void _jspService(HttpServletRequest request, HttpServletResponse response)  throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			"erro.jsp", true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

.......
.......

Notou que tem uma variável session sendo criada a partir do pageContext?

Tente usar essa variável dentro do JSP pra controlar o seu login.

Eu usei da seguinte forma:

<%
session = pageContext.getSession();
String usuario = (String) session.getAttribute(“Usuario”);
if(usuario == null)
{
response.sendRedirect(“login.jsp”);
}
else
{
%>

Não sei c é o que vc me aconselhou, mas não resolveu!
É desta forma q deveria ser msm??

Se você fizer request.getSession().setAttribute(“conta”, “seila”) lá no servlet então você acessa lá no jsp da mesma forma:

if (request.getSession().getAttribute("conta") != null) { blá blá blá blá }

Acho que não tem segredo não. Se for a primeira vez você cria a conta na sessão lá dentro do servlet. Ao usar o logout (JSP) você usa request.getSession().removeAttribute(“conta”) também dentro do servlet e pronto.

Toda vez que abrir a página de login você verifica se existe a conta na sessão.

Coloquei da seguinte forma:

Servlet Login:

if(rs.next())
{
//criando uma sessao p/ o usuário
HttpSession sessao = request.getSession();
//setando atributos da sessao do usuário
sessao.setAttribute(“Usuario”,nome);
sessao.setAttribute(“Senha”,senha);

			response.sendRedirect("/tsda/index.jsp");
		}
		else
		{
			response.sendRedirect("/tsda/invalido.jsp");
		}

Pádina index:

<%
if(request.getSession().getAttribute(“Usuario”) == null)
{
response.sendRedirect(“login.jsp”);
}
else
{
%>

//página

<%
}
%>

Servlet Logout:

	HttpSession sessao = request.getSession();
	
	sessao.removeAttribute("Usuario");
	sessao.removeAttribute("Senha");
			
	response.sendRedirect("/tsda");

E continua dando a mesma coisa!