2022.09.29

Jimin·2022년 9월 29일
0

비트캠프

목록 보기
48/60
post-thumbnail
  • 서블릿 프로그래밍
    • 필터 사용법
  • board-app 프로젝트 수행
      1. 로그인이 필요한 요청인 경우 로그인으로 유도하기: Filter 활용(계속)
      1. POST 방식으로 데이터 보내기: GET/POST 요청

필터 구동 원리

필터 만들기

필터 배치(deployment)

이런 필터가 있는데 이런 요청이 들어올 때 실행하려고 웹 app에 설정하는 것

⇒ 서블릿 컨테이너는 배치된 컴포넌트만 관리한다.

컴포넌트

  • 필터
  • 서블릿
  • 리스너

필터 배치 방법

  1. annotation
    내가 만든 필터 → 소스 가지고 있음 → @ 붙일 수 있음
@WebFilter(url)
  1. DD File(web.xml)
    남이 만든 필터 클래스 → 소스 없음 → @ 붙일 수 없음
<filter>----</filter>
<filter-mapping>----</filter-mapping>

init()

필터 객체 생성 후 즉시 호출된다.: 필터가 작업하는데 필요한 작업을 준비시키는 코드를 둔다.

doFilter()

요청이 들어올 때 호출된다.

destroy()

웹 애플리케이션이 멈출 때 호출된다.: init()에서 준비한 자원을 해제시키는 코드를 둔다.


필터로 로그인 검사하기1


필터로 로그인 검사하기2


068. POST 방식으로 데이터 보내기:
GET/POST 요청

  • GET/POST 요청의 특징 이해
  • GET 방식 요청 프로토콜 이해
  • POST 방식 요청 프로토콜 이해

HTTP GET 요청

  1. GET 요청은 message-body가 없다.
    ⇒ entity-header가 없다.
  2. Query String 형태로 데이터를 url에 포함해서 보낸다.

장점

URL에 데이터를 포함시킬 수 있다. ⇒ 특정 콘텐트를 조회하는 페이지를 가르킬 때 적절하다.

단점

  1. 텍스트만 가능하다. (binary를 보내기 힘들다.)
  2. 주소창의 노출 ⇒ 보안에 취약하다.
  3. 웹 브라우저는 URL을 캐시에 저장한다. ⇒ 보안에 매우 취약하다.

HTTP POST 요청

message-body가 있다.
entity- header: message-body로 보내는 데이터에 대한 정보를 갖는다.

장점

  1. message-body 영역에 붙여서 보냄
  2. 보내는 데이터의 크기에 제약이 없다.
  3. binary 데이터를 보낼 수 있다.
  4. url에 데이터가 포함되지 않기 때문에 직접 노출되는 것을 막을 수 있다. ⇒ 보안에 유리하다.
  5. 웹브라우저가 캐시하지 않는다. ⇒ 보안에 유리하다.

대용량의 데이터 전달에 적합하다. (게시글 등록, 변경 / 첨부파일 등록, 변경 / 로그인 데이터 전달)


HTTPServlet 클래스와 GET/POST 요청


1단계 - 로그인 요청을 POST 방식으로 변경한다.

  • /webapp/auth/form.jsp 변경
<form action='add' method="post">
  • com.bitcamp.board.controller.LoginController 클래스 변경
protected void doPost(HttpServletRequest request, HttpServletResponse response)
...

2단계 - 게시글 등록 및 변경도 POST 방식으로 바꾼다.

  • /webapp/board/form.jsp 변경
  • /webapp/board/detail.jsp 변경
  • com.bitcamp.board.controller.BoardAddController 클래스 변경
  • com.bitcamp.board.controller.BoardUpdateController 클래스 변경

Post 방식 요청에서 한글 깨지는 원리

POST / ------ HTTP/1.1
Host: localhost: 8888
.
.
.
title=ABC%EA%B0%80%EA%B0%EA%80%84 → URL Decoding

UTF-8 한글코드를 ASCII코드와 같은 방식으로 UTF-16 코드로 변환해서 문제(한글깨짐)가 발생함

해결책

URL 디코딩한 바이트를 UTF-16 코드로 변환하기 전에 원래 바이트가 어떤 characterset으로 인코딩 된 것인지 알려줘라! ⇒ request.serCharacterEncoding("UTF-8")
getParameter() 를 최초로 호출하기 전에 먼저 실행한다.
→ 단, 한번이라도 getParameter() 를 호출한 후에 실행하면 무효하다.

3단계 - 회원 등록 및 변경도 POST 방식으로 바꾼다.

  • /webapp/member/form.jsp 변경
  • /webapp/member/detail.jsp 변경
  • com.bitcamp.board.controller.MemberAddController 클래스 변경
  • com.bitcamp.board.controller.MemberUpdateController 클래스 변경
profile
https://github.com/Dingadung

0개의 댓글