[英]Request and get response from servlet
我必須將客戶信息發送到服務器並從中獲取響應。 我的流程是使用POST從JSP向Servlet發送客戶信息。 從Servlet,我將發送數據並從響應中獲取狀態。 但是,當我將數據發送到服務器時,出現了HTTP錯誤500。我可以將數據發送到HTTP或HTTPS。 如果必須使用HTTPS協議來請求服務器,該如何實現?
這是servlet代碼。
String refNo = request.getParameter("ref");
String amount = request.getParameter("amt");
response.setContentType(CONTENT_TYPE);
URL url;
URLConnection urlConn;
DataOutputStream cgiInput;
// URL of target page script.
url = new URL("http://uat.telemoney.com.sg/easypay2/paymentpage.do");
urlConn = url.openConnection();
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setUseCaches(false);
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
String content = "mid=" + URLEncoder.encode(MERCHANT_ID) + "&ref=" + URLEncoder.encode(refNo)+ "&cur=" + URLEncoder.encode("SGD");
content += "&statusurl=" + URLEncoder.encode("http://www.winsondbs.com:8080/TestWeb/Servlet/DBSController") + "&paytype=" + URLEncoder.encode("2");
content += "&ccnum=" + URLEncoder.encode("5111111111111115") + "&ccdate=" + URLEncoder.encode("1511") + "&cccvv=" + URLEncoder.encode("989");
content += "&amt=" + URLEncoder.encode(amount) + "&creditCardName=" + URLEncoder.encode("raymond") + "&cccvv=" + URLEncoder.encode("989");
System.out.println(content);
// Send POST output.
cgiInput = new DataOutputStream(urlConn.getOutputStream());
cgiInput.writeBytes(content);
cgiInput.flush();
cgiInput.close();
// reads the CGI response and print it inside the servlet content
BufferedReader cgiOutput =
new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
PrintWriter servletOutput = response.getWriter();
servletOutput.print("<html><body><h1>This is the Source Servlet</h1><p />");
String line = null;
while (null != (line = cgiOutput.readLine())){
servletOutput.println(line);
}
cgiOutput.close();
servletOutput.print("</body></html>");
servletOutput.close();
下面是錯誤:
Jan 16, 2013 8:33:04 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet DBSController threw exception
java.io.IOException: Server returned HTTP response code: 500 for URL: http://uat.telemoney.com.sg/easypay2/paymentpage.do
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at servlet.com.dbs.www.DBSController.doPost(DBSController.java:163)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
我該如何解決?
您不應該編寫DataOutputStream。 另一端的服務器是否期望DataOutputStream。
取代這個
cgiInput = new DataOutputStream(urlConn.getOutputStream());
cgiInput.writeBytes(content);
與
cgiInput = urlConn.getOutputStream());
cgiInput.write(content.getBytes());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.