0

jboss4.2.2サーバーで実行されているjspページがあります。jsp imで、request.getMethod()やrequest.getHeaderNames()などのメソッドを使用してhttppostリクエストのヘッダーを出力しようとしています。別のプログラムから生成しているので、リクエストがhttp postであることを確認してください。ただし、代わりにjspprintがhttpgetリクエストである場合、出力されるcontent-lengthは-1であり、出力されるヘッダーは送信するヘッダーと一致しません。

リクエストを生成するアプリケーションのコードは、多かれ少なかれ次のようになります。

    URL url = new URL(the_url);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setDoOutput(true);
    con.setDoInput(true);
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-type", "application/timestamp-query");
    con.setRequestProperty("Content-length", String.valueOf(data.length));
    out = con.getOutputStream();
    out.write(data);
    out.flush();

リクエストヘッダーを印刷しようとしているアプリケーションのコードは次のとおりです。

    <%@page import="java.io.InputStream"%>
    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="java.util.Enumeration"
    import="java.io.File"
    import="java.io.FileOutputStream"
    import="java.util.Date"%><%
    File logfile = new File("/home/tsa/logfile");
    FileOutputStream log_os = new FileOutputStream(logfile);
    Enumeration header_names = request.getHeaderNames();
    log_os.write(("cont-len: "+request.getContentLength()+"\r\n").getBytes());
    log_os.write(("method: "+request.getMethod()+"\r\n").getBytes());
    while (header_names.hasMoreElements()) {
        String name = (String)header_names.nextElement();
        log_os.write((name+": "+request.getHeader(name)+"\r\n").getBytes());
    }
    log_os.close();%>

受信する必要のあるHTTPデータ:

    POST / HTTP/1.1
    Content-type: application/timestamp-query
    User-Agent: Java/1.7.0_05
    Host: localhost:8080
    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Connection: keep-alive
    Content-Length: 51

    MDECAQEwITAJBgUrDgMCGgUABBSg8UkKINAhHJl7RLw1fhly3quK4wYGBACPZwEBAQH/

受信しているHTTPデータ:

    User-Agent: Java/1.7.0_05
    Host: 192.168.56.101:8080
    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Connection: keep-alive

    The method reported is GET and the Content-Length: -1

ご協力ありがとうございました。

4

1 に答える 1

-1

同じ問題がありました。JDK 1.7.0_u21 に更新したところ、問題はなくなりました。

于 2013-01-24T04:41:28.167 に答える