![](/img/trans.png)
[英]WARNING: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException
[英]PWC1406: Servlet.service() threw exception java.io.IOException: Invalid chunk header When client send data to server
我正在開發一個使用J2ME的應用程序將收到的GPS坐標發送到服務器,我是開發客戶端服務器應用程序的新手。
使用諾基亞N97mini或E71,一切正常。 但是當我在HTC HD2上嘗試它時,我從服務器獲得了異常。 我使用Netbeans 6.5.1 GlassFish V2作為服務器。 我不知道為什么只有在HTC HD2上才會出現這種錯誤。 任何幫助將不勝感激。 謝謝...
以下是錯誤消息:
StandardWrapperValve[FindHospitalServlet]: PWC1406: Servlet.service() for servlet FindHospitalServlet threw exception
java.io.IOException: Invalid chunk header
at org.apache.coyote.http11.filters.ChunkedInputFilter.doRead(ChunkedInputFilter.java:171)
at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:719)
at org.apache.coyote.Request.doRead(Request.java:482)
at org.apache.coyote.tomcat5.InputBuffer.realReadBytes(InputBuffer.java:342)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:378)
at org.apache.coyote.tomcat5.InputBuffer.readByte(InputBuffer.java:351)
at org.apache.coyote.tomcat5.CoyoteInputStream.read(CoyoteInputStream.java:159)
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:320)
at java.io.DataInputStream.readUTF(DataInputStream.java:572)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at myPackage.FindHospitalServlet.doPost(FindHospitalServlet.java:28)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
下面是我寫的連接到服務器的代碼:
private void connectFindHospServlet()
{
String url = "http://172.22.190.13:8080/UpdateServlet/FindHospitalServlet";
StringBuffer sb = new StringBuffer();
String info = lat+"!"+lng+"!";
try
{
HttpConnection c = (HttpConnection) Connector.open(url);
c.setRequestProperty("User-Agent","Profile/MIDP-2.0, Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language","en-US");
c.setRequestMethod(HttpConnection.POST);
DataOutputStream os = (DataOutputStream)c.openDataOutputStream();
os.writeUTF(info);
os.flush();
os.close();
// Get the response from the servlet page.
DataInputStream is =(DataInputStream)c.openDataInputStream();
int ch;
sb = new StringBuffer();
while ((ch = is.read()) != -1)
sb.append((char)ch);
is.close();
c.close();
if(sb.toString().charAt(0) == 'n')
{
formDisplayResultFindHosp();
display.setCurrent(formDisplayResultFindHosp);
}
else
{
PlannerMain pm = new PlannerMain();
hospInfo = pm.getFindHospInfo(sb.toString().substring(0, sb.length()-2));
formDisplayResultFindHosp(hospInfo);
display.setCurrent(formDisplayResultFindHosp);
}
}
catch (Exception e)
{
System.out.println("Error recieve find user");
}
}
為了更好地幫助理解問題所需的任何信息,請告訴我。 我會盡量提供。
服務器顯然試圖將其作為分塊流讀取。 這可能是由於客戶端已自動設置Transfer-Encoding: chunked
標頭,因為在寫入請求主體之前尚未設置Content-Length
標頭。
因此,解決此問題的第一步是設置HTTP Content-Length
標頭:
c.setRequestProperty("Content-Length", info.getBytes("UTF-8").length);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.