> Java > Java베이스 > 본문

Java의 잘못된 요청에 대한 솔루션

풀어 주다: 2019-12-06 16:48:11
원래의
2308명이 탐색했습니다.

Java의 잘못된 요청에 대한 솔루션

문제:

get 요청을 통해 서버에 요청을 보낼 때 요청 매개변수가 중국어인 경우 서버가 수신한 매개변수가 왜곡됩니다.

깨진 코드의 원인 분석 및 해결 방법:

1. 디코딩 및 인코딩 정보

인코딩: '중국어'→1110001

디코딩: 1110001→'중국어'

깨진 코드: 인코딩 및 인코딩에 다른 문자 집합이 사용됩니다. 디코딩 프로세스

2. 웹 애플리케이션의 문자 인코딩 및 디코딩 문제

(1) 요청 프로세스:

<1>GET request

브라우저 측이 UTF-8로 인코딩되므로 서버 측도 UTF- 8. Decode

URL 주소 끝에 GET 요청 매개변수가 첨부되므로 URL 주소의 디코딩 문자 집합이 통일되어야 합니다.

해결책:

Tomcat 구성 파일 server.xml에서 첫 번째 커넥터를 찾아 다음 속성 URIEncoding=UTF-8

<2>POST request

요청 매개변수를 가져오기 전에 실행하세요. request.setCharacterEncoding(" UTF-8");

(2) 응답 프로세스

(1) 응답 데이터의 인코딩 문자 집합을 지정합니다

(2) 응답 데이터를 디코딩하는 데 사용해야 하는 문자 집합을 브라우저에 알려줍니다.

< 1>Tomcat 서버 "인코딩된 문자 집합"은 "디코딩된 문자 집합"에 따라 자동으로 설정됩니다.

<2> 인코딩된 문자 집합 설정: 브라우저에 현재 응답 데이터의 콘텐츠 유형을 알려줍니다. response.setContentType( "text/html;charset=UTF-8" ); response.getWriter(); 전에 설정해야 하며, 그렇지 않으면 유효하지 않습니다.

제안:

모든 필터는 POST 요청에서만 작동합니다. jsp 페이지에서 문자 인코딩 방법을 설정하면 양식이 제출될 때 POST 요청에서만 작동합니다. GET 요청에서는 문자 인코딩을 설정할 수 없습니다. 인코딩 방법은 GET 요청에서 사용되므로 GET 요청의 경우 server.xml 파일에 URIEncoding="UTF-8"을 설정한 다음 TOMCAT을 다시 시작해야 중국어 왜곡 문제를 해결할 수 있습니다.

그러나 통과하는 것은 권장되지 않습니다. href 하이퍼링크 요청에 중국어 매개변수가 포함되어 있으며 GET 요청에 중국어 매개변수를 전달하는 것도 권장되지 않습니다.

또한, 중국어의 송수신 시 전송되는 부분에 대해 통일된 인코딩 방법을 구현합니다. 매개변수 전송 시

"reply.jsp?title="+java.net.URLEncoder.encode(keywords)
로그인 후 복사

를 사용하고, 키워드=new String(request.getParameter("keywords").getBytes를 사용합니다. ("8859_1 ")); 이 방법은 한자 깨짐 문제를 일시적으로 해결하지만,

단, 추후 유지 관리 및 다른 서버 배포 시 한자 깨짐 문제가 계속 발생할 수 있으므로 권장하지 않습니다.

Post 요청의 경우 Servlet 또는 jsp에서 다음 코드를 작성하면 양식에서 전달된 중국어 문자 왜곡 문제를 해결할 수 있습니다.

 request.setCharacterEncoding("utf-8");
로그인 후 복사

이해:

Get 요청의 경우 요청 매개변수가 이후 주소에 추가되므로 해당 열의 URL에는 위의 처리 방법을 사용할 수 없습니다.

   String str=request.getQueryString();
   //使用URLDecoder解码字符串
   String str1=java.net.URLDecoder.decode(str,"utf-8");
   String[] paraStrings=str1.split("&");
    //paraStrings[0]就是第一个参数,依次类推...
   for(String paraString : paraStrings)
   {
         String[] nameValue=paraString.split("=");
         //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值
   }
로그인 후 복사

또 다른 방법은 요청 매개변수를 가져온 다음 요청 매개변수 값을 다시 인코딩하는 것입니다. 즉, 먼저 해당 값을 바이트 배열로 변환한 다음 바이트 배열을 문자열로 다시 디코딩하는 것입니다.

  String str=request.getParameter("name");
  byte[] bytes=str.getBytes("ISO-8859-1");
  String name=new String(bytes,"utf-8");
로그인 후 복사

결론: 중국어 매개변수를 전달할 때 POST 요청을 사용하여 제출하는 것이 가장 좋습니다. 서버 설정에 따라 인코딩 방법이 다를 수 있으며, 운영 체제 설정에 따라 인코딩 방법이 다를 수 있습니다.

추천:

java 기본 튜토리얼

위 내용은 Java의 잘못된 요청에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!