Retornar para página que enviou a requisição ao servlet

3 respostas
O

Olá pessoas, estou com uma dúvida que procurei e não achei uma solução.

A situação é a seguinte, estou fazendo um sisteminha web (trabalho de aula) e nesse sistema criei um cabeçalho em um arquivo separado que será inserido em todas as páginas. Nesse cabeçalho tenho tenho dois links que enviam um parâmetro para um servlet para colocar na sessão o idioma que o usuário solicitou. O código é esse:

<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:setLocale value="${sessionScope.language}"/>
<fmt:setBundle basename="br.senai.sc.progweb.restaurante.properties.mensagens"/>

//aqui está o link para o servlet
<div id="idioma" align="right">
    <a href="definir-idioma?idioma=pt"><img border="0" alt="<fmt:message key="choose_language_pt"/>" src="images/bandeira_do_brasil.png"></a> &nbsp;
    <a href="definir-idioma?idioma=en"><img border="0" alt="<fmt:message key="choose_language_en"/>" src="images/bandeira_inglaterra.png"></a>
</div>

<div id="menu" align="left">
    <a href="index.jsp"><img border="0" alt="<fmt:message key="home_page"/>" src="images/logo.png" onclick=""></a>
</div>

O que gostaria de fazer é, quando chegar no servlet, colocar na sessão o idioma escolhido e retornar a página que enviou a solicitação. Como o usuário poderá clicar nesse link em qualquer página do site, gostaria de no servlet recuperar qual foi a url que o usuário estava antes para poder redirecionar o usuário para ela. No servlet o código até o momento está assim:

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;

/**
 * Servlet implementation class DefineIdioma
 */
public class DefineIdioma extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //recupera do link o idioma escolhido
        String idioma = req.getParameter("idioma");
        //coloca na sessao o idioma escolhido pelo usuario
        req.getSession().setAttribute("language", idioma);
 
       //retorna para a pagina que enviou a requisicao AQUI GOSTARIA DE ENVIAR A PÁGINA ANTERIOR      
 
        //resp.sendRedirect();
    }

}

Procurei mas não consegui encontrar um comando para recuperar o endereço anterior para colocar como parâmetro no "resp.sendRedirect()". Alguém poderia dar uma luz?

Valeu

3 Respostas

D

Fiz um trabalho só com servlets um dia desses, eu usei um atributo na sessão para definir sempre qual era a página anterior. Não sei se isso é muita gambiarra, mas resolveu meu problema :S

M

Bom dia tente usuar :
resp.sendRedirect(‘nome da página que você quer charmar’); ou

onClick="javascript:history.back(); num botão por exemplo.

Abs,

marchio

O
diogozero:
Fiz um trabalho só com servlets um dia desses, eu usei um atributo na sessão para definir sempre qual era a página anterior. Não sei se isso é muita gambiarra, mas resolveu meu problema :S

Opa!

Consegui resolver meu problema fazendo algo parecido com isso.

Escrevi um javascript no cabeçalho onde quando a pessoa clica no link (esses links coloquei dentro de um form que possuí um campo hidden) o nome da página desse link vai para esse campo hidden e dou um submit. No servlet pego esse campo hidden e uso para voltar a página anterior. Contudo, como no header sempre irão aparecer duas bandeiras para a pessoa mudar o idioma a hora que quiser, coloquei um atributo na sessão (isso no servlet) com a página e usando EL recuperei esse atributo para colocar no link das bandeiras.

Sim, gambiarra, mas foi o que consegui fazer he he he. O código ficou assim:

Cabeçalho:
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:setLocale value="${sessionScope.language}"/>
<fmt:setBundle basename="br.senai.sc.progweb.restaurante.properties.mensagens"/>

<div id="idioma" align="right">
    <a href="definir-idioma?idioma=pt&pagina=${param.campoHidden}"><img border="0" alt="<fmt:message key="choose_language_pt"/>" src="images/bandeira_do_brasil.png"></a> &nbsp;
    <a href="definir-idioma?idioma=en&pagina=${param.campoHidden}"><img border="0" alt="<fmt:message key="choose_language_en"/>" src="images/bandeira_inglaterra.png"></a>
</div>

<div id="menu" align="left">
    <form name="menuRestaurante" action="" method="post">
        <a href="#"><img border="0" alt="<fmt:message key="home_page"/>" src="images/logo.png" onclick="definePagina('_index')"></a>
        <input type="hidden" id="campoHidden" name="campoHidden" value="_index">
    </form>
</div>

<script>
function definePagina(pagina){
/**
 * A funcao recebe como parametro o nome da pagina que o cliente deseja acessar
 * coloca o nome dessa pagina no campo hidden chamado "pagina" e define como acao
 * do formulario essa mesma pagina. Apos isso da um submit no formulario
 */
    document.getElementById("campoHidden").value = pagina;
    document.getElementsByName("menuRestaurante")[0].action = pagina + ".jsp";
    document.menuRestaurante.submit();
}
</script>
O servlet ficou assim:
package br.senai.sc.progweb.restaurante.Servlet;

import java.io.IOException;

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

/**
 * Servlet implementation class DefineIdioma
 */
public class DefineIdioma extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // recupera do link o idioma escolhido
        String idioma = req.getParameter("idioma");
        // coloca na sessao o idioma escolhido pelo usuario
        req.getSession().setAttribute("language", idioma);
        // verifica se veio uma pagina como parametro
        if (req.getParameter("pagina") != "") {
            // coloca na sessao o nome da pagina que enviou a solicitacao
            req.getSession().setAttribute("campoHidden",
                    req.getParameter("pagina"));
            // recupera da url qual foi a pagina que enviou a solicitacao e
            // retorna para ela
            resp.sendRedirect(req.getParameter("pagina") + ".jsp");
        } else{
            //se nao veio envia para a pagina inicial
            req.getSession().setAttribute("campoHidden",
                    "_index.jsp");
            resp.sendRedirect("_index.jsp");
        }
    }
}

Foi isso.

Criado 21 de outubro de 2010
Ultima resposta 23 de out. de 2010
Respostas 3
Participantes 3