서블릿의 주요 기능은 클라이언트 요청을 처리하고 응답하는 것입니다. 이러한 이유로, 각 요청에 대해 웹 컨테이너는 service (), 즉 httpservletrequest 및 httpservletresponse를 호출하기 전에 두 개의 객체를 생성합니다. httpservletrequest가 http 요청 메시지를 캡슐화하는 경우 httpservletreponse는 http 응답 메시지를 캡슐화합니다. 웹 서버가 작동하는 동안 각 서블릿은 하나의 인스턴스 객체 만 생성하지만 모든 요청은 서블릿 인스턴스의 서비스 (servletrequest req, servletResponse res) 메소드를 호출합니다. 여기서 httpservletrequest는 servletrequest의 서브 클래스이며 httpservletresponse는 ServletResponse의 서브 클래스입니다.
httpservletrequest 및 httpservletresponse 인터페이스의 상속 관계 다이어그램은 다음과 같습니다.
1. httpservletResponse
httpservletresponse 인터페이스는 ServletResponse 인터페이스에서 상속됩니다. HTTP 응답 메시지는 상태 행, 응답 메시지 본문 및 메시지 본문의 세 부분으로 나뉩니다. HTTPservletResponse 인터페이스는 클라이언트에 응답 상태 코드, 응답 메시지 헤더 및 응답 메시지 본문을 보내는 메소드를 정의합니다. httpservletresponse 인터페이스에는 많은 방법이 있지만 일반적으로 사용되는 몇 가지 방법 만 사용합니다. 다른 방법을 사용하는 경우 응답의 소스 코드 또는 관련 정보를 읽을 수 있습니다.
상태 코드 관련 기능을 보냅니다
메소드 설명 public void setstatus (int sc) 응답 메시지의 상태 코드를 설정합니다. 웹 서버는 기본적으로 상태 코드가 200 인 상태 라인을 생성합니다. 두 번째 방법은 또한 public void senderror (int sc)는 오류 메시지를 나타내는 상태 코드를 보냅니다. 공개 void sendError (int sc, string msg)에 대한 설명을위한 문자 메시지를 추가합니다.
응답 메시지 헤더 관련 기능을 보냅니다
메소드 설명 AddHeader는 동일한 이름으로 응답 헤더 필드를 추가 할 수 있습니다. Setheader는 동일한 이름의 public void addHeader (문자열 이름, 문자열 값) HTTP 응답 헤더 필드를 설정하고 이름은 필드 이름을 지정하고 값은 필드 값을 지정합니다. Public void SetContentLength (Int Len)로 헤더 필드를 상환합니다. int len)는 반응 메시지 Public Void Setheader (문자열 이름, 문자열 값) 의 엔티티 컨텐츠의 크기를 바이트로 설정 합니다 . 즉, 컨텐츠 유형 필드 공개 void setcharacterencoding (String Charset) 의 값을 설정합니다 . 출력 컨텐츠 문자 인코딩, 즉 컨텐츠 유형 필드의 값을 설정합니다. 이 방법의 우선 순위는 setContentType 보다 높습니다.public void SendRedirect (문자열 위치) 서블릿 요청 리디렉션
응답 메시지 본문 관련 기능을 보냅니다
| 방법 | 설명 |
| 공무원 getOutputStream () | httpservletresponse servletoutputstram 유형의 바이트 출력 스트림을 얻으십시오 |
| 공개 인쇄기 getwriter () | httpservletresponse의 문자 출력 스트림 서플릿 작품 유형을 얻으십시오 |
중국 출력 문제
컴퓨터의 데이터는 이진 형태로 저장되므로 텍스트가 전송되면 문자의 바이트 간 변환이 발생합니다. 문자와 바이트 간의 변환은 코드 검색 테이블을 통해 완료됩니다. 문자를 바이트로 변환하는 프로세스를 인코딩이라고하며 바이트를 문자로 변환하는 프로세스를 디코딩이라고합니다. 인코딩 및 디코딩에 사용되는 코드 테이블이 다르면 차량 블러드 코드 문제가 발생합니다.
참고 : httpservletresponse 객체의 문자 출력 스트림을 인코딩 할 때 기본값은 ISO 8859-1 인코딩입니다. 이 인코딩 방법은 중국어와 호환되지 않습니다. 예를 들어, "중국"은 "63 63"으로 인코딩됩니다 (ISO 8959-1 코드 테이블에서 찾을 수없는 문자는 63으로 표시됩니다). 브라우저가 수신 된 데이터를 디코딩하면 기본적으로 "63"to "?"를 디코딩하고 브라우저는 두 문자 "China"를 "?"로 디코딩합니다.
httpservletresponse 프로그램 예제
패키지 zzz; import java.io.ioexception; import java.io.printwriter; import javax.servlet.http.httpervlet; import javax.servlet.http.htttp.htttp.htttp.httpervletrequest; import javax.servlet.http.htttp.httpervletresponse; public classh hortpervlet htpervertends {voppervlet htpervertend doget (httpservletrequest 요청, httpservletreponse response)는 ioexception {// "garbled response.setcontenttype ("text/html; charset = utf-8 "); publicwriter (publicwriter); out.println ("hello "; dopost (httpservletrequest request, httpservletresponse response)는 ioexception {this.doget (요청, 응답);때로는 페이지를 정기적으로 점프하는 문제가 발생합니다. HTTP의 새로 고침 헤더 필드는 브라우저에 지정된 시간 내에 다른 페이지로 자동 새로 고침 및 기타로 점프하도록 알 수 있으며 웹 페이지가 새로 고쳐서 지정된 페이지로 정기적으로 이동합니다.
패키지 zzz; import java.io.ioexception; import java.io.printwriter; import javax.servlet.http.httpervlet; import javax.servlet.http.htttp.htttp.htttp.httpervletrequest; import javax.servlet.http.htttp.httpervletresponse; public classh hortpervlet htpervertends {voppervlet htpervertend doget (httpservletrequest request, httpservletreponse response)는 ioexception을 던졌습니다 {// 응답 메시지 설정 응답 설정. response.setHeader ( "새로 고침", "2; url = http : //www.baidu.com"); printwriter out = response.getwriter (); out.println ( "Hello China, 2 초 안에 Baidu로 점프 ..."); } @override public void dopost (httpservletrequest request, httpservletresponse 응답)는 ioexception {this.doget (요청, 응답); }}2. httpservletrequest
httpservletrequest 인터페이스는 ServletRequest 인터페이스를 상속하고 캡슐화 된 HTTP 요청 메시지에 특별히 사용됩니다. HTTP 요청 정보에는 세 가지 부분이 포함되므로 요청 행, 요청 헤더 및 요청 본문, HTTPServletRequest 인터페이스는 요청 라인, 요청 헤더 및 요청 본문을 얻기위한 관련 메소드를 정의합니다.
요청 행을 얻는 관련 방법
| 방법 | 설명 |
| 공개 문자열 getMethod () | HTTP 요청 방법, 게시, GET 등을 가져옵니다. |
| 공개 문자열 getRequesturi () | 요청 행에서 리소스 이름 부분을 가져옵니다 |
| 공개 문자열 getQueryString () | 요청 행에서 매개 변수 부분을 가져옵니다 |
| 공개 문자열 getProtocol () | HTTP 1.1과 같은 요청 줄에서 프로토콜 이름과 버전을 가져옵니다. |
| 공개 문자열 getContextPath () | 요청 URL에서 웹 애플리케이션에 속하는 경로 가져 오기 |
실제로, 요청 줄의 방법은 메소드 이름에서 볼 수 있으므로 여기에 하나씩 게시하지 않습니다.
요청 메시지 헤더를 얻는 관련 방법
| 방법 | 설명 |
| 공개 문자열 getheader (문자열 이름) | 지정된 필드의 값을 얻으십시오, 널이 반환되지 않으면 여러 반품이 있으면 첫 번째 값을 반환합니다. |
| 공개 열거 <string> getheaders (문자열 이름) | 지정된 필드로 열거 수집 객체를 반환합니다 |
| 공개 열거 <string> getheadernames () | 모든 필드가 포함 된 열거 수집 객체를 반환합니다 |
| 공개 문자열 getContentType () | 컨텐츠 유형 필드의 값을 얻으십시오 |
요청 헤더 필드의 모든 값을 인쇄하십시오
패키지 zzz; import java.io.ioexception; import java.io.printwriter; import java.util.enumeration; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httppletr helly hello; httpservlet {@override public void doget (httpservletrequest request, httpservletreponse response)는 ioexception {// 응답 메시지 설정 응답을 인코딩합니다. printwriter out = response.getwriter (); 열거 <String> names = request.getheAderNames (); while (names.hasmoreElements ()) {문자열 이름 = names.nextElement (); 문자열 값 = request.getheader (이름); out.println (이름 + ":" + value + "</br>"); }} @override public void dopost (httpservletrequest request, httpservletresponse 응답)는 ioexception {this.doget (요청, 응답); }}요청 본문을 얻는 관련 방법
메소드 설명 Public ServletInputStream getInputStream () 요청 된 ServletInputStream 객체를 가져옵니다. 엔티티 컨텐츠가 텍스트가 아닌 경우 getInputStream 메소드를 통해서만 요청 본문 메시지 만 얻을 수 있습니다. 요청 된 BufferedReader getReader ()는 요청 된 BufferedReader 객체를 가져옵니다. 이 개체는 엔티티 컨텐츠 바이트 데이터를 지정된 문자 세트로 인코딩 된 텍스트 문자열로 변환합니다.
요청 매개 변수를 얻습니다
| 방법 | 설명 |
| 공개 문자열 getParameter (문자열 이름) | 지정된 매개 변수 값을 얻고이 매개 변수없이 NULL을 반환하십시오. |
| 공개 열거 <string> getParameterNames () | 모든 매개 변수 이름이 포함 된 열거 개체를 반환합니다 |
| public String [] getParametErvalues (문자열 이름) | HTTP 요청에는 동일한 매개 변수 이름에 해당하는 모든 매개 변수 값을 얻기 위해 여러 개의 동일한 매개 변수가있을 수 있습니다. |
3. requestDispatcher 인터페이스
클라이언트가 웹 리소스를 요청하는 경우, 서버가 요청 처리와 같은 다른 리소스에 알리고 rendipatcher 인터페이스의 인스턴스 개체를 통해 구현 될 수도 있습니다. requestDispatcher 객체를 얻는 메소드는 ServletRequest 인터페이스 -getRequestDispatcher (String Path)에 정의되어 있으며 특정 경로에 의해 지정된 리소스의 RequestDispatcher 개체를 반환합니다. 현재 웹 응용 프로그램의 루트 디렉토리를 나타내려면 매개 변수 경로는 "/"로 시작해야합니다. 즉, 경로 경로는이 웹 프로그램에 있어야합니다. 그렇지 않으면 예외가 발생합니다.
requestDispatcher 인터페이스의 메소드
| 방법 | 기능 |
| Public void Forward (ServletRequest 요청, ServletResponse 응답) | 서블릿을 다른 웹 리소스로 전달하고 응답을 위해 요청을 다른 리소스로 전달하십시오. |
| 공개 무효가 포함됩니다 (Servletrequest 요청, ServletRepponse 응답) | 다른 리소스를 현재 응답 내용으로 포함하는 데 사용됩니다 |
위의 것은 Java 웹 요청 및 편집자가 소개 한 응답 예제에 대한 자세한 설명입니다. 나는 그것이 모두에게 도움이되기를 바랍니다!