0

顧客情報をサーバーに送信し、そこから応答を取得する必要があります。私のフローは、JSP から Servlet に POST を使用して顧客情報を送信することです。サーブレットからデータを送信し、レスポンスからステータスを取得します。しかし、サーバーにデータを送信すると、http エラー 500 が発生しました。HTTP または HTTPS にデータを送信できます。サーバーを要求するために HTTPS プロトコルを使用する必要がある場合、どうすればこれを実現できますか?

これがサーブレットのコードです。

    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)

どうすれば解決できますか?

4

1 に答える 1

0

DataOutputStream を記述しないでください。相手側のサーバーは DataOutputStream を期待していますか。

これを交換

cgiInput = new DataOutputStream(urlConn.getOutputStream());
cgiInput.writeBytes(content);

cgiInput = urlConn.getOutputStream());
cgiInput.write(content.getBytes());
于 2013-01-16T13:34:29.580 に答える