JSP 5. model1 & model2 HTTPServletRequest

zhyun·2020년 11월 24일
0

JspSpring

목록 보기
6/39

복습

  • httpservlet 상속 받아서 소스 구현
  • 컴파일해서 클래스패스 가짐
  • 톰캣이라는 서블릿 단계에서 등록
  • 서블릿은 클래스패스리소스
  • 서블릿매핑 - 서블릿을 웹리소스로 만들어주기위한단계 (웹서블릿방법도 있음- 서블릿 3.0이상)
  • (가상의주소체계)uri에 가까운 개념
    • 다운을 받으려면 원본파일명으로 다운이 되야한다 (=> .do인 확장자로 다운받은 상황)
  • 템플릿메서드 서블릿의 콜백메서드 종류
  • 라이프사이클콜백
  • init, destroy (싱글톤)
  • 리퀘스트콜백
  • 매번 요청이 들어올때마다 반복
  • service, doXXX
  • 톰캣이라는 녀석은 요청이 들어오면 service 호출 여기서 doget,dopost메서드 중에 뭔지 판단 이 메서드에 관련된 콜백 호출

2020.11.24일 화요일

  • href,action, - 브라우저가 갖고있는것은 현재주소

  • view를 연결해줄수 있는 중간역할자 controller-서블릿

  • 단축키 : alt+shift+c 누르면 위에 창 뜸
  • useTmplateServlet 안에 서비스 고친부분 중요

JSP기반 웹어플리케이션JSP페이지의 역할에 따라 Model1 구조와 Model2구조로 나뉜다

model1

  • 요청분석과 응답생성하나의 jsp에서 처리되는 구조
  • scope 사용X

model2

  • clientserver에 있는 servlet에 요청을 한다

  • 다음줄이 Controller 역할

    • 브라우저의 모든 요청분석 & 로직선택
    • 하나의 서블릿에서 처리
    • servletrequest를 받아주는 역할. 이 역할은서 servlet과 jsp여도 상관없지만 서버사이드에서 굳이 jsp스펙이 아니여도 된다. servlet스펙으로! (이 과정에서 data 만듦)
    • clint의 커멘드 분석! scope 필요
    • 커멘드 분석 과정이 MVC중 Model 데이터 만드는 과정
  • sevlet에서 만든 data를 들고 WEB-INF안에 있는 jsp로 간다. 여기서 응답데이터를 client에게 보낸다. WEB-INF는 client가 접근할 수 없다.

  • HTML,JavaScript는 클라이언트 사이드, 자바는 서버 사이드

  • mvc패턴 적합한 형태 mvcmodel2라고도 부른다

    서버(WAS)jsp
    브라우저의 모든 요청을 받고 분석
    데이터 만든 후 jsp로 감
    응답데이터를 만들고 client에게내보낸다
    서버가 준 데이터를 쓸수 있어야 한다

HttpServletRequest

  • HttpServletRequest 타입의 request는 웹컨테이너에 의해 생성
  • http프로토콜을 이용하여 서블릿을 대상으로 발생한 요청에 대해 HTTP의 구체적인 정보를 가진 객체
    • 클라이언트(웹브라우저)에 대한 메타데이터
    • 서버와 관련된 일부 정보
    • 클라이언트가 전송한 요청 파라미터
    • 클라이언트가 전송한 요청 헤더

HTTP request 패키징 방식

Request Line

  • (수신자에 대한) URL Method Protocol/version
HTTP Method목적 혹은 방식
GET(Retrieve)서버로부터 데이터를 조회 body 필요없음
POST(C)서버로 데이터를 전송 body 필수
PUT/PATCH(U)이미 존재하는 서버상의 리소스를 변경
body가 필요하지만 form태그 action을 통해
GET,POST를 통해 전송
DELETE(D)서버상의 리소스를 삭제
HEADGET방식과 동일하나 응답 메시지를 제외한
헤더 등의 메타데이터만 조회
OPTION서버가 현재 지원하는 http메소드를 조회하기 위한 리퀘스트
TRACE디버깅 목적으로 사용, 요청데이터 중 일부를 다시 돌려받는 리퀘스트

Request Header

  • meta data (데이터에 대한 자체의 데이터)
  • 요청을 구분하기 위한 클라이언트에 대한 부가정보
  • 리퀘스트 헤더는 Map으로 관리하기 좋다 (key,value)

Request Body

  • only POST
  • content body, message body

Request의 메소드 종류

속성리턴타입설명
getCharacterEncoding()String클라이언트가 요청 정보를 전송할때 사용한 캐릭터의 인코딩
POST방식에서만 유효
getContentLength()long클라이언트가 전송한 요청 정보의 길이
전송된 데이터의 길이를 알 수 없는 경우 -1를 리턴
getContentType()String클라이언트가 요청정보를 전송하래 컨텐트의 타입을 구한다


server

  • <%=request.getLocalAddr() %>,<%=request.getLocalName() %>, <%=request.getLocalPort() %>

client

  • <%=request.getRemoteAddr() %>,<%=request.getRemoteHost() %>, <%=request.getRemotePort() %>
  • 결과

line URI

  • <%=request.getRequestURI() %>, <%=request.getMethod() %>, <%=request.getProtocol() %>
  • 결과

URL

  • <%=request.getRequestURL() %> <%=request.getQueryString() %>
  • 결과 http://localhost/webStudy01/02/requestDesc.jsp
    param=%ED%95%9C%EA%B8%80
  • getQueryString()
    • 질의문자열
    • URL뒤에 '?'뒤에 오는 문자열
    • ?sector1 & sector2...sectorN
    • sector = "param_name = param_value"
    • 하나의 sector '&'로 구분

요청 파라미터 확보

  • String getParameter(name)
  • String[] getParameterValues(name)
  • ★Map<String, String[]> getParameterMap()★
  • Enumeration<String> getParameterNames()

파라미터에 포함된 특수문자 처리

  • RFC 2396 규약에 따라 URL encoding 방식으로 인코딩 되어 전달됨.
HTTP Method특징파라미터 디코딩 방식
POSTMessage body를 통한 파라미터 전달request.stCharacterEncoding(String encoding)
GETRequest-LineRequest-URL을 통한 파라미터 전달
라인에 쿼리스트 형태로!
서버의 설정을 통한 디코딩 방식 설정 톰캣(server.xml)
URIEncoding="encodingName" or useBodyEncodingForURI = "true"

  • server폴더에 있는 sever.xml 63라인

숙제

  • model1 & model2 차이점
  • scope가 어떻게 사용되고 있었는지 (중프때)
  • request에 대한 도큐먼트 보기
profile
HI :)

0개의 댓글