분류 전체보기

기능 개선 매번 ModelView 객체를 생성하지 않고, 컨트롤러가 ModelView를 반환하지 않고 ViewName만 반환한다. 인터페이스에는 ModelView가 없으며, model 객체를 파라미터로 전달하기 때문에 그냥 사용하면 된다. 결과적으로 viewName만 반환해주면 된다. public interface ControllerV4 { /** * * @param paramMap * @param model * @return viewName */ String process(Map paramMap, Map model); } ControllerV4 인터페이스를 준수하는 컨트롤러도 마찬가지로 viewName만 반환하도록 설정한다. 대신 파라미터로 전달되는 model에 비즈니스 로직을 반영하여야 한다. pub..
서블릿 종속성 제거 다음 코드는 이전 실습에서 Front Controller를 도입한 컨트롤러의 코드이다. 요청 파라미터 정보는 자바의 Map으로 대신 넘기기만 한다면 HttpServletRequest, HttpServletResponse이 더이상 필요하지 않다. 즉 서블릿 기술이 더이상 필요하지 않다. 그래서 이번에는 서블릿 기술을 사용하지 않고, request 객체를 Model로 사용하는 대신에 별도의 Model 객체인 ModelView를 만들어서 반환하도록 한다. 뷰 이름 중복 제거 앞선 실습에서는 컨트롤러에 /WEB-INF/views/~ 등 jsp 파일(View)의 경로가 중복되어 쓰이는 경우가 많았다. 그래서 컨트롤러에는 View의 가상 경로(논리 이름)를 반환하고, 실제 물리 경로의 이름은 F..
Front Controller 이전에는 공통된 기능이 있다면 매번 중복해서 선언하고 호출해야만 했다. 하지만 Dispatcher Servlet으로 구현된 Front Controller를 사용하면 클라이언트 요청을 Front Controller가 다 받은 다음 요청에 맞는 컨트롤러를 찾아서 호출한다. 1. 클라이언트 요청을 받기 위한 Front Controller 도입 Front Controller는 인터페이스에 의존하면서 다른 컨트롤러들을 편리하게 호출할 수 있다. 다른 컨트롤러(구현체)들은 이 인터페이스를 구현하게 된다. public interface ControllerV1 { void process(HttpServletRequest request, HttpServletResponse response)..
MVC 패턴의 의의 비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고, JSP는 목적에 맞게 HTML로 웹 그리는 것에 집중하는 것이다.(JSP는 화면 렌더링에 최적화되어있다.) MVC 패턴은 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller), 뷰(View)라는 영역으로 역할을 나눈 것을 말한다. # Controller HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회하여 모델에 담는다. # View 뷰는 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. (대부분 HTML을 생성) # Model 컨트롤러에서 뷰에 출력할 데이터를 담아 둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈..
GetWriter로 Text를 전달하면서 무수히 많은 HTML을 일일이 쳤다. JSP를 사용하면 선택적으로 Java 코드를 사용할 수 있다. # 회원 추가 JSP 먼저 회원을 추가하는 페이지를 jsp로 작성한 것이다. username: age: 전송 # 회원 저장 JSP new-form.jsp로부터 전달된 username과 age를 저장한다. 서블릿 코드와 동일한 로직을 삽입한다. 성공 id username age 메인 서블릿과 JSP의 한계 JSP 덕분에 뷰를 생성하는 HTML 작업이 매우 깔끔해졌다. 코드의 상위 절반은 비즈니스 로직, 나머지 하위 절반은 HTML로 유저에게 보여주기 위한 뷰 영역이다. 하지만 조금 더 큰 프로젝트라면 JSP 코드가 훨씬 복잡해지고, 머지 시 컨플릭 관리도 어려울 것이다.
회원 추가 / 회원 저장 / 회원 리스트 Subvlet # 회원 추가 Servlet reponse 객체 헤더를 설정하고, PrintWriter를 통해 텍스트(HTML)을 전달한다. /servlet/members/save로 이동하며, username과 age를 전달한다. @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(Ht..
실습에 앞서 회원 정보는 String: username과 int: age이며, 기능은 회원 저장 및 조회이다. 우선 회원 관리를 위해 Member라는 도메인 객체와 MemberRepository라는 저장소를 만든다. @Getter @Setter public class Member { private Long id; private String username; private int age; // 기본 생성자 public Member() { } public Member(String username, int age) { this.username = username; this.age = age; } } static 영역에 객체 인스턴스를 하나 미리 생성해서 올려놓는다. 해당 객체 인스턴스가 필요하면 오직 getI..
HttpServletResponse의 목표는 HTTP 응답 메시지를 작성하는 것이다. (HTTP 응답 코드 지정, 헤더/바디 생성) 편의 기능도 제공한다. Content-Type, 쿠키, Redirect(번거로운 헤더 작성 해결) 다음 코드는 HttpServletResponse를 위한 Servlet이다. Status Line, Header 등을 설정할 수 있다. @WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header") public class ResponseHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest request..
HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달할 수 있는 방법에 대해 공부한다. GET-쿼리 파라미터 # 개요 - /url?username=hello&age=20 - 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 페이징등에서 많이 사용하는 방식 # 전체 파라미터 조회(getParameterNames) - asIterator(): 이 열거에 포함 된 요소들을 순회 하는 Iterator를 리턴한다. 컬렉션에 저장되어 있는 요소를 다 꺼내 올 때까지 도는 것 - forEachRemaining(): Iterator를 ArrayList로 변환해준다. @WebServlet(name = "requestParamServlet", urlPatterns = "/r..
HttpServletRequest 객체의 부가 기능 # 임시 저장소 기능 요청이 오고 응답이 나갈 때까지 유지되는 임시 저장소 기능이다. // 저장 request.setAttribute(name, value) // 조회 request.getAttribute(name) # 세션 관리 기능 request.getSession(create: true) 기본 사용법 @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header") public class RequestHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, Http..
Younngjun
'분류 전체보기' 카테고리의 글 목록 (5 Page)