Java 응용 프로그램에서 Httpsurlconnection을 사용하여 일부 문자열 데이터를 서버에 게시했습니다. 안드로이드에서이 코드를 테스트하면 완벽하게 작동합니다. 그러나 Java 응용 프로그램에서는 작동하지 않습니다.httpsurlconnection이 Java 응용 프로그램에서 문자열을 잘못 입력했습니다.
public static void main(String[] args) {
disableSslVerification();
new HttpsClient().testIt();
}
private void testIt() {
String https_url = "https://XXX.XX.XXX.XXX:XXXX/XXXXX/TestServlet";
URL url;
try {
url = new URL(https_url);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
print_content(con, "test");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void print_content(HttpsURLConnection connection, String data) {
if (connection != null) {
try {
connection.setConnectTimeout(6000);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
Charset cSet = Charset.forName("UTF-8");
byte bytes[] = data.getBytes(cSet);
connection.setRequestProperty("Content-Length", ""
+ Integer.toString(bytes.length));
connection.setRequestProperty("Content-Language", "tr");
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(
connection.getOutputStream());
wr.write(bytes);
wr.flush();
wr.close();
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, cSet));
String line;
StringBuilder response = new StringBuilder();
while ((line = rd.readLine()) != null) {
response.append(line);
response.append(System.getProperty("line.separator"));
}
rd.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}
그리고 서블릿은 다음과 같다 : :이 응용 프로그램을 실행할 때
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String s = getHTML(request);
try {
out.print("received data:");
out.print(s);
} finally {
out.close();
}
}
private String getHTML(HttpServletRequest request) throws IOException {
int n = request.getContentLength();
if (n < 1) {
return "";
}
byte bytes[] = new byte[n];
request.getInputStream().read(bytes);
return new String(bytes, "UTF-8");
}
, 서블릿의 응답은 다음과 같습니다
는 수신 된 데이터를 다음과 같이 클라이언트 자바 응용 프로그램입니다
t☐☐☐항상 첫 번째 문자 만 제대로 서블릿에 전송됩니다. 동일한 코드가 안드로이드에서 완벽하게 작동합니다. 누구든지 제발 도와 주실 래요? 감사합니다 ...
답변 해 주셔서 감사합니다.하지만 이미 시도했지만 변경된 사항은 없습니다. 또한, 바이트를 읽는 데 문제가 있으면 왜 같은 서블릿이 Android 앱에서 작동 했습니까? – user2972185