Recuperar uma instancia de um Servlet

senhores, não sabia se colocava isso aqui, ou na parte de web, mas vamos lá…

Estou danod manutenção em um sistema, web porém sem o padrão MVC (ic!). Em determinado momento eu preciso utilizar um método de outro Servlet, porém a chamada desse método é feita via reflection…

Method metodo = OutroServlet.class.getDeclaredMethod(nomeMetodo, tipoParametros);
retorno = metodo.invoke(new OutroServlet(), parametros); //Aqui é que esta o problema

no método invoke(), eu tenho que passar um Object, que seria a instancia da classe que contem os métodos, e um Object[] com os parametros…o lance é que no Servlet “pai” é populado um objeto que quarda os dados do meu formulário…isso é feito quando o próprio tomcat instancia o Servlet…o meu problema, é que, ao fazer um new OutroServlet() eu perco isso, aih quando chama o método, danou-se tudo…

eu precisaria de alguma forma, ter uma instancia do Servlet, como se fosse uma requisição web mesmo, tipo, eu precisaria forçar com q o tomcat mesmo criasse a instancia do servlet, e eu pudesse recupera-la…a não ser q, o tomcat inicialize todos os servlets quando ele “sobe”, aih eu soh precisaria recuperar a instancia, mas acho q não funciona assim…

espero q alguem entenda a minha dúvida, e se puder ajudar…

Valeu!

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/OutroServlet"); dispatcher.forward(request, response);

Jair…não entendi muito bem a solução…esse exemplo q vc postou aih eu estou simulando o request no OutroServlet, certo? mas como eu recupero a instancia dele?

eu pesquisei, e acho q o lance seria configurar o meu OutroServlet no load-on-startup mas o propblema ainda esta sendo para recuperar a instancia do Servlet, onde quer q ela esteja, heheheh…

vlw

Você não tem que recuperar instância nenhuma do “OutroServlet”, quem é responsável por instanciar e executar os métodos dos servlets é o container.

A idéia nesse caso é só transferir a chamada para o “OutroServlet”, não é isso que você quer?

na verdade não eh bem isso…

o lance eh q eu tenho uma serie de Servlet com métodos com a mesma assinatura (nome e argumentos)…o usuário escolhe uma determinada opção q define qual dos servlets sera usado, e a sequencia de métodos eh a mesma em todos os casos…isso tudo ocorre no meu Servlet…por causa de varias particularidades da “arquitetura” q tem aqui, eu acabei optando por usar Reflection…ta ssim:

eu tenho um método principal no meu Servlet, chamado pelo doGet() ou doPost, nesse método eu determino a sequencia de ações q vão ser tomadas…como a sequencia é a mesma sempre, só que em Servlet difertentes, eu chamo um método q faz um proxy para cada um dos diferentes Servlets, e a chamada é feita com o codigo q eu postei no primeiro post…

o lance eh, como vc mesmo disse:

pois então, o q eu precisava na verdade era recuperar essa instancia, “levantada” pelo container, para mandar junto no método invoke() da classe Method

sera q isso eh possivel?

vlw

Isso tá me cheirando a POG, não? :roll:

E até onde eu sei não existe nenhum lugar de onde você possa pegar uma instancia do Servlet, existia um metodo chamado getServlet() na interface ServletContext, mas que foi “removido”, ele está presente na API mas sempre retorna null, veja:

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletContext.html

POG TOTAL!!! se vc tivesse a oportunidade de ver o esquema aqui, hahahaha…

eh sinistro ter q fazer uma serie de adaptações pra tentar fazer as coisas funcionarem…

se eu tivesse uma camada de negocio aqui seria incrivel…porem…

de qq forma agradeço bastante!

vlw