Chamar só doPost

4 respostas
G

Por que esse código do jsp chama tanto o doGet quanto o doPost do meu Servlet?
Obrigado.

<FORM NAME="form1" method="POST" action="/tcc/config" onSubmit="return copyPath();">
   <INPUT type="hidden" name="hidden" id="hidden">
   <TABLE ALIGN="center" BORDER=1 CELLSPACING=1 CELLPADDING=1 WIDTH="auto">
    <TR ALIGN="center" VALIGN="middle">
     <TH colspan="3">Escolha o arquivo e clique em Confirmar</TH>
    </TR>
    <TR ALIGN="left" VALIGN="middle">
     <TD> Arquivo de configuração:  </TD>
     <TD> <INPUT type="file" name="filename" id="filename" size="50"> </TD>
     <TD> <INPUT type="submit" value="Confirmar"></TD>
    </TR>
   </TABLE>
  </FORM>

Também tem um javascript antes que apenas copia o path do file para o campo hidden:

function copyPath() {
    document.getElementById("hidden").value = document.getElementById("filename").value;
    return true;
   }

4 Respostas

J

Provavelmente seu Servlet está delegando a chamada para um metodo só! Dê uma olhada aí!

G

Bem, o servlet está abaixo (performTask é um método que apenas conecta com o BD):
Coloquei um sysout em cada método e na saída aparece doGet e doPost

public class Config_Servlet extends HttpServlet{
	private static final long serialVersionUID = 1L;	
	protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		System.out.println("doGet");
		performTask(arg0, arg1);
	}
	protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		System.out.println("doPost");
		performTask(arg0, arg1);
	}
	protected void performTask(HttpServletRequest req, HttpServletResponse res){
		try{
			String filename = req.getParameter("filename");
			if(filename != null){
				// TODO: Carregar o arquivo especificado em filename
			}
			// TODO: Carregar o histórico do BD
			try{ // Load the DB2 JDBC Type 2 Driver with DriverManager
				Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
				String url = "jdbc:db2:TCC2";
				String user = "tcc";
				String password = "tcc";
				Connection con = DriverManager.getConnection(url,user,password);
			}catch(ClassNotFoundException e){
				System.out.println("Not found");
				e.printStackTrace();
			}catch(Exception e){
				System.out.println("Outra Exception");
				e.printStackTrace();
			}
			req.setAttribute("historico", new HistoricoBean());
			getServletContext().getRequestDispatcher("/config.jsp").forward(req, res);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
F
private void doGet(/* Argumentos*/){
   doPost(/*Argumentos*/);
}

private void doPost(/*Argumentos*/){
   System.out.println(" :-) ");
}

Se resolver… :slight_smile:

Abraços.

G

Agora ele ri de mim duas vezes: quando chama o doPost e depois quando chama o doGet.
Eu percebi que se eu usar o response.sendRedirect(“page”), o servlet é executado apenas uma vez. Mas aí eu tenho que setar os atributos no contexto ou na sessão, pq perco o request. O problema é que eu tenho que me preocupar em tirar esses atributos de lá depois.
Outra “vantagem” que o forward tem é que o endereço mostrado é o do servlet, já o redirect mostra o endereço atual.
Se alguém tiver uma luz serei muito grato.
Abraços.

Criado 2 de agosto de 2006
Ultima resposta 15 de ago. de 2006
Respostas 4
Participantes 3