๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปStudy/Spring

Spring MVC ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ธํŒ… / Dispatcher Servlet / View Resolver

tomcat 9.0.3, sts 4.9.0 ๋‹ค์šด๋กœ๋“œ

 

sts ์‹คํ–‰ ํ›„ perspective Java EE๋กœ ์„ค์ •

Java EE๊ฐ€ ์—†์„ ๋•Œ๋Š” Help > Install New Software > work with์— http://download.eclipse.org/releases/2020-12

> web,xml,java ee and OSGi Enterprise Develoment ์„ค์น˜

 

Create a Maven project - Create a simple project ์„ ํƒ

ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ด๋ฆฌ๋ฉด pom.xml์— ๋นจ๊ฐ„์ค„์ด ๋œจ๋Š”๋ฐ, web.xml์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

src - main - webapp ์•ˆ์— ํ†ฐ์บฃ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ ROOT - WEB-INF(์•ˆ์— web.xml ํŒŒ์ผ ์žˆ์Œ)๋ฅผ ๋ณต์‚ฌํ•ด ์™€์„œ ๋ถ™์ธ๋‹ค.

 

 

Properties 1.8์œผ๋กœ ์„ค์ •

 

pom.xml์˜ Overview์—์„œ Packaging์„ war์œผ๋กœ ๋ฐ”๊พธ๊ณ  Properties๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์ €์žฅํ•˜๊ณ  ๋ฉ”์ด๋ธ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ฉด ์†Œ์Šค์˜ properties ํƒœ๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

pom.xml

<properties>
  	<maven.compiler.source>1.8</maven.compiler.source>
  	<maven.compiler.target>1.8</maven.compiler.target>
  </properties>

 

 

๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด Maven Repository ์ ‘์†, tomcat-api 9.0.30๊ณผ spring-webmvc 5.2.9๋ฅผ pom.xml์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

Maven Repository์— ์ ‘์†ํ•˜์ง€ ์•Š๊ณ ๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

Show View์—์„œ Maven - Maven Repositories ์„ ํƒ, Global Repositories - central ์šฐํด๋ฆญ - Rebuild Indexํ•˜๋ฉด ์›๊ฒฉ์— ์žˆ๋Š” Repository๋“ค์„ ์ธ๋ฑ์‹ฑํ•ด์„œ sts ์•ˆ์—์„œ ๊ฒ€์ƒ‰ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์›๊ฒฉ์— ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์ด๋ฉฐ, ์ธ๋ฑ์‹ฑ์„ ํ•œ ํ›„์—๋Š” pom.xml์˜ Dependencies ํƒญ์—์„œ Add๋ฅผ ๋ˆŒ๋Ÿฌ ๊ฒ€์ƒ‰ํ•ด์„œ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.  (์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์ด ๊ณผ์ •์€ ์Šคํ‚ตํ–ˆ๋‹ค. ์ตœ์†Œ ํ•œ ์‹œ๊ฐ„ ์ด์ƒ ์†Œ์š”)

 

 

Java Resources ์•ˆ์˜ ๋ฉ”์ด๋ธ ๋””ํŽœ๋˜์‹œ๋ฅผ ํŽผ์ณ๋ณด๋ฉด ์ง์ ‘ ์ถ”๊ฐ€ํ•œ tomcat-api, spring-webmvc ์™ธ์—๋„ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์ด๋ธ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ ์„œ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (=>๋ฉ”์ด๋ธ์˜ ์žฅ์ )

 

 

Dependency Hierarchy ํƒญ์—์„œ ์„œ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์„ ํ•  ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์ธ DispatcherServlet์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด DispatcherServlet.class ์šฐํด๋ฆญ - Copy Qualified Name ๋ˆ„๋ฅด๋ฉด ํŒจํ‚ค์ง€๋ช…๊ณผ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๋ณต์‚ฌ๋œ๋‹ค.

 

 

web.xml

  <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>/</url-pattern>
  </servlet-mapping>

 

web.xml์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. servlet-class์—๋Š” ๋ณต์‚ฌํ•œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์˜ ํŒจํ‚ค์ง€์™€ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์จ์ฃผ๊ณ , ๋ชจ๋“  ์š”์ฒญ์„ ๋‹ค ๋ฐ›๊ธฐ ์œ„ํ•ด url-pattern์€ "/"์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

 

index.jsp(webapp ํด๋” ์•ˆ)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>hi ${data }</h1>
</body>
</html>

 

<url-pattern>/<url-pattern>์ผ ๋•Œ

${data} ๊ฐ’์€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฐฝ์—๋Š” hi๋งŒ ๋‚˜ํƒ€๋‚œ๋‹ค.

 

web.xml์˜ <url-pattern>์„ "/*"์œผ๋กœ ์ˆ˜์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด 500 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. WEB-INF ์•ˆ์— dispatcher-servlet.xml ํŒŒ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(์—ฌ๊ธฐ์„œ dispatcher๋ž€ web.xml์—์„œ ์„ค์ •ํ•œ ์„œ๋ธ”๋ฆฟ ๋„ค์ž„์„ ์˜๋ฏธํ•˜๋ฉฐ, -servlet์€ ์˜ˆ์•ฝ์–ด์ด๋‹ค.)

 

<url-pattern>/*<url-pattern>์ผ ๋•Œ

 

 

 

๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์€ ํ›„ WEB-INF ์•ˆ์˜ *-servlet.xml์—์„œ ๋งคํ•‘๋œ ์ •๋ณด์— ๋”ฐ๋ผ ๋ฐฐ๋ถ„ํ•˜๋Š”๋ฐ, ์ด ์„ค์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

url-pattern์„ "/"์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋””ํดํŠธ ์„œ๋ธ”๋ฆฟ์„ ์˜๋ฏธํ•œ๋‹ค. ๋””ํดํŠธ ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ธ”๋ฆฟ ๋งคํ•‘ url์— ๊ฑธ๋ฆฌ์ง€ ์•Š์€ ๋ชจ๋“  ์š”์ฒญ๋“ค์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฆ‰, ๋งคํ•‘ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ๊ทธ์— ๋”ฐ๋ผ ๋ฐฐ๋ถ„ํ•œ ํ›„ ๋งคํ•‘์ด ๋˜์ง€ ์•Š์•„ ๋‚จ์€ ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋ž˜์„œ "/"์œผ๋กœ ์ •์˜ํ–ˆ์„ ๋•Œ๋Š” ๋งคํ•‘ ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ณ  ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ ๊ฒƒ์ด๋‹ค.

 

(์ฐธ๊ณ . multifrontgarden.tistory.com/145)

(itmore.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-urlpattern-%EC%84%A4%EC%A0%95-%EC%99%80-%EC%B0%A8%EC%9D%B4%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%9C%EB%85%90)

 

 

๋งคํ•‘ ์„ค์ •์„ ํ•˜๊ธฐ ์œ„ํ•ด WEB-INF ์•ˆ์— dispatcher-servlet.xml ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. xml ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด https://docs.spring.io/spring-framework/docs/ ์— ์ ‘์† -> 5.2.x -> spring-framework-reference -> Core ํด๋ฆญ -> beans ํƒœ๊ทธ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์ธ๋‹ค.

 

 

dispatcher-servlet.xml

	<!-- spring mvc์—์„œ๋Š” id์— url์„ ์ ๋Š”๋‹ค. -->
	<!-- index๋ผ๋Š” ์š”์ฒญ์ด ์™”์„ ๋•Œ ์ปจํ…Œ์ด๋„ˆ์—์„œ class๋ฅผ ๊บผ๋‚ธ๋‹ค. -->
    <bean id="/index" class="com.newlecture.web.controller.IndexController">  
    </bean>

 

 

 

์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” handelRequest ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค. IndexController์—์„œ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

 

IndexController.java

public class IndexController implements Controller{

	//Controller๋ฅผ ์ƒ์†ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•˜๋Š” handleRequest
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("index controller");
        
		ModelAndView mv = new ModelAndView();
		mv.addObject("data", "Hello Spring MVC"); //view(index.jsp)์—์„œ ์ถœ๋ ฅํ•  data๋ฅผ ๋‹ด๋Š”๋‹ค
		mv.setViewName("index.jsp");
		
		return mv;
	}
}

 

ModelAndView๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ data ๊ฐ์ฒด๋ฅผ addObjectํ•˜๊ณ , ์‹คํ–‰ํ•  jsp๋ฅผ setViewName์„ ํ†ตํ•ด ๋‹ด๋Š”๋‹ค. IndexController์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

 

ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” 404 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฃผ์†Œ์ฐฝ์„ ๋ณด๋ฉด ๋งคํ•‘๋œ url ์ •๋ณด๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์š”์ฒญ๋˜๊ณ  ์žˆ๋‹ค. http://localhost:8787/webprj/index ์œผ๋กœ ์š”์ฒญ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

์ฃผ์†Œ์ฐฝ์˜ ๊ฒฝ๋กœ๋ฅผ http://localhost:8787/webprj/index์œผ๋กœ ๋ฐ”๊ฟ”๋„ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ํ•˜์ง€๋งŒ System.out.println();์œผ๋กœ ์ถœ๋ ฅํ•œ "index controller"๋Š” ์ฝ˜์†”์ฐฝ์— ์ž˜ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, /index๋ผ๋Š” ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ IndexController๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ๋งคํ•‘์ด ๋˜์—ˆ๊ณ , handleRequest ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ ModelAndView์œผ๋กœ ์„ธํŒ…ํ•œ index.jsp๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š” ๋œป์ด๋‹ค. (=>ํฌ์›Œ๋“œ๋กœ ์š”์ฒญํ•œ mv.setViewName("index.jsp");์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.)

 

์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ์ด์œ ๋Š”, web.xml์—์„œ url-pattern์ด "/*"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹คํ–‰ํ–ˆ์„ ๋•Œ index๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•„ ๊ทธ ์š”์ฒญ์„ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ›์•„ dispatcher-servlet.xml์— ๋ช…์‹œ๋œ bean์˜ ๋งคํ•‘์œผ๋กœ IndexController์— ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ mv.setViewName์—์„œ index.jsp๋ผ๋Š” ๊ฒฝ๋กœ๋ฅผ ์š”์ฒญํ•˜์˜€๊ณ , ๊ทธ ๋•Œ ๋‹ค์‹œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ index.jsp๋ผ๋Š” ์š”์ฒญ์€ ๋งคํ•‘๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด dispatcher-servlet.xml์— <bean id="/index.jsp" .... > ์„ค์ •์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฑด๋ฐ, ๊ทธ๊ฒƒ๋ณด๋‹ค๋Š” web.xml์˜ url-pattern์„ "/"์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค.

"/"์œผ๋กœ ์„ค์ •ํ•˜๋”๋ผ๋„ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฑฐ์ณ์„œ ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„๋ณด์ง€๋งŒ, ๋งคํ•‘๋œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— mv.setViewName("index.jsp");์— ์š”์ฒญ๋œ ๋Œ€๋กœ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

 

* View ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ์œ„์น˜

 

MVC 2 ๋””์ž์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฝ”๋“œ ์ž‘์„ฑ, ์ˆ˜์ •์˜ ์šฉ์ดํ•จ์„ ์œ„ํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ(IndexController)์™€ ๋ทฐ(index.jsp)๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–ผ์–ด๋†“์•˜์ง€๋งŒ ์‹คํ–‰ ์ ˆ์ฐจ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ๋‘˜์€ ์ด์–ด์ ธ์žˆ๋Š” ๊ด€๊ณ„์ด๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ ํ›„์— ๋ทฐ๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ทฐ๋งŒ ๋‹จ๋…์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธฐ๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

ํ˜„์žฌ ์ƒํƒœ์—์„œ๋Š” localhost:8080/webprj/index.jsp ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ index.jsp ํŽ˜์ด์ง€๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ทฐ ํŽ˜์ด์ง€๋ฅผ ์ˆจ๊ฒจ๋†“๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ทฐ ํŽ˜์ด์ง€๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜๋Š” ์—†๊ฒŒ ์ˆจ๊ฒจ๋‘๋Š” ๊ณต๊ฐ„์ด ๋ฐ”๋กœ WEB-INF์ด๋‹ค. WEB-INF๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ณต๊ฐ„์ด๋‹ค.

 

 

 

WEB-INF ์•ˆ์— ๋ทฐ ํŽ˜์ด์ง€๋“ค์„ ๋ชจ์•„๋†“์„ view ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์— index.jsp๋ฅผ ์˜ฎ๊ฒจ๋†“๋Š”๋‹ค.

 

 

 

url๋กœ ์ง์ ‘ ์š”์ฒญํ–ˆ์„ ๋•Œ 404 ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ๋งž๊ฒŒ ์„ค์ •๋œ ๊ฒƒ์ด๋‹ค.

 

 

IndexController.java

public class IndexController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("index controller");
		ModelAndView mv = new ModelAndView();
		mv.addObject("data", "Hello Spring MVC"); //view์—์„œ ์ถœ๋ ฅํ•  data๋ฅผ ๋‹ด๋Š”๋‹ค.
		mv.setViewName("/WEB-INF/view/index.jsp"); //์ˆ˜์ •ํ•œ ๋ทฐ ํŽ˜์ด์ง€์˜ ๊ฒฝ๋กœ
		
		return mv;
	}
}

 

mv.setViewName์„ ์ˆ˜์ •ํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ index.jsp ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค.

(/ : ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ์ฐพ๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ, /๊ฐ€ ์—†์œผ๋ฉด ์ƒ๋Œ€๊ฒฝ๋กœ. ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋” ํŽธํ•˜๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฃจํŠธ(์›น ๋ฃจํŠธ)๋Š” webapp์ด๋‹ค.)

 

 

http://localhost:8080/webprj/index๊ณผ ๊ฐ™์€ url์—์„œ webprj์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์ ํŠธ ๋ช…์ธ๋ฐ url์— ๊ตณ์ด ๋“ค์–ด๊ฐˆ ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ > Web Project Settings > Context root๋ฅผ "/"์œผ๋กœ ์ง€์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Servers ํƒญ์—์„œ ํ†ฐ์บฃ ๋ฐ‘์— ์žˆ๋Š” ์›น ๋ชจ๋“ˆ์„ ์ง€์šด๋‹ค. 

 

 

์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ๊ท€์ฐฎ์œผ๋‹ˆ WEB-INF ์•ˆ์— index๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค. WEB-INF ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ์œผ๋ฏ€๋กœ ์ด ํŒŒ์ผ๋„ /index๋ผ๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์œผ๋ฏ€๋กœ /index ์š”์ฒญํ•˜๋ฉด IndexController๋กœ ๊ฐ„๋‹ค. ์ดํด๋ฆฝ์Šค ์ƒ์—์„œ ์‹คํ–‰์„ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„์ด๋กœ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค.

 

 

 

* ViewResolver

    

์•ž์„œ ๋ทฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ๋Š”

 

ModelAndView mv = new ModelAndView();
mv.setViewName("/WEB-INF/view/index.jsp");

 

์ด๋Ÿฐ ์‹์œผ๋กœ ModelAndView ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ํ›„ ๋ทฐ ๋„ค์ž„์„ set ํ•ด์ฃผ์—ˆ์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

ModelAndView mv = new ModelAndView("/WEB-INF/view/index.jsp");

 

์—ฌ๊ธฐ์„œ ๋ฐ˜๋ณต๋˜๋Š” '/WEB-INF/view'์™€ '.jsp'๋Š” ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ด ์ฃผ๋ฉด ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

dispatcher-servlet.xml

    <!-- View Resolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/WEB-INF/view/"></property>
    	<property name="suffix" value=".jsp"></property>
    </bean>

 

์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค. dispatcher-servlet.xml์— ํ•ด๋‹น ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

 


๋‰ด๋ ‰์ฒ˜ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๊ฒŒ์‹œ๊ธ€์ž…๋‹ˆ๋‹ค.

www.youtube.com/user/newlec1