ปัญหาใช้ InputStream อ่านค่าจาก HttpServletRequest บน Servlet ไม่ได้
ลองอ่านตรง กับอ่านผ่าน BufferedReader ก็ไม่ได้ ทดสอบ debug พบว่ารองที่สอง ค่าของ InputStream.read() จะจำค่าครั้งก่อนไว้ คือเป็น -1 ทำให้ไม่อ่านข้อมูลในครั้งหลังๆ
ใครทราบแนวทางแก้ไข แนะนำหน่อยครับ
package com.mmm.servlet.test;
import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.InputStreamReader;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletInputStream;
import org.w3c.dom.Element; import com.mmm.util.DOMUtil;
/** * Servlet implementation class for Servlet: TestServlet * */ public class TestServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#HttpServlet() */ public TestServlet() { super(); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request,response); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //StringBuffer outstr = readXML2(request); //response.getWriter().println(outstr.toString()); //outstr = readXML2(request); //response.getWriter().println(outstr.toString()); //Element root = DOMUtil.toDOM((InputStream)request.getInputStream()); //String txid = DOMUtil.getValue(DOMUtil.findTag(root, "txid")); response.getWriter().println(request.getQueryString()); ServletInputStream in = request.getInputStream(); int i = in.read();
} private StringBuffer readXML2(HttpServletRequest request){ StringBuffer sbuf = new StringBuffer(); try{ //ServletInputStream si=(ServletInputStream)request.getInputStream(); InputStream si=(InputStream)request.getInputStream(); boolean bl =si.markSupported(); int i=si.read(); while(i!= -1){ sbuf.append((char)i); i=si.read(); } }catch(IOException e){ } return sbuf;
} private StringBuffer readXML(HttpServletRequest request){ StringBuffer stringBuffer = new StringBuffer(); try{ InputStream inStream = (ServletInputStream)request.getInputStream(); //ServletInputStream inStream = (ServletInputStream)request.getInputStream(); BufferedReader requestData = new BufferedReader(new InputStreamReader(inStream)); String line = ""; try{ while ((line = requestData.readLine()) != null) { stringBuffer.append(line); }
} catch (Exception e){ //response.getWriter().println("e1"); stringBuffer.append("error1"); }finally{ //inStream.close(); //requestData.close(); } }catch(Exception e){ stringBuffer.append("error2"+e.getMessage()); } return stringBuffer; } }
|