30%
69,300원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인터페이스의 사용 목적과 객체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]ControllerV1 controller = controllerMap.get(requestURI);key 에 매핑되어있는 구체적 형태의 컨트롤러를 ControllerV1 타입으로 controller 에 담고해당 컨트롤러로 이동하는 메서드가 controller.process(request, response) 라면 왜 controllerMap.get(requestURI).process(request, response) 가 될 수 없는지 궁금합니다.이미 new로 인스턴스가 생성된 상황일텐데 왜 ControllerV1 타입으로 옮겨담는건가요?MemberFormControllerV1.java 가 implements ControllerV1 를 상속받으니 반드시 ControllerV1 타입으로 만들어줘야 하는것인가요?여기서 인터페이스의 사용 목적은 중복되는 코드를 줄이기 위함인가요? 이해가 부족해서 죄송합니다 ㅠ 인터페이스의 사용목적이 이해가 잘 가지 않습니다 ㅠ
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
import java.lang.reflect.Member; 가 계속 자동 생성돼요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 계속 getId와 setId가 안되어서 잘 살펴보니 제가 만든 hello.serlvet.domain.member import 되지않고, java.lang.reflect.Member;이라는 것이 import 되어있어서 오류가 나는 것 같습니다 ㅠㅠ그래서 지우려고 하는데 지우면 계속 자동으로 import문이 생성되고, save 메소드를 지우고 import java.lang.reflect.Member문을 지우면 지워지기는 하는데 import hello.servlet.domain.*; 부분이 활성화가 안되네요..ㅜㅜ 어떻게 해야하나요
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
html input 태그에 readonly 속성 넣었을 때 배경이 회색으로 바뀌는 이유가 무엇인가요?
안녕하세요.섹션7 웹 페이지 만들기 강의 보면서 따라하던 중이었는데, 제 거랑 강의 영상이랑 모양이 다른 부분을 발견했습니다.강의 영상 캡쳐입니다.상품 상세 페이지이고, readonly 속성이 적용되어 있어 input의 배경색이 회색으로 되어있습니다.해당 부분에 사용된 html 코드입니다.<div class="py-5 text-center"> <h2>상품 상세</h2> </div> <div> <label for="itemId">상품 ID</label> <input type="text" id="itemId" name="itemId" class="form-control" value="1" th:value="${item.id}" readonly> </div> <div> <label for="itemName">상품명</label> <input type="text" id="itemName" name="itemName" class="form-control" value="상품A" th:value="${item.itemName}" readonly> </div> <div> <label for="price">가격</label> <input type="text" id="price" name="price" class="form-control" value="10000" th:value="${item.price}" readonly> </div> <div> <label for="quantity">수량</label> <input type="text" id="quantity" name="quantity" class="form-control" value="10" th:value="${item.quantity}" readonly> </div>input 태그 안에 readonly 포함되어 있습니다. 이건 제 pc에서 같은 코드로 실행한 화면입니다.readonly 적용되어 있어서 수정이 불가능하지만, 배경색은 회색이 아니라 흰색입니다. 브라우저 문제인가 싶어서 크롬, 엣지, 파이어폭스로 시도해봤지만 전부 같은 화면이 나옵니다.버전 문제인가 싶기도 한데, 검색해도 관련 내용이 변경되었다는 글을 찾지 못했습니다.input[readonly] { background-color: gray; }이렇게 css를 적용하면 된다는 글은 찾았습니다만, 강의에선 이런 코드를 사용한 적이 없습니다.css와 관련된 내용은 부트스트랩 뿐인데, 그렇다면 부트스트랩이 배경색을 변경하는 건가 싶어서 제거해보았지만 배경색은 마찬가지로 흰색입니다.강의 코드와 별개로 그냥 임의의 html 파일을 만들고, input 태그를 생성해서 테스트해봤지만 결과는 같았습니다. css없이 강의화면처럼 배경색을 회색으로 바꾸려면 readonly 대신 disabled를 사용해야 하더군요. 이게 강의 내용상 중요한 부분은 아니지만, 원인이 궁금해서 질문 남깁니다.
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
테스트 오류
Execution failed for task ':test'.> Cannot access output property 'binaryResultsDirectory' of task ':test'. Accessing unreadable inputs or outputs is not supported. Declare the task as untracked by using Task.doNotTrackState(). For more information, please refer to https://docs.gradle.org/8.5/userguide/incremental_build.html#disable-state-tracking in the Gradle documentation. > java.io.IOException: Cannot snapshot C:\Users\kyoun\OneDrive\���� ȭ��\����\project\servlet\build\test-results\test\binary\output.bin: not a regular file* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.BUILD FAILED in 1s4 actionable tasks: 1 executed, 3 up-to-date 섹션3 첫번째 강의 테스트 코드 작성하는데 다음과 같은 오류가 뜹니다. 어떻게 해결해야 하나요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
consumes, produces 속성 질문
consumes 속성은 클라이언트가 요청한 헤더를 제한하는 거고, produces 속성은 클라이언트에게 응답할 만들어진 응답의 헤더를 제한하는 것인가요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@Controller @RestController 차이
@Controller는 반환 값이 String이면 뷰 이름이 반환되는 것으로 인식하고 뷰를 찾고 랜더링되고, @RestController는 뷰를 찾아 렌더링하지 않고 메시지 바디에 바로 입력되서 클라이언트에게 보내진다라고 이해했습니다. 그렇다면 @RestController사용하게 되면, 주로 언급하신 Spring MVC 플로우(디스패처 서블릿을 중간에 놓고, 핸들러 매핑, 핸들러 어댑터, 뷰 리졸버 등등)에서 뷰에 관련한 플로우가 생략되는 거라고 보면 될까요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ControllerV4HandlerAdapter 클래스 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이 코드에서 이 부분을 보면강사님께서 "모델이랑 뷰를 셋팅한다"라는 식으로 말씀하셨습니다.이때, 뷰를 셋팅한다 => 컨트롤러에 맞는 url을 넘겨줘서 웹 페이지를 보여준다 라고 이해를 했습니다.하지만, "모델을 셋팅한다"라는 의미는 무슨 말씀이신지 잘 이해가 안됩니다. 설명 부탁드립니다
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jsp 라이브러리 적용 안되는 현상
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]라이브러리 다운로드 로딩창도 확인하고, 다운로드 받아진 것으로 보이는데 jsp 파일이 생성되지 않습니다.new 로 생성할 때 jsp 가 보이지 않아서 file 로 new-form.jsp 를 입력해서 만들었는데도 jsp가 생성되지 않습니다. (강사님과 아이콘도 다르고 jsp 내부의 태그가 삽입되지 않은 빈 파일이 열립니다.)인텔리제이 무료버전이라 이런걸까요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ControllerV4가 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요."MemberFormControllerV4에서 모델을 생성할 필요가 없다. 왜냐하면 프론트 컨트롤러에서 모델을 다 만들어서 넘겨준다." 라고 강사님께서 말씀하셨습니다. 그 이후에 ,FrontControllerServletV4에서 아래와 같이 작성하면서 model을 넘겨줬습니다.질문 1.이때, paramMap이랑 model이 의미하는게 무엇인가요?질문 2.또한, 강사님께서 말씀하신 모델을 각 컨트롤러에서 만들지 않고 FrontControllerServletV4로 넘겨주는 이유는 무엇인가요? 그리고 여기서는 "ModelView를 따로 만들어 줄 필요는 없고 파라미터에서 username과 age를 받아서 그냥 member에 넣어주면 된다" 라고 말씀하셨습니다. 질문 3"ModelView를 따로 만들어 줄 필요는 없고"가 무슨 의미인지 잘 이해가 안됩니다.Model을 FrontControllerServletV4에서 만들어 넘겨주기 때문에 model을 따로 생성하지 않아도 되고, view를 return해준다라고 이해하면 옳게 이해한 것인가요? 우선 저는 아래와 같이 이해를 했습니다.1.컨트롤러 조회 => 어떤 비지니스 로직을 수행할 것인지에 따라 Controller 선택2.호출(paramMap,model) => 선택된 Controller에게 paramMap(=url)과 model(= DB, 데이터를 저장해두는 저장소 객체)를 넘겨주고, 비지니스 로직을 수행함3.ViewName 반환 => 비지니스 로직을 수행하고, 보여줄 웹 페이지 화면의 url의 논리 주소를 넘겨줌4,5,6번 => viewName에 맵핑이 되는 view를 반환하고, model(데이터)를 이용하여 웹 페이지 화면에 보여줌
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SpringMemberControllerV3 질문입니다!
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); ModelAndView mv = new ModelAndView("save-result"); //데이터를 직접 view에 전달하는방식 // mv.getModel().put("member", member); mv.addObject("member", member); return mv; } @GetMapping public String members(Model model) { List<Member> members = memberRepository.findAll(); model.addAttribute("members", members); return "members"; } } 위 2개의 코드는 결국 HandlerAdapter에 역할을 수행하여 반환값을 돌려받는 값의 차이가 있다고 생각합니다. 첫번째코드는 ModelandView로 반환이 되는거고 두번째 코드는 String으로 반환이 된다는점에서 차이가있다고 생각합니다. 여기서 제가 질문인사항이 위 2개의 코드를 호출한 코드가 각각메서드가 다르게 설정이 되어있어야 맞다고 생각합니다. viewname을 직접반환한거와 ModelView를반환한거에서 차이가있다고 생각들어 dispatcherservlet를 찾아봤는데 rendering에 대한 코드는 찾아볼수있었습니다만 저 두코드를 실행시킨 코드는 찾아볼수가 없었는지 아니면 제가 코드를 읽을수있는 능력이부족햇는지 잘모르겠습니다저번섹션부터 코드를 하나하나 분석해보니까 저 두코드를 실행시킨 부분도 궁금해서 제 능력으로는 찾아볼수가없어서 어디부분에 있는지 알려주시면 감사하겠습니다
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
modelview에 대해서 잘 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.해당 교재에는 이렇게 나와있습니다.이때, modelView 클래스의 역할은1.데이터(멤버)에 접근(데이터 추가,삭제 그리고 수정등)2.View 이름(이동해야하는 url)을 전달이렇게 이해하면 옳게 이해한 것이 맞나요?
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ParamMap과 model 질문
System.out.println("FrontControllerServeltV4.service"); String requestURI = request.getRequestURI(); ControllerV4 controller = controllerV4Map.get(requestURI); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } Map<String, String> paramMap = createParamMap(request); Map<String, Object> model = new HashMap<>(); // 추가된부분 String viewName = controller.process(paramMap, model); MyView view = viewResolver(viewName); view.render(model, request, response); } private static MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } private static Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName ->paramMap.put(paramName, request.getParameter(paramName))); return paramMap; } public class ModelView { private String viewName; private Map<String, Object> model = new HashMap<>(); public ModelView(String viewName) { this.viewName = viewName; } public String getViewName() { return viewName; } public void setViewName(String viewName) { this.viewName = viewName; } public Map<String, Object> getModel() { return model; } public void setModel(Map<String, Object> model) { this.model = model; } } Map<String, Object> model = new HashMap<>(); 가 언제 생성되어있는지 알고싶어서 인프런 AI답변을 봤는데해당 내용에서 ModelView의 model 필드는 ModelView 클래스의 생성자에서 생성되며, Map<String, String> paramMap을 사용하여 요청 파라미터를 매핑하고 컨트롤러에 전달하는 방식에 대해 설명하고 있습니다. 이렇게 답변이 왔습니다. 저기서 호출한적이 없는거같은데 어떻게 매핑이된거죠? 두번째로, 첫번째 코드에서 Map<String, Object> model = new HashMap<>(); 부분이 두번째 코드와 똑같은 코드로작성되어있는데 다른코드맞는거같은데 왜 선언되어있는지 알수있을까요? 첫번째 질문과 두번째 질문이 많이 헷갈리네요.. 왜 같은지알수있을까요? 그리고 선언되어있는이유도요!
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
V3 Modelview와 Map<String, String> 질문
public ModelView process(Map<String, String> paramMap) { String username = paramMap.get("username"); int age = Integer.parseInt(paramMap.get("age")); Member member = new Member(username, age); memberRepository.save(member); ModelView mv = new ModelView("save-result"); mv.getModel().put("member", member); return mv;public class ModelView { private String viewName; private Map<String, Object> model = new HashMap<>(); public ModelView(String viewName) { this.viewName = viewName; } public String getViewName() { return viewName; } public void setViewName(String viewName) { this.viewName = viewName; } public Map<String, Object> getModel() { return model; } public void setModel(Map<String, Object> model) { this.model = model; }1.Modelview에서 model이 언제생성된거죠..? getmodel을 해주려면 먼저 선언이 되어있는 model을 가지고 반환해줘야하는데 언제선언이 된거죠? Map<String, String> paramMap = createParamMap(request); ModelView mv = controller.process(paramMap); String viewName = mv.getViewName(); //논리이름 new-form MyView view = viewResolver(viewName); view.render(mv.getModel(), request, response); } private static MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } private static Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName ->paramMap.put(paramName, request.getParameter(paramName))); return paramMap; } } Map<String, String> createMap에서 .forEachRemaining(paramName ->paramMap.put(paramName, request.getParameter(paramName))); 여기를 보면 request.getParmeter(paramName)로 paramName에대한 Value를 가지고오고있는데 여기서 말하는 Value는 age인데 int로 선언하는게 맞지않나요?항상 답변감사드립니다
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프로젝트 실행 오류
다음과 같은 오류가 뜨는데 어느 부분을 고쳐줘야 할까요?javax 관련 패키지는 없어보입니다
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
save() 테스트관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]savedMember 에는 id, username, age 가 세개 모두 입력된 객체가 findMember 에는 username 과 age 만 가지고 있는 Member 타입 객체가 생성되는 것이 아닌가요?.get() 메서드 설명 읽어보면 value 를 반환한다고 되어있고.save() 메서드에서는 시퀀스로 id 값까지 채워넣은 객체를 반환하고 있는걸로 보여서욤저 @21fd... 는 객체 주소인거지요? 가져오는 데이터가id, username, age / username, age 이렇게 다르지만같은 주소값에 저장되어있다 라는걸 확인하는건가요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
코드에러를 어떻게 잡아야할까요?
https://drive.google.com/file/d/14AzHAHA4ulJ_F47TmZHwz1U9AP3uyIbw/view?usp=sharing 1.MVC와,Front-controller에서 회원정보를 입력하면 위에경로가 상대경로로지정된 save로 넘어가지않고404로 뜹니다..
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
뷰에서 request.getAttribute()를 사용할 수 있는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); // Model에 데이터를 보관해야 한다. request.setAttribute("member", member); String viewPath = "/WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } } 여기서 request.setAttribute("member", member);를 통해 Model에 데이터를 보관하게 되고, 이를 뷰에서 사용할 수 있잖아요.뷰에서 request.getAttribute()를 사용할 수 있는 이유는 dispatcher.forward(request, response); 이 코드에서 request를 인자값으로 넘겼기 때문인가요? 아니면 이거 때문이 아니라 별개의 이유 때문인가요? 정리하면, 컨트롤러에서 request.setAttribute("member", member);를 통해 Model에 데이터를 보관하고,뷰에서 request.getAttribute()를 통해 그 데이터를 받을 수 있는 이유가 바로dispatcher.forward(request, response);에서 request를 인자값으로 넘겼기 때문이 맞는지, 아니면 이 코드랑 별개의 다른 이유가 존재하는지 궁금합니다.
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
상대경로 질문
Spring MVC-1편에서 섹션3. 서블릿,MVC패턴에서 상대 경로 질문입니다.<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><form action="/jsp/members/save.jsp" method="post">username: <input type="text" name="username" />age: <input type="text" name="age" /><button type="submit">전송</button></form></body> 1.이 코드로 계속 왔다갔다할수있으면서 save되는걸 보신다고하셨는데 이때 상대참조이야기도 나오더라구요!action="/jsp/members/save.jsp" 이부분에서 "/jsp/members/save.jsp" 이부분을 웹에있는 action에 준다는거같은데 맞을까요? 그리고 action="/jsp/members/save.jsp" 이부분이 상대참조가 맞는지도 궁금합니다.!!
- 해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
response, request
혹시 제가 이해한게 맞을까요?@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8");@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save") public class MemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("MemberSaveServlet.service"); String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); // getParameter는 항상 문자로 가저욘다! Member member = new Member(username, age); memberRepository.save(member); 여기서 /servlet/members/save와 /servlet/members/news-form을 서블릿 컨테이너가 서블릿객체로 등록한다. request와 response는 서블릿내장객체로써 Servlet의 요청과 응답을 받고 보낼수있는 역할을 수행한다. 동작방법은 request로 요청을 먼저받아야하는데 서블릿컨테이너에서 request를 찾아보니 /servlet/members/save에 있었고 여기서 요청을받고나서 response를 찾아보니 /servlet/members/new-form에 response가 있어서 서로 연결할수있는것이다 동작방법이 저게맞을까요?
- 미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC1편 섹션3 질문
서블릿 객체랑 서블릿 내장객체는 다르다는걸 알고있습니다. 서블릿 객체는 싱글톤으로 관리되며 서블릿 내장객체는 reponse, request가 요청이 있을때마다 새롭게 생성되며 독립적으로 관리되어야한다는것까지 이해했습니다. @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8");위에 있는 코드는 response이고 아래코드는 request입니다@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save") public class MemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("MemberSaveServlet.service"); String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); // getParameter는 항상 문자로 가저욘다! Member member = new Member(username, age); memberRepository.save(member); 여기서 질문인게 서블릿내장객체인 request와 response가 요청이있을때마다 새롭게 객체를 만드는데 서블릿객체는 단 하나의 인스턴스를 만들어서 재사용한다고 알고있습니다. 위에코드에도 @WebServlet가 있고 아래에도 @WebServlet가 있는데 request와 response를 윕에서 받기위한 url이라고 생각이듭니다만, 어떻게 request에서 넘겨주면 response에서 응답을 줄수있는거죠? 서블릿은 싱글톤이라고 알고있었는데 url은 따로따로 등록이되는건가요?웹에서 실제넘겨주면 username과 age를 받는부분의 url이 /servlet/members/new-form인데 이건 request에 대한거 아닌가요? 저기서요청을하면 이제 응답을 받는부분이 /servlet/members/save로 되어야할거같은데 뭔가 url이 바뀐거같아서요항상 답변남겨주셔서 감사합니다