Problemas no response!

6 respostas
J

Galera me ajudem por favor,
estou tentando enviar uma string para que minha classe java do outro lado possa pegar usando o
urlCon.getInputStream() até aí tudo bem…

mas logo na minha JSP assim que envio dessa forma:
response.getOutputStream().write(request.getParameter(“mensagem”).getBytes());

ele me  essa EXCEPTION:

java.lang.IllegalStateException: getOutputStream() has already been called for this response

at org.apache.catalina.connector.Response.getWriter(Response.java:606)

at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:195)

at uk.ltd.getahead.dwr.impl.DefaultExecProcessor.handle(DefaultExecProcessor.java:157)

at uk.ltd.getahead.dwr.impl.DefaultProcessor.handle(DefaultProcessor.java:83)

at uk.ltd.getahead.dwr.AbstractDWRServlet.doPost(AbstractDWRServlet.java:162)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

at java.lang.Thread.run(Thread.java:619)

estranho pois não estou usando nenhuma response.getWriter() ou response.getInputStream() antes de enviar a tal mensagem.
sendo assim pq ele diz que já foi chamado ? se eu nem usei ? bom sei lá

Mas por favor alguém pode me ajudar, já estou a dias tentando solucionar isso.
outra forma que eu possa evitar ou precaver disso !
qualquer coisa será bem vinda !

:slight_smile:

6 Respostas

J

Tente assim:

out.write(request.getParameter("mensagem"));
J

Jair valeu pela dica cara ela funcionou, mas printando na Tela JSP . e o que eu queria é que o request.getParameter(“mensagem”) fosse recebido em outra classe ( uma aplicacao Desktop )

eu estou rodando uma aplicação( desktop) na espera de algum dado: e estou esperando com esse código:

BufferedReader entrada = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String recebiDaJSP = entrada.readLine();

então lá do JSP eu envio a mensagem com a esperança de que meu AppDesktop irá receber.

vc tem outra solução ?

J

Mas a aplicação desktop vai ler exatamente a mesma coisa que o browser está lendo, se está aparecendo na tela, vai chegar na aplicação desktop.

J

Mas como seria o melhor modo de eu pegar do meu desktop o que está sendo escrito na tela ?

estou fazendo como vc me orientou :

out.write ( request.getParameter(“mensagem”) );

e na minha aplicação Desktop naõ me retorna nada

veja como está o código de recebimento ( desktop) :

URL url = null;

URLConnection urlConn = null;

String recebeDaServlet = null;

try {

url = new URL(“<a href="http://localhost/web/msgJsp.jsp">http://localhost/web/msgJsp.jsp</a>”);

urlConn = url.openConnection();

urlConn.setDoInput(true);

urlConn.setDoOutput(false);

urlConn.setUseCaches(false);

urlConn.setDefaultUseCaches(false);
BufferedReader entrada = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 
	    recebeDaServlet = (String) entrada.readLine(); // aqui vem VAZIO
	    entrada.close();
	}catch (MalformedURLException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}

seria essa a melhor forma de resgatar um dado ?

J

Tente assim:

urlConn.getContent&#40;&#41;;

Veja o que isso retorna.

J
entaõ tentei e fiz dessa forma :

InputStream is = (InputStream) urlConn.getContent();

ObjectInputStream objectInputStream = new ObjectInputStream(urlConn.getInputStream());

Object objectReceive = objectInputStream.readObject();

objectInputStream.close();

e lançava essa expection:
java.io.StreamCorruptedException: invalid stream header: 0D0A3C21

daí mudei a forma de ler usando BufferedReader

BufferedReader entrada = new BufferedReader(new InputStreamReader(is));

String s = (String) entrada.readLine();

entrada.close();

e continuava a vir vazio

cara mto estranho isso, vc naõ tem nada já pronto pra facilitar minha vida Jair ? :cry:

Abrs.

Criado 3 de outubro de 2007
Ultima resposta 3 de out. de 2007
Respostas 6
Participantes 2