작성
·
143
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);
여기서 질문인게 서블릿내장객체인 request와 response가 요청이있을때마다 새롭게 객체를 만드는데 서블릿객체는 단 하나의 인스턴스를 만들어서 재사용한다고 알고있습니다. 위에코드에도 @WebServlet가 있고 아래에도 @WebServlet가 있는데 request와 response를 윕에서 받기위한 url이라고 생각이듭니다만, 어떻게 request에서 넘겨주면 response에서 응답을 줄수있는거죠? 서블릿은 싱글톤이라고 알고있었는데 url은 따로따로 등록이되는건가요?
웹에서 실제넘겨주면 username과 age를 받는부분의 url이 /servlet/members/new-form인데 이건 request에 대한거 아닌가요? 저기서요청을하면 이제 응답을 받는부분이 /servlet/members/save로 되어야할거같은데 뭔가 url이 바뀐거같아서요
항상 답변남겨주셔서 감사합니다
답변 2
0
안녕하세요. 박민성님, 공식 서포터즈 코즈위버입니다.
서블릿 객체는 MemberFormServlet, MemberSaveServlet 입니다. 이 두 객체는 앱 실행시 인스턴스를 자동으로 생성하며, 이를 싱글턴으로 관리합니다. HttpServletRequest, HttpServletResponse는 클라이언트 요청이 있을 때마다 새롭게 생성합니다. 그래서 그 인스턴스를 각 요청(URL)에 맞는 service() 메서드로 전달합니다. request, response 객체는 서블릿 객체 밖에서 생성하므로, 서블릿 객체 자체는 싱글턴을 유지할 수 있습니다.
우선 클라이언트는 /servlet/members/new-form 으로 접속합니다. 그 후 폼 양식을 작성하여 저장버튼을 누를텐데요. 이 때 폼의 속성을 살펴보시면 action=/servlet/members/save 이 있는데요, 사용자가 '저장'버튼을 누른다면 폼 양식을 action 의 경로로 전달한다는 의미입니다. (action 을 생략할 수도 있는데 이 때에는 자기자신에게 폼 데이터를 전달한다는 의미입니다. 즉, new-form -> new-form 으로 데이터를 전달합니다)
이렇게 전송한 폼 양식은 request.getParameter("폼양식이름"); 의 형태로 받아 사용할 수 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
강의 수강 중 서블릿 객체와 서블릿 내장 객체에 대한 이해와 request와 response의 관계, 서블릿의 싱글톤 관리 방법에 대한 궁금증을 갖고 계신 것 같습니다. 관련 내용에 대해 다룬 강의 내용이나 이에 대한 질의응답이 있는지 확인하시면 도움이 될 것 같습니다.
관련된 질문으로 “서블릿 싱글톤”에 대한 질문과 답변이 있으니, 해당 내용을 참고하시면 도움이 될 것 같습니다. 또한 이전 질문 중 “request.setAttribute 관련하여 질문 드립니다.“와 “hello서블릿 강의 중 - response 객체가 예제와 다르게 나오는 경우…“의 답변도 참고하실 수 있습니다.
위의 링크를 참조하셔서 관련 내용을 확인하시면 궁금증이 해소될 수 있을 것입니다. 추가적인 질문이 있으시면 질문&답변 게시판을 통해 질문을 남겨 주세요.
1.클라이언트가 입력을 주게되면 Dispatcher에서 Handler를 Mapping하게되고 그에맞는 Controller찾게되면 Controller가 비즈니스로직을 실행하게되는데 그전에 Dispatcher interceptor이 먼저 생성여부를 판단하고 생성되어있으면 반환 그게아니라면 생성이라고 알고있는데 맞나요?
2. MemberFormServlet, MemberSaveServlet이 서블릿객체로 등록이되면 만약 클라이언트가 요청을줬을때 HttpServletRequest, HttpServletResponse는 각 로직마다 선언이되어있지만 활용은 안되어있는경우를 봤습니다. 여기서 객체마다 request와 response를 찾아서 서버가 처리하게되고 그 결과값을 View로 넘겨준다고 이해했는데 맞을까요?