회사마다 다르지만 FC(FrontController) 가 있는 곳의 패키지는 일반적으로 .app.View가 들어간다.
지금까지는 FrontController라고 불렀지만
-> Spring 에서는 DispatcherServlet 이라 불린다.
일반 컨테이너는 POJO형식(JAVA) 만 불러올 수 있다.
-> 일반 컨테이너에서는 new 객체를 생성할 수 없으니
DispatcherServlet(FrontController)은 Servlet 컨테이너인 web.xml에서 확인이 가능하다.
이때 .xml 과도한 태그작성을 하지 않기 위해 @(어노테이션)을 작성하여 사용한다.
Spring 이전 .jsp 에서 HandlerMapper Java 를 생성하여 사용했지만.
Spring 에서는 private HandlerMapping handlerMapping; 라는 객체가 있어 따로 사용이 가능하다.
Controller controller = this.handlerMapping.getController(command);//handlerMapping은 팩토리 패턴을 활용한다.
Spring에서는 ActionForward forward를 사용하지 않는다.
Spring에서는 데이터 전송 방식을 판단해서 보내주는 객체가 있다.
(데이터 전송 방식을 판단하는 객체 => ViewResolver viewResolver)
반환을 물어볼때는 -> 반환방식의 타입으로 말하는 것이 좋다.
이때 handlerMapping / viewResolver DI를 해주어야하기 때문에.
3가지 생성자 주입 / setter 주입 / @(어노테이션) 중
생성자 주입을 해야한다.
public void init() {
this.handlerMapping = new HandlerMapping();
this.viewResolver = new ViewResolver();
}
viewResolver == .jsp를 알아서 붙여준다.
이에 페이지 이동은 .jsp를 따로 안붙여도 상관없으며
EX) V->C->V
데이터 이동이 있다면 .do 를 붙여서 전달하여야 한다.
EX) V->C->C->C->V
Action = 소규모 프로젝트 or .jsp 기반 프로젝트를 사용할때 명시하는 명칭이다.
Controller의 원칙이 있다.
public class LoginController implements Controller{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) {
//1. 사용자(클라이언트, 브라우저)가 보낸 파라미터에서 값 추출
String mid = request.getParameter("mid");
String password = request.getParameter("password");
//2. DB 연동
MemberDAO memberDAO = new MemberDAO();
MemberDTO memberDTO = new MemberDTO();
memberDTO = memberDTO.selectOne(memberDTO);
//3. 페이지 이동 == 네비게이션
String path = "login";
if(memberDTO!=null) {
path = "main.do";
}
return path;
}
}
DispatcherServlet -> init 으로 의존 주입을 하고
ViewResolver -> setter 를 통해 의존 주입을 한다.
-> ViewResolver은
public void init() {
this.handlerMapping = new HandlerMapping();
this.viewResolver = new ViewResolver();
this.viewResolver.setPrefix("./"); -> 현재 빌드패스(현재 페이지 경로)
this.viewResolver.setSuffix(".jsp"); -> 보낼 페이지 형식
}
Spring 응답(페이지 이동)
//viewResolver를 통해 페이지 응답(이동을 한다).
if(!path.contains(".do")) {
path = this.viewResolver.getView(path);
}
try {
response.sendRedirect(path);
} catch (IOException e) {}
dispatchServlet은 HandlerMapping 만이 아니라
viewResolver도 추가 되고
web.xml
<servlet-name>(객체이름)</servlet-name>
<servlet-class>클래스명</servlet-class>
아래 처럼 설정 하면 servlet 컨테이너에게 DispatcherServlet를 설정할 수 있다.
<servlet-name>ds</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<servlet-mapping>
<servlet-name>ds</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
추가로 Fiter, Listener을 설정할 수 있다.
Spring 에서 제공하는 DispatcherServlet을 new 하려고 하면
[/WEB-INF/ds-servlet.xml] 설정파일을 필요로한다!~
이때 ds-servlet -> ds 는 <servlet-name>(객체이름)</servlet-name> 이다
---------------------------------------------------------------------------------------
정리
jsp 를 실행하면 톰캣을 보니까 servlet 파일인 web.xml 을 보니까
-> 이 안에 ds를 사용 -> ds-servlet.xml 을 확인하게 된다.
-> xml파일을 보게되면서 spring 컨테이너의 개입이 시작된다.
(서버 구동 == 톰캣 == 서블릿 컨테이너 => web.xml 보고,
어? Spring에서 제공하는 DS 쓰네?
그러면 ds-servlet.xml 주세용
xml 파일을 보게되면서 spring 컨테이너의 개입이 시작됨)
------------------------------------------------------------------------------------------
//실습용으로 해당 핸들러메퍼를 사용하면 setter 방식으로 사용한다.
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
허나 실습 이외에는 보편적으로 생성자 함수를 많이 쓴다.
이때 handlermapper 는 map의 의존성을 추가하기 위해 아래 처럼 사용한다.
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="키 값">객체명</prop>
</props>
</property>
</bean>
session == addObject
서버 스토리지에서 저장되는 session은 servlet(반) 이기 때문에 무겁다.
이를 Spring에서 addObject로 전달이 가능하다.
'국비 내용 정리 > Spring' 카테고리의 다른 글
국비 63일차 내용정리 (Spring MAV) (0) | 2024.10.10 |
---|---|
국비 62일차 내용정리 (Spring ViewResolver) (1) | 2024.10.08 |
jsp -> Spring까지의 복습 정리 (0) | 2024.10.07 |
국비 60일 내용정리 (Spring 의존성 주입 방법) (1) | 2024.10.04 |
Spring 복습 (0) | 2024.10.04 |