6월 29일 화요일 request, response, URL 패턴, URL 매핑 ㅇ

@_@·2021년 6월 28일
0

JSP&Servlet

목록 보기
3/6

<목차>
ㅇ 서블릿 살펴보기
ㅇ request 객체의 getRemoteHost() 메소드
ㅇ response 객체의 getWriter() 메소드
ㅇ URL 패턴
ㅇ URL 매핑




ㅇ 서블릿 살펴보기

  • HttpServlet을 상속받는다고 했지?!
  • 자바 할 때는 항상 메인 체크 했듯이 서블릿은 서비스를 체크
  • 서비스는 리퀘스트와 리스폰스 매개변수 가지고 있어
  • request : 요청에 관련된 정보들을 담고 있는 객체
  • response : 사용자에게 정보를 응답해줄 때 사용하는 객체
  • 비어 있는데 요청과 응답이 올 때마다 채워지는 객체라고 생각하면 돼



ㅇ request 객체의 getRemoteHost() 메소드

  • request.getRemoteHost();
  • ip주소 받아오는 메소드
  • 반환 타입이 스트링이니 스트링변수 ip 에 담아주자
  • 크롬으로 보자
  • 실행하면 빈 창 뜨는 거 맞아, 콘솔로 프린트하도록 출력문 썼으니까
  • 0:0:0:0:0:0:0:1은 IPv6 버전으로 나오는거야
  • 로컬호스트 : 포트번호/컨텍스트루트이름/서블릿이름
  • 내 ip 찾기 : cmd 켜서 idconfig 치기
    localhost 자리에 내 아이피 넣어도 같아
  • 쌤 아이피 넣으면 => 내가 거기 접속하고, 쌤 콘솔창에 들어온 아이피 주소들 출력 돼
  • 나에게 들어오는 아이피를 알 수 있어



ㅇ response 객체의 getWriter() 메소드

  • response는 응답 해주는 객체 => getWriter()로 text를 웹에 출력하게 할 거야
  • html은 애초에 언어 자체가 웹으로 출력할 수 있게 고안된 언어라서 따로 진행하지 않아도 되지만
    서블릿에서는 웹에 출력하려면 response에 있는 getWriter()를 사용해서 진행해 줘야 해
  • client에게 데이터를 보여주기 위한 통로 => PrintWriter 객체
  • 꼭 임포트 하기
  • 콘솔 창 내부에 출력하는 방식(syso)은 개발자들이 하는 방식이고, 외부에 보여주려면 PrintWriter 객체에 print() 사용
  • 결론 : 외부 웹에 ip를 응답하겠다. => out.print(ip);


ㅇ 인코딩

  • 인코딩을 해야 한글도 가능해져
  • 이클립스 환경구축 자체가 euc-kr로 되어 있어서 우리는 euc-kr로 진행
    (보통 utf-8을 많이 사용함)
    • euc-kr : 하나의 글자 팩을 가지고 있음
      • 강 을 강 통채로 인식해
      • 떄 뷁 이렇게 쓰면 오류나
    • utf-8은 조합형
      • ㄱ ㅏ ㅇ
      • 모든 글자 만들 수 있어서 글자 깨질 일이 없어
  • 사용자에게 어떤 형태로 응답을 할 것인지 지정 (꼭 해줄 필요는 없지만 성능 좋아짐)
    response.setContentType("text/html; charset=euc-kr");
  • response 사용하기 전에 인코딩 진행해야 해 => 인코딩은 항상 앞에 적어둬야 해!!!
  • text/html 이므로 html태그 혼합
    • 만약 문장 그대~로 출력하려 한다면 text/plain
  • 예)
  • 예) 이미지도 담을 수 있음 (웹컨텐트에 이미지 넣어두고)


ㅇ ip로 접근 제한

  • 특정 아이피만 접근할 수 있게 코드 작성



ㅇ URL 패턴

  • 전체 : URL
  • 서블렛부터 : URI
  • contextPath : 프로그램 관리하는 애 이름 (아까 프로젝트 만들 때 썼던 컨텍스트루트)
  • servletPath : 서블릿의 경로
  • ? : 구분 문자, 물음표(?) 뒤는 데이터
  • queryString
    • 페이지를 이동 시키면서 원하는 데이터를 넘겨줄 때 쓰는 방식
    • num이라는 이름으로 123을 보내겠다.
    • &로 데이터 여러 개 보내줄 수 있어



ㅇ URL 매핑

  • 맵핑이 없다면
    • 패키지이름, 클래스 이름 다 노출 => 파일의 위치가 알려지니까 쉽게 해킹. 쉽게 접근 => 보안 취약
    • 폴더안의 폴더안의 폴더 ~ 이러면 url 경로 엄청 길어질 거야 => 경로 길고 불편
  • 그것을 대신할 만한 별명을 사용한다 생각하면 돼
  • 매핑 위치 : @webServlet("/ex01_request") 안에 클래스 이름 있었을거야. 이 부분을 수정
  • 예전에는 톰캣서버/web.xml에 들어가서 지정해줬어야 했음
  • 아니면 다른 방법으로는 servlet 만들 때 next 눌러서 mapping 수정해주는 부분 있음. 원래 매핑 삭제하고 새 매핑 추가하면 돼



ㅇ 한 번 정리하면



profile
STEP BY STEP

0개의 댓글