inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

스프링 MVC1편 섹션3 질문

193

박민성

작성한 질문수 31

0

서블릿 객체랑 서블릿 내장객체는 다르다는걸 알고있습니다. 서블릿 객체는 싱글톤으로 관리되며 서블릿 내장객체는 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);

 

  1. 여기서 질문인게 서블릿내장객체인 request와 response가 요청이있을때마다 새롭게 객체를 만드는데 서블릿객체는 단 하나의 인스턴스를 만들어서 재사용한다고 알고있습니다. 위에코드에도 @WebServlet가 있고 아래에도 @WebServlet가 있는데 request와 response를 윕에서 받기위한 url이라고 생각이듭니다만, 어떻게 request에서 넘겨주면 response에서 응답을 줄수있는거죠? 서블릿은 싱글톤이라고 알고있었는데 url은 따로따로 등록이되는건가요?

  2. 웹에서 실제넘겨주면 username과 age를 받는부분의 url이 /servlet/members/new-form인데 이건 request에 대한거 아닌가요? 저기서요청을하면 이제 응답을 받는부분이 /servlet/members/save로 되어야할거같은데 뭔가 url이 바뀐거같아서요

항상 답변남겨주셔서 감사합니다

 

 

 

spring mvc

답변 2

0

나무늘보

안녕하세요. 박민성님, 공식 서포터즈 코즈위버입니다.

  1. 서블릿 객체는 MemberFormServlet, MemberSaveServlet 입니다. 이 두 객체는 앱 실행시 인스턴스를 자동으로 생성하며, 이를 싱글턴으로 관리합니다. HttpServletRequest, HttpServletResponse는 클라이언트 요청이 있을 때마다 새롭게 생성합니다. 그래서 그 인스턴스를 각 요청(URL)에 맞는 service() 메서드로 전달합니다. request, response 객체는 서블릿 객체 밖에서 생성하므로, 서블릿 객체 자체는 싱글턴을 유지할 수 있습니다.

  2. 우선 클라이언트는 /servlet/members/new-form 으로 접속합니다. 그 후 폼 양식을 작성하여 저장버튼을 누를텐데요. 이 때 폼의 속성을 살펴보시면 action=/servlet/members/save 이 있는데요, 사용자가 '저장'버튼을 누른다면 폼 양식을 action 의 경로로 전달한다는 의미입니다. (action 을 생략할 수도 있는데 이 때에는 자기자신에게 폼 데이터를 전달한다는 의미입니다. 즉, new-form -> new-form 으로 데이터를 전달합니다)

이렇게 전송한 폼 양식은 request.getParameter("폼양식이름"); 의 형태로 받아 사용할 수 있습니다.

감사합니다.

2

박민성

1.클라이언트가 입력을 주게되면 Dispatcher에서 Handler를 Mapping하게되고 그에맞는 Controller찾게되면 Controller가 비즈니스로직을 실행하게되는데 그전에 Dispatcher interceptor이 먼저 생성여부를 판단하고 생성되어있으면 반환 그게아니라면 생성이라고 알고있는데 맞나요?

2. MemberFormServlet, MemberSaveServlet이 서블릿객체로 등록이되면 만약 클라이언트가 요청을줬을때 HttpServletRequest, HttpServletResponse는 각 로직마다 선언이되어있지만 활용은 안되어있는경우를 봤습니다. 여기서 객체마다 request와 response를 찾아서 서버가 처리하게되고 그 결과값을 View로 넘겨준다고 이해했는데 맞을까요?

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

강의 수강 중 서블릿 객체와 서블릿 내장 객체에 대한 이해와 request와 response의 관계, 서블릿의 싱글톤 관리 방법에 대한 궁금증을 갖고 계신 것 같습니다. 관련 내용에 대해 다룬 강의 내용이나 이에 대한 질의응답이 있는지 확인하시면 도움이 될 것 같습니다.

관련된 질문으로 “서블릿 싱글톤”에 대한 질문과 답변이 있으니, 해당 내용을 참고하시면 도움이 될 것 같습니다. 또한 이전 질문 중 “request.setAttribute 관련하여 질문 드립니다.“와 “hello서블릿 강의 중 - response 객체가 예제와 다르게 나오는 경우…“의 답변도 참고하실 수 있습니다.

위의 링크를 참조하셔서 관련 내용을 확인하시면 궁금증이 해소될 수 있을 것입니다. 추가적인 질문이 있으시면 질문&답변 게시판을 통해 질문을 남겨 주세요.

servlet과 container에 대한 질문입니다

0

25

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

64

1

jsp 의존성 수정 요청

0

78

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

78

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

95

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

76

2