흐름도를 살펴 보겠습니다.
서버 처리 요청 과정 :
(1) 서버가 요청을받을 때마다 요청에 대한 새 스레드가 열립니다.
(2) 서버는 클라이언트의 요청 데이터를 요청 객체로 캡슐화하고 요청은 요청 데이터의 운송 업체입니다!
(3) 서버는 또한 클라이언트에 연결되어 클라이언트에 응답을 보내는 데 사용될 수있는 응답 객체를 생성합니다.
흐름도에서 볼 수 있듯이 Javaweb의 요청 및 응답에서 가장 중요한 두 매개 변수는 Service의 Service () 메소드에있는 요청 및 응답입니다.
1. 응답 개념 :
응답은 servlet.service 메소드의 매개 변수이며 javax.servlet.http.httpervletresponse 유형입니다. 클라이언트가 각 요청을 할 때 서버는 응답 객체를 생성하여 Servlet.Service () 메소드로 전달합니다. 응답 객체는 클라이언트에 응답하는 데 사용됩니다. 즉, Service () 메소드에서 응답 객체를 사용하면 클라이언트에 대한 응답 작업을 완료 할 수 있습니다.
응답 객체의 함수는 다음 네 가지 유형으로 나뉩니다.
(1) 응답 헤더 정보를 설정합니다
(2) 상태 코드를 보내십시오
(3) 응답 텍스트를 설정하십시오
(4) 리디렉션
2. 응답 응답 텍스트
응답은 응답 객체입니다. 응답 본문 (응답 본문)의 응답 흐름을 사용하여 응답 본문을 클라이언트에게 출력 할 수 있습니다. Repsonse는 총 2 개의 응답 흐름 개체를 제공합니다.
(1) printwriter out = response.getWriter () : 문자 스트림을 얻습니다.
(2) servletoutputStream out = response.getOutputStream () : 바이트 스트림 받기;
물론 응답 본문 내용이 문자 인 경우 response.getWriter ()를 사용하고 응답 내용이 바이트 인 경우, 예를 들어 다운로드 할 때는 응답을 사용할 수 있습니다.
한 요청에서 두 스트림 모두 동시에 사용할 수 없습니다! 즉, reply.getWriter () 또는 response.getOutputStream ()을 사용하지만 동시에 두 스트림을 모두 사용할 수는 없습니다. 그렇지 않으면, 불법 상태 예시가 발생합니다.
3. 응답 헤더 정보를 설정하십시오
응답 객체의 Setheader () 메소드를 사용하여 응답 헤더를 설정할 수 있습니다! 이 메소드를 사용하는 응답 헤더는 결국 클라이언트 브라우저로 전송됩니다!
(1) response.setheader ( "content-type", "text/html; charset = utf-8") : 컨텐츠 유형 응답 헤더를 설정합니다. 이 헤더의 기능은 브라우저에 응답 내용이 HTML 유형이고 UTF-8으로 인코딩된다는 것을 브라우저에 알리는 것입니다. 동시에 응답의 문자 스트림 인코딩은 UTF-8, 즉 응답으로 설정됩니다.
(2) 응답 .SetheAder ( "Refresh", "5; url = http : //www.baidu.com") : 5 초 후에 Baidu 홈페이지로 자동 이동합니다.
4. 상태 코드 및 기타 방법을 설정하십시오
(1) response.setContentType ( "text/html; charset = utf-8") : 응답을 호출하는 것과 동일합니다.
(2) 응답 .SetchAracterEncoding ( "UTF-8") : 문자 응답 스트림의 문자 인코딩을 UTF-8로 설정합니다.
(3) response.setstatus (200) : 상태 코드를 설정합니다.
(4) response.senderror (404, "원하는 자원은 존재하지 않습니다") : 오류 상태 코드를 보낼 때 Tomcat은 고정 오류 페이지로 이동하지만 오류 메시지를 표시 할 수 있습니다.
5. 리디렉션 (****** 키 *******)
5.1 리디렉션이란?
http://www.sun.com을 방문하면 브라우저 주소 표시 줄의 URL이 http://www.oracle.com/us/sun/index.htm이되며 리디렉션입니다. 리디렉션은 서버가 브라우저에 다른 주소에 액세스하도록 알리는 경우, 즉 다른 요청을 발행 할 때입니다.
5.2 리디렉션을 완료하는 방법?
답변 : 리디렉션의 상태 코드는 302입니다. 먼저 응답 객체를 사용하여 302의 상태 코드를 브라우저로 보내고 위치를 설정하고 사용 가능한 URL을 제공하고 브라우저는 새 URL에 액세스하여 리디렉션을 실현합니다.
예를 들어:
공개 클래스 Aservlet은 httpservlet {public void doget (httpservletrequest request, httpservletreponse response)를 servletexception, ioexception {response.setstatus (302); Response.SetHeader ( "위치", "http://www.baidu.com"); }}위의 코드의 목적은 다음과 같습니다. Aservlet에 액세스 한 후 브라우저는 Baidu 홈페이지로 리디렉션되도록 통지됩니다. 클라이언트 브라우저가 302의 응답 코드를 구문 분석 한 후 서버가 리디렉션 할 수 있다는 것을 알고 있으므로 즉시 응답 헤더 위치를 얻은 다음 두 번째 요청을 발행합니다.
빠른 리디렉션 메소드도 있습니다. 즉, 응답을 사용하십시오. 예를 들어, 위의 예제의 두 문장은 Response.SendRedirect ( "http://www.baidu.com")로 대체 될 수 있습니다.
요청-클라이언트의 모든 요청 데이터를 캡슐화합니다
1. 개요를 요청합니다
요청은 servlet.service () 메소드의 매개 변수이며 javax.servlet.http.httpervletrequest 유형입니다. 클라이언트가 각 요청을 할 때 서버는 요청 객체를 생성하고 요청 데이터를 요청에 캡슐화 한 다음 servlet.service () 메소드가 호출되면 service () 메서드가 호출 될 때 서비스 () 메소드로 전달합니다.
그림과 같이 :
요청 기능은 다음 유형으로 나눌 수 있습니다.
(1) 요청 헤더 데이터를 캡슐화합니다.
(2) 요청 텍스트 데이터를 캡슐화합니다. GET 요청이라면 텍스트가 없습니다.
(3) 요청은 도메인 객체로,지도로 추가 및 검색 할 수 있습니다.
(4) 요청은 요청 전달 및 요청 포함 기능을 제공합니다.
2. 요청 도메인 방법
요청은 도메인 객체입니다! Javaweb에는 4 개의 도메인 객체가 있으며 그중에 ServletContext는 도메인 객체이며 전체 응용 프로그램에서 하나의 ServletContext 객체 만 생성합니다. 요청 중에 데이터를 공유 할 수있는 요청 중 하나를 요청하십시오.
요청은 요청 객체를 만듭니다. 요청에서 여러 서블릿이 경험 된 경우 여러 서블릿이 요청을 사용하여 데이터를 공유 할 수 있습니다. 이제 우리는 요청에서 여러 서블릿을 거치는 방법을 모릅니다.
요청의 도메인 방법은 다음과 같습니다.
(1) void setAttribute (문자열 이름, 개체 값) : 객체를 저장하는 데 사용되며, 도메인 속성 저장이라고도합니다. 예 : servletcontext.setattribute ( "xxx", "xxx"), 도메인 속성은 xxx이고 도메인 속성은 xxx입니다. 메소드가 여러 번 호출되고 동일한 이름이 사용되면 마지막 값이 맵과 동일합니다.
(2) Object GetAttribute (문자열 이름) : 요청에서 데이터를 얻는 데 사용됩니다. 그것을 얻기 전에 저장해야합니다. 예를 들면 : 문자열 값 = (문자열) request.getAttribute ( "xxx"); XXX라는 도메인 속성을 얻기 위해;
(3) void removeAttribute (문자열 이름) : 요청에서 도메인 속성을 제거하는 데 사용됩니다. 매개 변수 이름으로 지정된 도메인 속성이 존재하지 않으면이 메소드는 아무것도 수행하지 않습니다.
(4) 열거 getAttributeNames () : 모든 도메인 속성의 이름을 얻습니다.
3. 요청에 따라 매개 변수를 전달합니다
클라이언트에 매개 변수를 전달하는 가장 일반적인 방법은 다음과 같습니다.
(1) 브라우저 주소 표시 줄에서 직접 입력 : GET 요청이어야합니다.
(2) 하이퍼 링크 : GET 요청이어야합니다.
(3) 양식 : <form>의 메소드 속성 값에 따라 다르기 또는 게시 할 수 있습니다.
GET 요청과 사후 요청의 차이 :
(1) 요청 받기 :
요청 매개 변수는 브라우저 주소 표시 줄에 표시되므로 안전하지 않습니다.
요청 매개 변수의 길이 한계는 1K 이내입니다.
GET 요청에는 요청 본문이 없으므로 요청을 통해 매개 변수 인코딩을 설정할 수 없습니다 .SetchAracterEncoding ();
(2) 후 요청 :
요청 매개 변수는 브라우저의 주소 표시 줄을 표시하지 않으며, 이는 비교적 안전합니다.
요청 된 매개 변수의 길이에는 제한이 없습니다.
4. 전달 및 요청 요청 요청 (****** 키 *******)
요청 전달 또는 요청 포함이든, 여러 서블릿이 공동으로 요청을 처리한다는 것을 의미합니다. 예를 들어, Servlet1은 요청을 처리 한 다음 Servlet1은 요청을 계속 처리하기 위해 Servlet2로 전달합니다.
전달 및 요청을 포함합니다
requestDispatcher rd = request.getRequestDispatcher ( "/myServlet"); 요청을 사용하여 requestDispatcher 객체를 얻으십시오. 이 방법의 매개 변수는 전달되거나 포함 된 서블릿의 서블릿 경로입니다.
요청 전달 : Rd.Forward (요청, 응답);
요청에는 다음이 포함됩니다. rd.include (요청, 응답);
때로는 요청에 따라 여러 서블릿이 협력해야하므로 한 서물에 뛰어 들어 다른 서물로 이동해야합니다!
> 요청은 여러 개의 서블릿에 걸쳐 있으며 전달 및 포함이 필요합니다.
> 요청 전달 : 응답 본문은 다음 서틀에 의해 완료됩니다! 현재 서블릿은 응답 헤더를 설정할 수 있습니다! (머리를 남겨 두지 만 몸체는 아닙니다) 즉, 현재 서블릿에 의해 설정된 해당 헤드가 유효하고 해당 몸체가 유효하지 않습니다.
> 요청에는 다음이 포함됩니다. 응답 본문은 2 개의 서블릿으로 완료되지 않습니다! (모두 유지) 모두 유효합니다.
> 요청 전달 또는 포함 요청 여부에 관계없이 요청 범위 내에 있습니다! 동일한 요청과 응답을 사용하십시오!
요청 전달 및 요청은 비교를 포함합니다.
(1) 요청이 aservlet의 bservlet으로 전달되면 응답 본문은 aservlet에서 출력 할 수 없습니다. 이 작업은 Bservlet에 의해 수행되어야합니다. 요청을 포함하는 데 사용되는 경우 그러한 제한이 없습니다.
(2) 요청 전달이 응답 본문을 출력 할 수는 없지만 응답 헤더는 여전히 설정 될 수 있습니다.
(3) 대부분의 요청은 JSP 페이지에 적용되어 여러 페이지의 병합을 완료합니다.
(4) 요청 전달은 주로 서블릿에 적용되며 전달 목표는 대부분 JSP 페이지입니다.
그림과 같이 :
요청 전달 및 리디렉션 비교
(1) 요청 전달은 하나의 요청이며, 리디렉션은 두 개의 요청입니다.
(2) 요청 전달 후 브라우저 주소 표시 줄은 변경되지 않지만 리디렉션은 두 개의 요청이기 때문에 리디렉션이 변경됩니다.
(3) 전달을 요청하는 목표는이 응용 프로그램의 리소스 일 수 있으며, 리디렉션의 목표는 다른 응용 프로그램 일 수있다.
(4) Aservlet 및 Bservlet에 대한 요청 전달 방법은 동일합니다. 즉, 요청 전달이 요청이기 때문에 둘 다 얻거나 둘 다 게시물입니다.
(5) 두 번째 리디렉션 요청은 가져와야합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.