Spring MVC 실습1

유동현·2022년 11월 12일
0

스프링MVC

목록 보기
2/13
post-thumbnail

1. web.XML

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
	-->

	




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>




각 Controller & JSP 생성

/*=================================
	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에 등록하러 가자!
-->

0개의 댓글