학습내용
- forward
- Model2 Arch
- controller 역할
- RequestDispatcher
forward
client request가 servlet1로 들어온 뒤 forward를 통해서 servlet2로 보낸다.
아직 servlet2로 보냈을 뿐이지. response가 된것은아니기에 servlet2는 servlet1이 받은 request를 사용 할 수 있다.
또한 브라우저가 다시 요청을 보낸것이 아닌 서버에서 다른 servlet을 호출한 것이기에 url 변화는 없다.
forward, jsp:include servlet servlet 파일로 변환
<jsp:forward page="09JSPActionForward.jsp"/>
-> _jspx_page_context.forward("09JSPActionForward.jsp");
<jsp:include page="top.jsp">
-> _jspx_page_context.forward("09JSPActionForward.jsp");
Model1 arch, Model2 arch
1. Model1
Client의 request가 오면 view에서는 해당 request를 처리할 bean을 호출한다.
bean은 Logic을 수행하고 데이터를 view로 반환하면 view는 다시 이 데이터를 처리하여 client에게 view를 보여준다.
이러한 구조는 view와 bean이 coupling 관계가 높아 bean을 수정하면 view 도 수정하기에 유지보수에 좋지 않다.
2. Model2
view와 bean의 coupling 관계를 없애기 위해 등장한 model이다. 중간에 controller라는 계층을 추가하여 view와 bean은 controller를 통해
서로에게 데이터를 보낼 수 있다. 이를 통해 View는 Business Logic에 대한 부분없이 view에만 전념하고 bean은 Business Logic에만 전념하여 decoupling관계로 변하였다.
controller 역할
- Business Logic 수행
- 기존 model1 arch에서는 view를 구성하는 jsp에서 bean을 호출해 Business Logic을 수행하였다.
나중에 Business Logic이 변경되어 bean의 이름이 바뀌거나 반환 타입이 변한다면 이 bean을 사용하는 모든 jsp는 해당 bean을 수정해야하는 불편함이 존재한다.
model2 arch에서는 view와 model 사이에 controller라는 계층을 추가하여 bean의 변경사항이 생기더라도 controller 부분만 변경하면 되기에 유지보수에 편하다.
- Model/View 연결
- View에 Bean이 포함되어 유지보수에 방해가되니 Model2 arch에서는 View와 Bean을 분리하였다. Controller는 Viwe와 Bean 사이에서 Bean의 Logic 수행결과를
View에 전달하여 model과 view를 연결하는 역할은 한다.
- Navigation
- 모든 request는 controller를 통해 들어온다. 따라서 request에 맞는 bean을 호출하여 Business Logic을 수행하고 수행 결과를 알맞는 jps에 전달하여 view를 보여주는
역할을 수행한다.
- Work Flow Controll
- 정상적인 흐름에 위배되는 request를 사전에 차단하고 그에 맞는 대응을 할 수 있다.
- 단일인입점
- 모든 request는 Controller를 통해 들어오기에 인코딩, 방어적 코딩, 잘못된 입력에 대한 에러페이지 처리등을 할 수 있다.