servlet (15) 썸네일형 리스트형 서블릿의 파일 업로드 - 서블릿이 제공하는 Part 파일 업로드 소개 HTML Form을 통한 파일 업로드를 이해하려면 먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 합니다. HTML 폼 전송 방식 application/x-www-form-urlencoded multipart/form-data application/x-www-form-urlencoded 방식 웹 브라우저가 생성한 요청 HTTP 메시지 POST /save HTTP/1.1 Host: Iocalhost:8080 Content-Type: application/x-www-form-urlencoded name=as&age=20 application/x-www-form-urlencoded 방식은 HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법입니다. Form 태그에 별도의 enct.. [API 예외 처리] 스프링부트 기본 오류처리 방법 지금부터 API의 경우 어떻게 예외 처리를 하면 좋은지 알아보겠습니다. 먼저 API 예외 상황 서블릿 오류 페이지 방식을 사용해보겠습니다. 서블릿 오류 페이지로 방식 @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-page/404"); ErrorPage errorPage500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ER.. 서블릿으로 예외처리하기 - 필터, 인터셉터 그리고 DispatchType 예외 발생과 오류 페이지 요청 흐름 1. WAS(여기까지 전파) 컨트롤러(/errorpage/500) -> View 오류가 발생하면 오류 페이지를 출력하기 위해 WAS 내부에서 다시 한번 호출이 발생합니다. 이때 서버 내부에서 로그인 체크 기능을 담당하는 필터나 인터셉트가 한번 더 호출되는 것은 매우 비효율적입니다. 결국 클라이언트로부터 발생한 정상 요청인지, 아니면 오류 페이지를 출력하기 위한 내부 요청인지 구분할 수 있어야 합니다. 서블릿은 이런 문제를 해결하기 위해 DispatcherType이라는 추가 정보를 제공합니다. DispatcherType 필터는 이런 경우를 위해서 dispatcherTypes라는 옵션을 제공합니다. request.getDispatcherType() 오류 페이지에서 disp.. 서블릿으로 예외 처리하기 스프링이 아닌 순수 서블릿 컨테이너는 예외를 어떻게 처리하는지 알아보겠습니다. 그래야 스프링 개발 중에 문제가 발생했을 경우 어디를 수정해야 할지 알 수 있기 때문입니다. 서블릿은 다음 2가지 방식으로 예외 처리를 지원합니다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) 서블릿에서 예외 처리하는 방식 Exception(예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행됩니다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 스레드는 종료됩니다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 스레드가 할당되고, 서블릿 컨테이너 안.. [SpringBoot] 서블릿의 HttpSession을 사용해 세션 구현하기 HttpSession 소개 서블릿을 통해 HttpSession을 생성하면 다음과 같은 쿠키를 생성합니다. 쿠키 이름이 JSESSIONID이고, 값은 추정 불가능한 랜덤 값입니다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05 HttpSession 사용 먼저 세션의 키로 사용될 문자열을 정의합니다. public class SessionConst { public static final String LOGIN_MEMBER = "loginMember"; } @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpSer.. [SpringBoot] 세션 직접 만들어서 로그인 처리하기 스프링 부트에서 로그인을 처리하기 위해서는 서블릿이 지원하는 HttpSession을 사용하면 쉽게 구현이 가능합니다. 하지만 세션에 대한 이해도를 높이기 위해 직접 만들어보기로 하겠습니다. 이전에 웹브라우저와 서버 간에 로그인 상태를 유지하는 방법에 대해서 알아보겠습니다. 로그인 상태 유지하기 로그인 상태를 유지하기 위해 대표적으로 다음과 같은 방법이 있습니다. 1. 요청할 때 사용자 정보를 쿼리 파라미터로 전달하기 사용자 정보를 쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업입니다. 게다가 식별 가능한 사용자 정보를 쿼리 파라미터에 노출하는 것은 보안상 위험합니다. 2. 쿠키에 사용자 정보 담아서 사용하기 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달합.. 서블릿 필터 (Servlet Filter) 적용하기 이전 프로젝트를 참고해주세요. 서블릿 필터 (Servlet Filter) 적용하기 서블릿마다 공통되는 설정을(인코딩, 서블릿 접근 권한 체크) 서블릿마다 하는 것을 불편합니다. 모든 서블릿에서 많이 실행되는 설정들을 서블릿 이전에 필터에서 검사할 수 있습니다. 요청 순서는 다음과 같습니다. 클라이언트 → WAS → Filter → Servlet 응답 순서도 반대로 다음과 같습니다. Servlet → Filter → WAS → 클라이언트 필터를 적용하는 데 2가지 방법이 있습니다. 방법 1 @WebFilter("") 어노테이션 사용 @WebFilter("/*")를 통해 모든 요청에 대해 해당 필터를 통과하도록 설정합니다. chain.doFilter(request, response); 를 통해서 서블릿을 실.. Parameter, Form Data에 담은 한글이 깨지는 문제 해결 사용자가 한글을 서버로 보냈을 때 한글이 깨지는 문제가 발생합니다. 이유는 브라우저가 UTF-8로 인코딩해서 데이터를 서버로 보냈을 경우 톰캣은 기본적으로 ISO-8859-1 방식(한 글자 1바이트)으로 읽기 때문입니다. 깨진 문자를 다시 출력해서 브라우저에서 깨진 한글이 보이는 것입니다. 해결책 : 파라미터를 가져오기 전에 인코딩을 UTF-8로 설정하면 됩니다. request.setCharacterEncoding("UTF-8"); 다른 해결책은 톰캣의 server.xml에서 인코딩을 UTF-8로 설정하면 됩니다. 전체 소스 코드 Reg.java @WebServlet("/reg") public class Reg extends HttpServlet { @Override public void service .. 이전 1 2 다음