회원등록
1. 뷰 경로 설정
2. request.getRequestDispatcher(viewPath)를 이용해서 뷰로 이동(제어권 넘김)할 수 있다!!
3. 서블릿에서 뷰로 진짜 이동 : dispatcher.forward(req,resp)
dispatcher.forward() : 다른 서블릿이나 JSP로 이동할 수 있는 기능이다. 서버 내부에서 다시 호출이 발생한다.
리다이렉트는 실제 클라이언트(웹 브라우저)에 응답이 나갔다가, 클라이언트가 redirect 경로로 다시 요청한다. 따라서 클라이언트가 인지할 수 있고, URL 경로도 실제로 변경된다. 반면에 포워드는 서버 내부에서 일어나는 호출이기 때문에 클라이언트가 전혀 인지하지 못한다.
/WEB-INF : 이 경로안에 JSP가 있으면 외부에서 직접 JSP를 호출할 수 없다. 우리가 기대하는 것은 항상 컨트롤러를 통해서 JSP를 호출하는 것이다.
=>항상 서블릿 컨트롤러를 거쳐서 호출,실행되도록 하기 위함이다!
회원 정보 저장된 페이지
1. 저장 로직 구현
2. 모델에 데이터 저장(보관) : request가 제공하는 setAttribute() 를 사용하면 request 객체에 데이터를 보관해서 뷰에 전달할 수 있다.뷰는 request.getAttribute() 를 사용해서 데이터를 꺼내면 된다!
3. 뷰로 이동(위와 동일)
packagehello.servlet.web.servletmvc;importhello.servlet.domain.member.Member;importhello.servlet.domain.member.MemberRepository;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;@WebServlet(name="mvcMemberSaveServlet",urlPatterns ="/servlet-mvc/members/save")publicclassMvcMemberSaveServletextendsHttpServlet {privateMemberRepository memberRepository =MemberRepository.getInstance(); @Overrideprotectedvoidservice(HttpServletRequest req,HttpServletResponse resp) throwsServletException,IOException {//비즈니스 로직 - 저장한다!String username =req.getParameter("username");int age =Integer.parseInt(req.getParameter("age"));Member member =newMember(username,age);memberRepository.save(member);//Model에 데이터를 보관한다.req.setAttribute("member",member);String viewPath ="/WEB-INF/views/save-result.jsp";RequestDispatcher dispatcher =req.getRequestDispatcher(viewPath);dispatcher.forward(req,resp);//진짜 서블릿에서 뷰로 간다! }}
회원 리스트 조회
1. 데이터 가져온다.
2. 모델에 담는다.
3. 뷰로 이동
packagehello.servlet.web.servletmvc;importhello.servlet.domain.member.Member;importhello.servlet.domain.member.MemberRepository;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.util.List;@WebServlet(name="mvcMemberListServlet", urlPatterns ="/servlet-mvc/members")publicclassMvcMemberListServletextendsHttpServlet {privateMemberRepository memberRepository =MemberRepository.getInstance(); @Overrideprotectedvoidservice(HttpServletRequest req,HttpServletResponse resp) throwsServletException,IOException {//1.데이터 가져온다.List<Member> members =memberRepository.findAll();//2.모델에 담는다.req.setAttribute("members",members);//(key,value)//3.뷰로 간다. - 뷰패쓰 설정하고 RequestDispatcher.forward 로 뷰로 이동!String viewPath ="/WEB-INF/views/members.jsp";RequestDispatcher dispatcher =req.getRequestDispatcher(viewPath);dispatcher.forward(req,resp); }}
JSP에서 아래와 같이 jspl 문법을 사용하면 ${..}를 이용해서 key, value 값을 가져올 수 있다!