다들 서블릿에 대해 잘 알고 계시리라 생각합니다. 혹시라도 잘못 쓰여진 내용이나 잘못된 내용이 있으면 네티즌들이 비판하고 수정해 주시길 바랍니다. 오늘은 get과 post의 두 가지 방법에 대해서만 논의하겠습니다. 따라서 인코딩 방법도 다를 것입니다. post의 왜곡된 문제를 더 쉽게 해결할 수 있도록 간단히 설명하겠습니다. 좋은 기억의 원리와 그 차이점을 이해하세요.
get 메소드와 post 메소드는 모두 http 프로토콜을 기반으로 하며 html 페이지를 게시하고 수신하는 방법을 제공하는 것입니다. 클라이언트가 요청을 시작하고 서버가 응답합니다.
완전한 요청 메시지에는 요청 라인, 여러 메시지 헤더 및 요청 엔터티 콘텐츠가 포함됩니다.
요청 라인에는 요청 메소드(get 또는 post), 리소스 경로(액세스할 주소), http 버전 번호(http1.1)가 포함됩니다.
여러 메시지 헤더(예: 브라우저의 커널 정보(사용자 에이전트), 상위 페이지를 연 사람(참조) 등)
메시지 헤더와 요청 엔터티 콘텐츠를 구분하기 위해 요청 엔터티 콘텐츠와 메시지 헤더에 빈 줄이 있습니다. 엔터티 콘텐츠는 사용자가 제출합니다.
완전한 응답 메시지에는 상태 줄, 하나 이상의 응답 헤더, 빈 줄 및 응답 엔터티가 포함됩니다.
상태 표시줄: http 프로토콜 버전 번호, 상태 코드 및 이유 설명 포함
공통 상태 코드: 200 정상
404: 요청한 리소스가 존재하지 않습니다.
500: 서버 내부 오류
http에 대해 간략하게 설명한 후 get 메소드와 post 메소드의 차이점을 소개할 수 있습니다.
획득 방법:
get 메소드는 제출된 컨텐츠를 URL 끝에 넣으며 길이가 제한되어 있습니다. post와 get은 모두 http 프로토콜을 기반으로 합니다. get 메소드는 해당 매개변수가 URL에 있기 때문에 요청 라인에 넣습니다. post 메소드 요청 엔터티 콘텐츠에 배치됩니다. post 메소드는 캐시 정보를 유지하지 않지만 get 메소드는 브라우저 기록에서 제출된 컨텐츠를 볼 수 있습니다. 게시물 번호에는 길이 제한이 있습니다.
get 메소드와 post 메소드로 데이터를 제출할 때 http 프로토콜의 위치가 다르기 때문에 이를 해결하는 인코딩 방법도 다릅니다.
포스트 모드에서 문자가 왜곡되는 문제 해결:
서블릿의 서비스 메소드(doGet 또는 doPost 메소드도 허용됨)에서 요청 인코딩을 UTF-8로 설정하십시오.
req.setCharacterEncoding("UTF-8");
이런 방식으로 요청 인코딩에는 문제가 없으며 응답 인코딩도 UTF-8로 설정됩니다.
resp.setCharacterEncoding("UTF-8");
이런 식으로 응답의 인코딩에는 문제가 없지만 이렇게 작성한 후에도 브라우저에서는 여전히 문제가 있을 수 있습니다. 왜냐하면 브라우저는 귀하의 인코딩 형식이 무엇인지 모르기 때문에 인코딩 형식에 따라 표시하기 때문입니다. 브라우저의 기본 형식이므로 브라우저 표시의 인코딩 방법을 UTF-8로 설정하려면 명령문은 다음과 같습니다.
resp.setContextType("text/html;charset=utf-8");
동시에 개발 도구의 코딩이 프로젝트 코딩과 일치하는지 확인해야 합니다. 그렇지 않으면 UTF-8을 예로 들어 문자가 깨질 수 있습니다.
get 메소드에서 잘못된 문자 문제 해결:
위의 작업 외에도 get 메서드는 tomcat의 conf 디렉터리에 있는 server.xml 구성 파일에 다음 문장을 추가해야 합니다.
<Connector port="8080" 프로토콜="HTTP/1.1" ConnectionTimeout="20000" RedirectPort="8443" />
수정 후 입니다
<Connector port="8080" 프로토콜="HTTP/1.1" ConnectionTimeout="20000" RedirectPort="8443" userBodyEncodingForURI="true" />
이 수정 방법은 보다 유연하여 URL의 인코딩 형식을 페이지의 인코딩 형식과 동일하게 하거나 다음과 같은 고정 형식으로 설정할 수 있습니다.
<Connector port="8080" 프로토콜="HTTP/1.1" ConnectionTimeout="20000" RedirectPort="8443" EncodingForURI="UTF-8" />
이렇게 하면 기본적으로 문제가 발생하지 않으나, 여전히 문제가 있는 경우에는 String의 방법을 사용하여 페이지의 왜곡된 문자를 원하는 형식으로 변경해야 합니다. 그러나 위의 방법이 맞다면 이 방법을 사용하십시오. 작동하지 않습니다. 어떻게 사용할 수 있습니까?
위의 작업 외에도 데이터베이스의 인코딩 형식도 프로젝트와 동일하게 설정해야 하는데 여기서는 시간이 부족하여 작성이 거칠고 생략된 부분이 많습니다. 하지만 서블릿 코딩 방법을 해결하는 데는 충분할 것입니다.
다음과 같이 호출할 때 js를 사용할 수 있습니다.
function ceshi() {window.location.href = "UserServlet?uname=zhangsan&realname=" + encodeURIComponent("안녕하세요 여러분");}
이렇게 하면 한자 Hello Everything이 더 이상 주소 표시줄에 표시되지 않으며(이 문장을 제출 버튼에 바인딩) 해당 서블릿에 제출할 수 있습니다. 잘못된 문자를 해결하는 이 방법은 jsp에도 적용됩니다.
그런데 서블릿과 관련된 것, 즉 전달과 리디렉션에 대해 이야기해야 합니다. 전달은 현재 프로젝트에서만 점프할 수 있고 리디렉션은 외부로 점프할 수 있습니다. 물론 여기서는 다른 차이점만 설명하겠습니다. 제가 중요하다고 생각하는 점에 대해 말씀드리자면, 어떤 것을 사용하든지, 포워드와 리다이렉트를 쓴 후에 반드시 return을 추가하세요. 그렇지 않다면 return을 추가한 후에도 다음 명령문이 계속 실행됩니다. 명령문 동일한 페이지가 여러 번 이동하는 것을 방지하는 오류가 보고됩니다. 마음에 들지 않는 네티즌분들이 실수로 실수를 하게 됐는데 협조해주셔서 감사하고, 실수를 바로잡을 수 있도록 도와주신 네티즌분들께도 감사드리며, 앞으로도 이렇게 발전하도록 진심으로 감사드립니다.