Servlet 상세 설명 (2): request 와 response 대상

11221 단어 JSP/Servlet
request 와 response 가 무엇 입 니까?
request 대상 은 서버 가 브 라 우 저 에 요청 한 패키지 이 고 response 는 서버 가 서버 에 응답 하 는 패키지 입 니 다.这里写图片描述
request 는 요청 정 보 를 꺼 내 고 response 는 브 라 우 저 에 되 돌아 갈 정 보 를 추가 합 니 다.
response 대상 을 사용 하여 http 응답 프로 토 콜 의 정 보 를 설정 합 니 다.
Http 응답 정 보 를 생 성하 여 사용자 에 게 보 냅 니 다.
응답 첫 줄
HTTP/1.1 200 OK
  • setStatus(int sc): 정상 적 인 응답 상태 코드 status code
  • 설정
  • setStatus(int sc, String sm): 정상 적 인 응답 상태 코드 를 설정 하고 상태 코드 설명 status message 를 설정 합 니 다. 시간 이 지나 면 정상 적 인 상태 에서 상태 코드 정보 가 사용자 에 게 표시 되 지 않 기 때문에 설정 할 필요 가 없습니다
  • sendError(int sc): 잘못된 상태 코드 설정
  • sendError(int sc, String sm): 잘못된 상태 코드 를 설정 하고 오류 정 보 를 포함 합 니 다
  • 응답 헤드
    key:value
  • setHeader(String name, String value): 키 쌍 을 설정 하고 값 은 string
  • 입 니 다.
  • setDateHeader(String name, long date): 키 쌍 을 설정 합 니 다. 값 은 long 이 고 long 은 밀리초 의 표시
  • 에 자주 사 용 됩 니 다.
  • setIntHeader(String name, int value): 키 쌍 을 설정 하고 값 은 int 형식
  • setHeader(String name, String value): 키 쌍 을 추가 합 니 다. 값 은 string
  • 입 니 다.
  • setDateHeader(String name, long date): 키 쌍 을 추가 합 니 다. 값 은 long 이 고 long 은 밀리초 의 표시
  • 에 자주 사 용 됩 니 다.
  • setIntHeader(String name, int value): 키 쌍 을 추가 합 니 다. 값 은 int 형식
  • 입 니 다.
  • add 와 set 의 차 이 는 선행 직접 추가 (key 는 중복 가능) 이 고 후 자 는 원래 의 것 을 수정 하고 없 으 면 추가 할 수 있다 는 것 이다.

  • 몇 개의 일반적인 응답 헤더:
  • ContentType:text/html;charset=utf-8
  • Refresh:3;url=http://path 3 초 후 웹 페이지 건 너 뛰 기
  • html 에서 meta 라벨 의 역할 은 응답 헤드 에 정 보 를 추가 하 는 데 사 용 됩 니 다.
    응답 빈 줄
    구분자
    응답 본문
    보 낼 자원
  • response.getWriter(): 문자 흐름 가 져 오기
  • 부모 클래스 방법 getOutputSteam(): 출력 바이트 흐름 가 져 오기
  • 요청 재 설정 실현
    수 동 구현:
    재 정립 을 실현 하 는 것 은 매우 간단 하 다. 두 단계 만 필요 하 다.
  • 응답 헤드 에 302 상태 코드 를 추가 하여 브 라 우 저 에 방향 을 바 꿔 야 한다 고 알려 줍 니 다 response.setStatus(302)
  • 응답 헤드 에 Location 를 추가 하고 방향 을 바 꿀 위 치 를 지정 합 니 다 response.setHeader("Location", "http://www.baidu.com");
  • 사용자 가 servlet 을 요청 할 때 서버 는 위 와 같은 응답 헤드 를 되 돌려 줍 니 다. 위의 정 보 는 브 라 우 저 에 게 다시 요청 해 야 합 니 다. 요청 한 주 소 는 Header 의 Location 주소 입 니 다.그래서 재 정립 을 요청 하 는 것 은 사실상 두 번 의 요청 이다.
    직접 구현:
    우 리 는 response.setRedirect("http://www.baidu.com") 만 사용 하면 실현 할 수 있다.
    Servlet 에 접근 하여 브 라 우 저 에 그림 을 전달 합 니 다.
    //        
    InputStream is = getServletContext().getResourceAsStream("/WEB-INFO/mm.jpg");
    //          
    byte[] buffer = new byte[1024];
    //               
    int len = -1;
    while((len = is.readBuffer(buffer)) != -1){
        os.write(buffer, 0, len);
        os.flush();
    }

    Servlet 에 접근 하여 파일 다운로드
    그림 과 유사 하지만 브 라 우 저 는 파일 의 이름과 파일 의 종 류 를 식별 할 수 없습니다. 응답 헤더 에 파일 의 종 류 를 설정 해 야 합 니 다.
    ServletContext sc = getServletContext();
    String mimeType = sc.getMimeType("       "); //          ,           mime  
    response.setContentType(type);

    됐다.
    request 대상 을 통 해 http 요청 프로 토 콜 의 내용 가 져 오기
    http 요청 정 보 를 만 드 는 데 사용 합 니 다.
    요청 줄
    요청 방식 요청 경로 프로 토 콜 / 버 전 번호
  • request.getMethod() 요청 방식
  • request.getContextPath(), getServletPath()... 요청 경로 가 져 오기
  • request.getScheme() 요청 프로 토 콜 가 져 오기
  • 요청 헤더
    키 쌍
  • request.getHeader(String name)
  • request.getIntHeader(String name)
  • request.getDateHeader(String name)
  • request.getHeaderNames()
  • request.getHeaders(Sring name) 하나의 key 가 여러 value
  • 에 대응 합 니 다.
    빈 줄 요청
    본문 요청 (post 만 있 음)
    그러나 다음 방법 은 get 이 든 post 요청 이 든 매개 변수 값 을 얻 을 수 있 습 니 다.
  • String getParameter(String name)
  • Map getParameterMap()
  • Enumeration getParameterNames()
  • String[] getParameterValues(String name)

  • 응답 과 요청 의 난 장 판 문 제 를 해결 하 다.
    get 요청 인 코딩 문제 처리
    해결 방안: conf/server.xml URIEncoding="UTF-8" 69 줄 에서
    <Connector URIEncoding="UTF-8" 
        connectionTimeout="20000" 
        port="8888" 
        protocol="HTTP/1.1" 
        redirectPort="8443"/>

    URIEncoding 을 UTF - 8 로 설정
    post 요청 인 코딩 문제 처리
    서버 응답 시 데이터, 즉 서버 가 브 라 우 저 에 전달 하 는 데이터 의 인 코딩 형식 은 서버 에서 결정 합 니 다. 인 코딩 할 때 사용 하 는 인 코딩 표, 사용 getByte(" ") 설정 또는 사용 response.setCharacterEncoding( ) 설정 입 니 다.이들 의 차 이 는 전 자 는 바이트 흐름 코드 표를 설정 하고 후 자 는 문자 흐름 코드 표를 설정 하 는 것 이다.
    디 코딩 할 때 사용 하 는 인 코딩 시트 는 http 응답 헤드 를 지정 하여 설정 합 니 다.
    这里写图片描述
    클 라 이언 트 가 요청 을 보 낼 때의 난 코드 해결: GET 제출, 매개 변 수 는 URL 에 있 고 URL 의 디 코딩 설정 을 설정 합 니 다. 서버 는 기본적으로 IOS - 8855 - 1 라틴 코드 표 디 코딩 URL 을 사용 합 니 다. 우 리 는 response.setHeader("ContentType","text/html;charset=utf-8") 설정 파일 을 통 해:
     <Connector 
         connectionTimeout="20000" 
         port="8080" 
         protocol="HTTP/1.1" 
         redirectPort="8443"/>

    속성 추가 tomcat/config/server.xml 서버 의 기본 디 코딩 url 방식 을 utf - 8 로 설정 할 수 있 습 니 다.
    아니면 doget 방법 에서
    받 은 어 지 러 운 문 자 를 새 메타 로 변환 합 니 다:
    String name = request.getParamter("name"); //       
    byte[] bs = name.getBytes("IOS-8859-1"); //       ,          
        String s = new String(bs, "UTF-8"); //              ,    

    这里写图片描述
    POST 제출:
    GET 가 디 코딩 을 제출 하 는 것 과 차이 점: 디 코딩 이벤트 와 달리 GET 는 인자 가 URL 에 있 기 때문에 서버 가 요청 을 받 아들 이면 바로 인 자 를 디 코딩 하고 POST 는 Servlet 에서 인 자 를 가 져 오 는 방법 을 호출 할 때 디 코딩 합 니 다.따라서 post 요청 의 난 장 판 을 해결 하 는 것 은 간단 합 니 다. 매개 변수 호출 전에 만 사용 하 십시오.
    request.setCharacterEncoding("utf-8");

    디 코딩 요청 표를 설정 하면 됩 니 다.
    request 전송 요청 실현 및 request 필드
    这里写图片描述
    이것 이 바로 전송 요청, 브 라 우 저 전송 요청, servlet 처리 request 와 response 일부 업무 입 니 다. 그러나 전부 처리 할 수 없고 페이지 에 간단하게 표시 할 수 없 기 때문에 처 리 된 request 와 response 를 jsp, jsp 에 보 내 고 업무 수행 을 하 며 브 라 우 저 에 응답 하여 보 여 줍 니 다.
    리 트 윗 을 요청 하 는 것 은 주로 분업 작업 에 쓰 인 다.
    AServlet doGet():
    
    // *****         
    //todo AServlet      ,          
    //      :=>
    //    Bservlet
    BServlet bServlet = new BServlet();
    bServlet.doGet(request, response);
    
    //*****    
    //   request (       ,        )         ,   BServlet,  AServlet BServlet  request     ,request  request      Map。
    request.setAttribute("name","Feathers");  //  request         
    request.getRequestDispatcher("/servlet/BServlet").forword(request.response);

    BServlet doGet():
    // todo       
    //  request     
    System.out.println((String)request.getAttribute("name"));

    주의:
    리 트 윗 된 Servlet 에서 브 라 우 저 에 응답 본문 내용 을 출력 할 수 없 지만 응답 헤드 를 추가 할 수 있 습 니 다.Servlet 에 서 는 응답 체 를 추가 하 더 라 도 비 워 지기 때 문 입 니 다.
    리 셋 과 리 트 윗 의 차이
  • 방향 을 바 꾸 는 것 은 한 번 의 요청 이 고 한 번 의 요청 을 전달 하 는 것
  • 항목 이외 의 주 소 를 방문 할 수 있 고 리 트 윗 할 수 없습니다.
  • 리 셋 은 request 도 메 인 을 사용 할 수 없고 request 도 메 인 을 사용 합 니 다. 한 번 의 요청, 하나의 request 대상
  • 주소 표시 줄 을 바 꾸 면 변화 가 생 길 수 있 지만 리 트 윗 은 반드시
  • 리 셋 요청 방식 이 바 뀔 수 있 습 니 다. (리 셋 후의 요청 은 반드시 get 요청 입 니 다. 설정 post 를 표시 해 야 post 요청 입 니 다. 그렇지 않 으 면 get 요청 입 니 다) 리 트 윗 은 하지 않 습 니 다
  • 방향 을 바 꿀 때 response 의 방법 (response 헤드 를 수정 하여 방향 을 바 꾸 는 것 을 완성 합 니 다). 리 트 윗 을 요청 하 는 것 은 resquest 의 방법 (한 번 의 요청, 서로 다른 Servlet 에 전달)
  • 입 니 다.
    요청 포함
    리 트 윗 을 요청 합 니 다. 리 트 윗 을 요청 하 는 Servlet 은 요청 체 를 수정 할 수 없습니다. 요청 이 포함 되 어 있 습 니 다. 리 트 윗 을 요청 하 는 것 과 유사 하지만 요청 체 를 수정 할 수 있 습 니 다.용도: 중복 작업 을 해결 하 는 데 사용 합 니 다.반복 되 는 작업 을 이 Servlet 에서 추출 하여 통일 적 으로 처리 합 니 다.
    这里写图片描述
    여러 JSP 에서 사용 되 며, 하나의 jsp 는 같은 조작 을 처리 하 는 데 사용 되 며, 나머지 jsp 는 필요 여부 에 따라 순서대로 처리 합 니 다.
    구현: AServlet doGet ():
    response.setContentType("text/html;charset=utf-8");
    //   
    request.getRequestDispatcher("/servlet/BServlet").include(request,response);
    response.getWriter().write("Aservlet   ");

    BServlet doGet():
    response.getWriter().write("Bservlet   ");

    결과:
    Aservlet   Bservlet   

    좋은 웹페이지 즐겨찾기