Spring
-
2-Layered 아키텍처Spring 2020. 2. 9. 03:44
DispatcherServlet이 생성되어 presentation-layer.xml 파일을 읽고 스프링 컨테이너를 구동하면 Controller 객체들이 메모리에 생성된다. 근데 Controller 객체들이 생성되기 전 누군가가 먼저 src/main/resource 소스 폴더에 있는 applicationContext.xml파일을 읽어 비즈니스 컴포넌트들을 메모리에 생성해야한다. 이때 사용하는 크래스가 스프링에서 제공하는 ContextLoaderListener다. web.xml에 등록한다. 중요한건, 서블릿 컨테이너가 web.xml 파일을 읽어서 구동될 때, 자동으로 메모리에 생성된다. 즉, ContextLoaderListener는 클라이언트의 요청이 없어도 컨테이너가 구동될 때 Pre-Loading 되는 ..
-
프레젠테이션 레이어 비즈니스 레이어Spring 2020. 2. 8. 22:20
지금까지 만든 게시판의 동작. 서버에 요청 전송 -> 서블릿 컨테이너가 생성한 DispatcherServlet이 받는다. -> DispatcherServlet은 스프링 컨테이너가 생성한 Controller에게 요청을 전달하고, Controller 매개변수를 통해 전달된 DAO 객체를 이용하여 사용자가 요청한 로직 처리. 여기에서 중요한 것은 Controller가 사용자 요청을 처리할때 DAO객체를 직접 이용한다는 점. Controller는 DAO객체를 직접 이용해서는 안되며, 반드시 비즈니스 컴포넌트를 이용해야 한다. 이유는? 1. 유지보수 과정에서 DAO클래스를 다른 클래스로 쉽게 교체하기 위해서. 지금은 BoardController의 모든 메소드가 BoardDAO 객체를 매개변수로 받아서 DB연동을 ..
-
@SessionAttributesSpring 2020. 2. 8. 17:49
@SessionAttributes는 수정 작업을 처리할 때 , 유용하게 사용할 수 있는 어노테이션. updateBoard.do 실행하면 작성자 이름 : null확인 가능. (현재 게시판은 title, Content만 수정가능.) 즉 수정가능한 내용인 title과 content를 제외한건 vo객체에 다 null이 들어가는 상황. 매개변수에 modelAttribute를 적용해주고, 클래스 위에 SessinoAttributes를 board로 해준다. board로 해준 이유는 아래 그림을 보면 model에 board라는 이름으로 객체를 추가하기 때문. 이번에는 작성자이름 등록일,(수정 불가능한)을 업데이트를 통해 가져온걸 볼 수 있다. 정리 ---------------------------------------..
-
@ModelAttribute 몰랐던 사실.Spring 2020. 2. 6. 22:01
Model 은 내부 구조가 Map 형태로 되어 있는 객체입니다..이 객체가 하는 역할은 Controller에서 작업을 마친뒤 이동하는 페이지에서 사용할 객체들을 저장하는 공간으로서 이용하게 되요.. @ModelAttribute 어노테이션을 사용하면 이미 Model에 @ModelAttribute에 지정한 객체를 넣고 Controller에서 이용하게 됩니다..원래 @ModelAttribute 어노테이션을 이용하지 않아도 값을 받아오는데는 지장은 없어요..그러나 그 값을 나중에 이동하는 페이지에서 사용할 경우엔 @ModelAttribute를 붙이거나 아니면 Model에 해당 객체를 넣는거죠..즉.. String selectSampleList(SampleDefaultVO searchVO, Model model)..
-
@RequestMapping, @ModelAtrributeSpring 2020. 2. 6. 18:38
클라이언트가 직접 URL을 입력하거나 하이퍼링크를 클릭하여 요청하면 기본이 GET 방식이다. 스프링 컨테이너가 생성하는 Command 객체의 이름은 클래스 이름의 첫 글자를 소문자로 변경한 이름이 자동으로 설정된다. 위의 UserVO객체의 변수를 jsp 화면에서 접근할때는 "${userVO.변수명}" Command 객체의 이름을 변경하려면 @ModelAtrribute를 사용한다. @ModelAtrribute 사용-1. Jsp 단에서는 userVO가 아니라 ModelAttribute에 설정된 user로 접근한다. Controller에 메소드를 정의할 때, 리턴타입은 개발자 마음대로 결정할 수 있으며, 리턴타입을 String으로 설정하면 완벽한 View 이름을 문자열로 리턴하겠다는 것이고, ModelAndV..
-
스프링 어노테이션 MVCSpring 2020. 2. 6. 02:31
DAO객체 역시 매개변수로 선언하면 스프링 컨테이너가 해당 객체를 생성하여 전달해준다. 그리고 return 을 Controller 메소드가 실행되고 View 경로를 리턴하면 기본이 포워딩 방식이므로 글 등록 후에 목록 화면이 출력되도 브라우저의 URL은 변경되지 않는다. 따라서 리다이렉트를 원할 때는 redirect: 접두사를 붙여햐한다. (URL 변경됨.) ViewResolver때 Redirect의 경우도, ViewResolver에 도달하기 전에 클라이언트에서 다시 요청을 하도록 만들어서, 결과적으로 ViewResolver가 실행되지 않는것으로 이해해야 맞는것 같다.
-
클라이언트 요청 처리(Command 객체)Spring 2020. 2. 5. 21:00
대부분 Controller는 사용자의 입력 정보를 추출하여 VO객체에 저장한다. 그리고 비즈니스 컴포넌트의 메소드를 호출할 때 VO객체를 인자로 전달한다. 이 상황에서는 HttpServletRequest의 getParameter() 메소드를 사용하여 추출한다. 문제는 사용자가 입력하는 정보가 많거나 변경되는 상황이 발생하면 자바 코드 수정이 필요할 것이고, 입력 정보가 변 경 될때 마다 Controller 클래스는 수정되어야 한다. Command객체를 이용하면 문제를 해결할 수 있다. Command객체란 Controller 메소드 매개변수로 받은 VO 객체라고 보면된다. Command 객체를 이용해서 변경된 코드를 확인해보자. 스프링 컨테이너가 insertBoard()메소드를 실행할 때 Cmmand 객체..
-
Spring 어노테이션(@Controller,@RequestMapping)Spring 2020. 2. 5. 19:41
context 네임스페이스 추가 HandlerMapping,Controller,ViewResolver 클래스에 대한 등록을 모두 삭제하고 으로 대체 . 기존에는 스프링 컨테이너가 Controller 클래스를 생성하게 하려면 스프링 설정 파일에 등록을 했었음. 어노테이션에서는 클래스 선언부 위에 @Controller붙이면 된다. 스프링 컨테이너가 컨트롤러 객체들을 자동으로 생성한다. ( ) @Component를 상속한 @Controller는 클래스의 객체를 메모리에 생성하는 기능 제공, 단순히 객체를 생성하는 것에 그치지 않고, DispatcherServlet이 인식하는 Controller 객체로 만들어준다. @Controller를 사용하지 않으면, 스프링에서 제공하는 인터페이스 Controller를 구현..