묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿의 개념을 확실하게 잡고 싶습니다.
제가 서블릿을 들으면서 요약했던 개념으로는클라이언트는 WAS에게 HTTP 요청을 보냄.WAS는 해당 HTTP 요청 메시지를 뜯어서 request 객체랑 response 객체를 생성.(response는 껍데기만 있고, request 안에는 요청 메시지의 바디 내용이 들어있다)request, response 객체를 해당 서블릿에게 넘긴다.서블릿은 프로세스 처리를 하고, 응답 결과를 response 객체에 넣어서 was에게 돌려준다.was는 response를 클라이언트에게 돌려준다.이렇게 정리를 했습니다.이게 제대로 학습한 개념이 맞는지 궁금합니다. 또 pdf 내용에서는HttpServletRequest 역할HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다. 라고 적혀있는데 HTTP 요청 메시지를 파싱하는 건 was 아닌가요?was가 파싱해서 request객체에 담아서 서블릿에 전달하는 것으로 알고 있었는데pdf는 서블릿이 http 메시지를 파싱해서 request에 담는다고 나와있어서 질문드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프론트 컨트롤러 3,4에서 세션 사용시
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]ControllerV3 or ControllerV4에서 세션 접근 희망시 문제"mvc프레임워크 만들기의 프론트 컨트롤러 버전 3,4" 처럼, request와 response 객체를 각각의 컨트롤러에 넘겨주지 않고 paramMap으로 넘겨주는 식으로 개발하게 되면 컨트롤러 안에서 세션 접근이 안 될 것으로 생각되는데 맞을까요?이런 경우 :1. 각각의 컨트롤러 자체에서 세션에 접근할 일이 없게 구성한다 (예: 세션 정보 확인 후 해당되면 별도의 값을 넘겨주는 로직 등을 컨트롤러 밖에서 진행)2. paramMap을 string Obejct 형식으로 구성하여 세션도 함께 넘겨준다.2.1 paramMap과 더불어 session객체를 넘겨준다.3. 필요한 경우 굳이 paramMap을 넘겨주는 것이 아닌 기존의 request, response 를 넘기는 방식으로 구성한다.등의 대안이 떠오르는데..상황마다 다르겠지만 혹시 이런 경우 일반적으로 어떤 식으로 개발을 진행하는지, 아니면 처음부터 별개의 방법이 있는 것인지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
servlet이 없으면 소켓프로그래밍을 개발자가 매번 직접 구현해야하는건가요?
serlvet이 하는중에tcp/ip연결대기소켓연결, 소켓종료..가 있었습니다. 위의 두가지 과정은 소켓프로그래밍할때 해봤던것같아서요..왜 소켓프로그래밍을 배우기만하고 실제 통신할때 안쓰나 궁금하기도 했었는데 그 과정을 서블릿이 알아서 해주는건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿이 컨트롤러 전반적인 역할이라고 보면 되나요 ??
컨트롤러역할 == 서블릿이담당 인가요 ??컨트롤러 자체를 서블릿이라고 봐도 될까용 이 둘 사이의 관계가 궁금합니다
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 컨테이너 / WAS 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.다른 분들이 질문하셨던 내용이지만 아직도 이해가 잘 되지 않아 잘문드립니다제가 알기로는 was, 웹 애플리케이션 서버는 웹 서버 + 서블릿 컨테이너로 구성되어 있다고 알고 있습니다.또, 한편으로는 톰캣처럼 서블릿을 지원하는 was를 서블릿 컨테이너라고 알고 있습니다.그렇다면 결국 was와 서블릿 컨테이너의 의미가 중복되는 것 아닌가요?was는 웹 서버와 서블릿 컨테이너로 구성되어 있고, 이 중 서블릿 컨테이너는 또 서블릿을 지원하는 was라는 건가? 싶어서 질문드립니다.그리고 영한 님이 주신 자료에서는 웹 애플리케이션 구성이 웹 애플리케이션 서버와 서블릿 컨테이너로 나뉘어 있는데, 아래쪽 웹 애플리케이션 서버를 웹 서버로 수정하여 인식하면 될까요?마지막으로 전체적인 흐름을 본다고 할 때1) 사용자가 localhost:8080/hello 호출2) 서블릿 컨테이너에서 request, response 객체를 만들어줌 (그림에는 아래쪽 웹 애플리케이션 서버에서 만들어지는데, 웹 애플리케이션 서버를 웹 서버로 고친다면 웹 서버에서 만들어지는 건가요..?)3) 서블릿 컨테이너 안에 있는 쓰레드가 request, response를 인자로 하여 서블릿 객체 호출4) request 객체를 이용해 로직 수행5) 응답 결과를 response에 담고 서블릿 컨테이너에 전달6) 서블릿 컨테이너가 응답 메시지 생성 후 클라이언트에게 전달이 흐름으로 이해하면 될 지 궁금합니다..😭
-
미해결
Whitelabel Error Page 404 에러가 납니다 해결 부탁드립니다
[스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술] 강의를 듣고 있고 servlet 관련 사항을 공부 중입니다. 선생님은 맥OS를 이용하고 저는 윈도우여서 이클립스와 롬북, 스프링부트를 자체적으로 설치하여 공부 하였습니다. 19강 HttpServletResponse - 기본 사용법 20강 HttpServletResponse - HTTP 응답 데이터-단순 텍스트, HTML 공부 중입니다. 선생님이 입력한 사항을 동일하게 입력 후 실행 하였으나(복사도 해보았습니다) 실행되지 않고 오류만 발생됩니다. 화면을 못찾는다고 하는데 선생님 화면에서는 나오고 있습니다. 오류좀 해결 부탁드립니다. -- 오류로그 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Jun 22 18:26:56 KST 2022 There was an unexpected error (type=Not Found, status=404). -- 문제예제 @WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html") public class ResponseHtmlServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Content-Type: text/html;charset=utf-8 response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter writer = response.getWriter(); writer.println("<html>"); writer.println("<body>"); writer.println(" <div>안녕?</div>"); writer.println("</body>"); writer.println("</html>"); } }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 컨테이너, was가 헷갈립니다.
안녕하세요 강의 잘 듣고 있습니다. 그런데 WAS,서블릿 컨테이너, 서블릿 객체가 헷갈려서 질문드립니다. 강의 중, 서블릿 컨테이너는 톰캣처럼 서블릿을 지원하는 WAS라고 하셨습니다. 더불어, 다른 학생의 질문에 대한 영한님의 답변 중 "request 객체를 만들어서 서블릿에 넘겨주는 것은 서블릿 컨테이너의 역할입니다. response도 마찬가지로 서블릿 컨테이너가 합니다. 그리고 서블릿 컨테이너가 서블릿을 호출해주는 것이지요." 라고 하셨습니다. 그런데 그림에서는 request,response 객체를 생성하고 서블릿 객체를 호출하는 "웹 애플리케이션 서버(WAS)"와 서블릿 객체를 생성하고 관리하는 "서블릿 컨테이너"로 나뉘어져 있네요. 그림에서 "WAS"와 "서블릿 컨테이너"가 사실 같은 큰 서블릿 컨테이너인데 역할에 따라 구분해놓으신건가요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
2 hello-서블릿에서 웹 브라우져에 내용이 보이지 않음.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super.service(request, response); System.out.println("Helloservlet.service"); System.out.println("request = " + request); System.out.println("response = " + response); String username = request.getParameter("username"); System.out.println("username = " + username); response.setContentType("text/plain"); response.setCharacterEncoding("utf-8"); response.getWriter().write("hello " + username );} 위와 같이 작성하였으며, 콘솔에는 아래와 같이 보이나. Helloservlet.service request = org.apache.catalina.connector.RequestFacade@3561983a response = org.apache.catalina.connector.ResponseFacade@5c60947 username = "scmoon" 웹브라우져에서는 오류가 납니다. Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Jul 20 19:02:15 KST 2021 There was an unexpected error (type=Method Not Allowed, status=405).
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Hello 서블릿 강의에서 질문있습니다.
안녕하세요. 이제 강의 결제해서 강의 시청 중에 뭔가 찝찝하게 애매하게 잘 안되서 질문드립니다. Hello 서블릿 강의에서 리퀘스트 userParameter 로 url에 유저네임 영어로 입력했을 때 인텔리제이 콘솔창에 영어로 입력한 유저네임은 정상적으로 들어오나, 한글로 입력하면 문자가 다이아 특수문자에 물음표? ( �) 이렇게 나옵니다. 분명 setContentType, 캐릭터인코딩 utf-8, getWriter 까지 다 맞게 입력했습니다. 한글만 안 나옵니다. 왜 그럴까요 ㅠ 그리고 Run Server 플레이 버튼을 누르면 이게 게속 안 멈추고 무한반복 시계가 돌아갑니다/. 다 돌아가고 실행 다 되면 로딩 중 시계가 다 멈춰야 하는데, 계속 돌아갑니다. 그리고 application.properties에 logging.level.org.apache.coyote.http11=debug 라고 입력 정확히 했는데 콘솔창에 인코딩 된 정보 패스,, 헤더정보들이 강의에서 본 것처럼 떠야하는데 뜨질 않습니다ㅠㅜ 인텔리제이 2021.01 버젼 쓰고있습니다.