web.XML 에 특정 url-pattern에 대한 front-controller를 지정한다.
<!-- ※ Spring MVC Framework 등록 -->
<!-- → Front Controller 등록 -->
<!-- →등록 대상은 DispatcherServlet 객체 등록 -->
<!-- ※ 추후 별도로 필터를 사용하기전까지는 고정 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!--
*.action라고 요청이 오면,
문 앞에서 DispatcherServlet 한테까지 안내해줌
DispatcherServlet 에게 실제로 넘겨주는 건 → tomcat
==> 여기는 spring의 영역이라고 보기는 힘듦
org.springframework.web.servlet.DispatcherServlet
여기로 가면 이제 spring의 약속과 틀 적용됨
url-pattern에 맞는게 요청되면 맞는 Controller로 보내는일을
하는 게 → dispatcher-servlet
-->
<!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 -->
<!-- - 『name=""』 속성에 매핑 주소를 등록한다. -->
<!-- 이 과정에서 Front Controller 가 갖고 있는 확장자의 형태로 구성한다. -->
<!-- - 『class=""』 속성은 Controller 객체의 클래스 경로 및 이름을 등록한다. -->
<!-- /send.action 요청 들어오면 SendController 로 넘겨 -->
<bean name="/send.action" class="com.test.mvc.SendController"></bean>
<!-- /receive.action 요청 들어오면 ReceiveController 로 넘겨 -->
<bean name="/receive.action" class="com.test.mvc.ReceiveController"></bean>
</beans>
/*=================================
SendController.java
- 사용자 정의 컨트롤러 클래스
==================================*/
/*
컨트롤러 쓰는 방법 2가지
1) annotation 쓰거나,
2) Controller 인터페이스 implements
*/
package com.test.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
// ※ Spring 의 『Controller』 인터페이스를 구현하는 방법을 통해
// 사용자 정의 컨트롤러 클래스를 구성한다.
public class SendController implements Controller
{
// 예전에 servlet 할 때 doGetPost() 역할을 얘가 하고 있는 거
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
// 액션 코드
ModelAndView mav = new ModelAndView();
// 얘는 클라이언트한테 요청받았을 때, view 만 출동 시키면 된다.
mav.setViewName("/WEB-INF/view/Send.jsp");
//-- '너가 가서 손님 맞이해~'의 개념 → view 출동시킴
//-- Send.jsp 작성하러 가면 된다.
//-- 위 주소를 어디서 받아오거나 로직적으로 처리한다면
// DB상으로 액션 처리해서 주소 얻어오겠다 하면
// 컨트롤러가 모델한테 일 해달라고 의뢰할것이다.
// └→ 지금 한 거에서는 모델 필요 없음
return mav;
}
}
SendController.java
&
Send.jsp
<div>
<form action="receive.action" method="post">
이름 <input type="text" name="userName" />
<button type="submit">submit</button>
</form>
</div>
<!--
얘는 ctrl+f11 해도 내용 볼 수 없음
클라이언트가 직접 이 view 페이지 요청하면 안되니까 WEB-INF 에 넣어놨음
외부 사용자는 이 view 페이지를 직접 요청하는게 아니고,
컨트롤러로 요청 들어오게 해야 한다.
web.xml과 dispatcher-servlet.xml 작성하러 ㄱㄱ
-->
/*============================
ReceiveController.java
- 사용자 정의 컨트롤러
=============================*/
package com.test.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class ReceiveController implements Controller
{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
// send.do에서 전송된 거 얘가 수신하게 된다.
ModelAndView mav = new ModelAndView();
request.setCharacterEncoding("UTF-8");
String userName = request.getParameter("userName");
// 넘어온 데이터를 object로 추가함
mav.addObject("userName", userName);
mav.setViewName("/WEB-INF/view/Receive.jsp");
//-- Receive.jsp가 저 object 들고 클라이언트 만나면 되겠다~
// 그 view 한테 userName 적어놓을게
return mav;
}
}
ReceiveController.java
&
Receive.jsp
<div>
<h2>안녕하세요, ${userName }님 반갑습니다.</h2>
</div>
<!--
dispatcher-servlet에
/send.do 만 등록되어 있는 상태라 이렇게만 한다고 되는거 아님
/receive.do 요청오면 ReceiveController에게 요청 보낸다고
dispatcher-servlet에 등록하러 가자!
-->