๐Ÿ’ป

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ - [Spring] ํ†ฐ์บฃ ์„œ๋ฒ„ ์„ธํŒ… / MVC ํ”„๋กœ์ ํŠธ (1) ๋ณธ๋ฌธ

KITRI/SPRING

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ - [Spring] ํ†ฐ์บฃ ์„œ๋ฒ„ ์„ธํŒ… / MVC ํ”„๋กœ์ ํŠธ (1)

๋˜ํšจ๋‹ˆ 2020. 7. 28. 10:32

ํ†ฐ์บฃ ์„œ๋ฒ„ ์„ธํŒ…

 

apache-tomcat-9.0.35 ๋‹ค์šด๋กœ๋“œ

https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.35/bin/

 

Index of /dist/tomcat/tomcat-9/v9.0.35/bin

 

archive.apache.org

 

Window > Preference > Server ๊ฒ€์ƒ‰ > Runtime Environments

์›๋ž˜ ์žˆ๋˜๊ฑฐ ์ง€์›Œ์ฃผ๊ณ  Add.. Apache Tomcat v9.0 ์„ ํƒํ•˜๊ณ  Apply and Close

์„œ๋ฒ„๋ฅผ ํ†ฐ์บฃ์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

 

์•„๋ž˜์˜ Server ์ฐฝ์—์„œ ์„ธํŒ…์„ ๋งˆ์ € ํ•ด์ค€๋‹ค. 

ํฌํŠธ๋ฒˆํ˜ธ 8181๋กœ ์„ค์ •ํ•œ๊ฒƒ์€ ์˜ค๋ผํด์„œ๋ฒ„๊ฐ€ 8181์ด๋ฏ€๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ํ•ด๋‹น ๋ถ€๋ถ„ ์ฒดํฌํ•ด์ฃผ๊ณ  ์ €์žฅํ•˜๊ธฐ

 

New project > Dynamic Web Project๋ฅผ ์„ ํƒํ•ด์„œ ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•œ๋‹ค.

.xmlํŒŒ์ผ ์ฒดํฌํ•ด์ฃผ๊ณ  finish

 

 

 

Spring Lib ์ถ”๊ฐ€

ํ•ด๋‹นํ”„๋กœ์ ํŠธ ํด๋”์˜ WebContent > WEB-INF > lib ์— SpringLib ๋ณต์‚ฌํ•ด์„œ ๋„ฃ๋Š”๋‹ค.

 

 

WEB-INF์— Spring Bean Configuration File ์ƒ์„ฑํ•œ๋‹ค.

์„ ํƒํ•˜๊ณ 

 

 

 

Java Resources > Libraries > Web App Libraries > org.springframework.web.servlet-3.1.4.RELEASE.jar > org.springframework.web.servlet.handler > SimpleUrlHandlerMapping.class ์„ ํƒํ•ด์„œ ๊ฒฝ๋กœ๋ณต์‚ฌ(Copy Qualified Name)

 

 

class์— ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

 

DispatcherDispatcherServlet๊ฐ€ ๋ถˆ๋ ค์ง€๋ฉด์„œ SpringController-servlet.xmlํŒŒ์ผ๋กœ ๊ฐ„๋‹ค.

(FrontController๊ฐ€ DipspatcherServlet)

 

 

 

Controller๋Š” Service๋ฅผ Service๋Š” Dao๋ฅผ ๋ถˆ๋Ÿฌ์ค˜์•ผํ•œ๋‹ค.

Controller๋Š” Service์˜ , Service๋Š” Dao์˜ ์ƒ์„ฑ์ž์™€ Setter ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

 

 

Controller -> Service -> Dao -> Mybatis

DB์—ฐ๋™์„ ์œ„ํ•œ .jarํŒŒ์ผ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋”์— ์ถ”๊ฐ€

 

ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ์„ ์œ„ํ•œ filter ์ž‘์„ฑ

ํด๋ž˜์Šค ๊ฒฝ๋กœ ๋ณต์‚ฌ(Qualified Name)

 

 

 

๋ฉ”์ธํŽ˜์ด์ง€

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:set var="root" value="${pageContext.request.contextPath}"/>
	
	<a href="${root}/member/test.do"> Spring MVC Start!!! </a>	

</body>
</html>

web.xml

--> FrontController๊ฐ€ DispatcherServlet์œผ๋กœ ๋Œ€์ฒด

(๋งคํ•‘์ž‘์—…, ํŽ˜์ด์ง€ ์ด๋™ ์ž‘์—…,

์„œ๋ฒ„๊ฐ€ ์ผœ์ง€๋ฉด *.do๊ฐ€ ๋“ค์–ด์˜ค๊ณ  DispatcherServlet์„ ์ฐพ์Œ

servlet-name์€ ์•„๋ฌด๊ฑฐ๋‚˜ ํ•ด๋„ ๋˜์ง€๋งŒ, beansํŒŒ์ผ๊ณผ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผํ•จ

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>04_SpringMVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>SpringController</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>SpringController</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
</web-app>

 

spring Bean ConfigurationFile , bean๊ณผ aop๋ฅผ ์„ ํƒํ•ด ์ƒ์„ฑํ•ด์ค€๋‹ค.

SpringController-servlet.xml 

์ด๋ฆ„์„ ๊ฐ™๊ฒŒ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
	
	<!-- HandlerMapping / UI์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„๋ผ -->
	<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/member/*.do">memberController</prop>
			</props>
		</property>
	</bean>

</beans>

mapping -> contoller->service->dao ->mybatis

 

MemberController.java

package com.java.member.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.java.member.service.MemberService;

public class MemberController extends MultiActionController{	//Command
	private MemberService memberService;

	public MemberController() {}
	
	public MemberController(MemberService memberService) {
		this.memberService = memberService;
	}

	public void setMemberService(MemberService memberService) {
		this.memberService = memberService;
	}
	
	public String testing(HttpServletRequest request, HttpServletResponse response) {
		//์„œ๋น„์Šค - DAO & DTO - ์„œ๋น„์Šค 
		
		return "";
	}
}

 

MemberServiceImp.java

package com.java.member.service;

import com.java.member.dao.MemberDao;

public class MemberServiceImp implements MemberService {
	private MemberDao memberDao;


	public MemberServiceImp() {}


	public MemberServiceImp(MemberDao memberDao) {
		this.memberDao = memberDao;
	}


	public void setMemberDao(MemberDao memberDao) {
		this.memberDao = memberDao;
	}
	
}

 

MemberDaoImp.java

package com.java.member.dao;

public class MemberDaoImp implements MemberDao {
	//My bais SqlSessionTemplate
}

 

WEB-INF > SpringController-servlet.xml

membercontroller, service , Dao ์ถ”๊ฐ€

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
	
	<!-- HandlerMapping / UI์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„๋ผ -->
	<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/member/*.do">memberController</prop>
			</props>
		</property>
	</bean>
	
	<bean id="propertiesMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
		<property name="mappings">
			<props>
				<prop key="/member/test.do">testing</prop>
			</props>
		</property>
	
	</bean>
	
	<!-- MemberController -->
	<bean id="memberController" class="com.java.member.controller.MemberController">
		<constructor-arg ref="memberServiceImp"/>
		<property name="methodNameResolver" ref="propertiesMethodNameResolver"/>
	</bean>
	
	<!-- MemberService -->
	<bean id="memberServiceImp" class="com.java.member.service.MemberServiceImp">
		<constructor-arg ref="memberDaoImp"/>
	</bean>
	
	<!-- MemberDAO -->
	<bean id="memberDaoImp" class="com.java.member.dao.MemberDaoImp"></bean>
	<!-- MyBatis -->
	
</beans>

 

MemberController.java

testing ์ถ”๊ฐ€

package com.java.member.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.java.aop.HAspect;
import com.java.member.dto.MemberDto;
import com.java.member.service.MemberService;

public class MemberController extends MultiActionController{	//Command
	private MemberService memberService;

	public MemberController() { }
	
	public void setMemberService(MemberService memberService) {
		this.memberService = memberService;
	}

	public MemberController(MemberService memberService) {
		this.memberService = memberService;
	}
	
	public ModelAndView testing(HttpServletRequest req, HttpServletResponse res) {		
		System.out.println("OK");
		
		//Service -> DAO & DTO -> Service
		
		//View
		/*
		 * InternalResourceView view = new InternalResourceView("WEB-INF/member/test.jsp");
		 * ModelAndView mav = new ModelAndView();
		 * mav.addObject("msg", "hi"); 
		 * mav.setView(view);
		 */
		
		ModelAndView mav = new ModelAndView("member/test");
		mav.addObject("msg", "hi"); 
		
		return mav;
	}
	
	public ModelAndView memberRegister(HttpServletRequest req, HttpServletResponse res) {
		return new ModelAndView("member/register");
	}
	
	public ModelAndView memberRegisterOk(HttpServletRequest req, HttpServletResponse res, MemberDto memberDto) {
		//dto์˜ ์ด๋ฆ„๊ณผ ๋ทฐ์˜ form์˜ ์‹๋ณ„์ž name๊ฐ’์ด ๊ฐ™์•„์•ผํ•œ๋‹ค. dto์˜ resultMap์˜ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ๋œ๋‹ค.
		HAspect.logger.info(HAspect.logMsg + memberDto.toString());
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("memberDto", memberDto);
		
		memberService.memberRegisterOk(mav);
		
		return mav;
	}
	
	public ModelAndView memberIdCheck(HttpServletRequest req, HttpServletResponse res) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", req);
		
		memberService.memberIdCheck(mav);
		return mav;
	}
}

 

WEB-INF > SpringController-servlet.xml

InternalResourceViewResolver ์ถ”๊ฐ€

<!-- MVC RequestDispatcher / forward -->
<bean id="internalResourceViewResolver" 
              class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>	

 

 

ํ…Œ์ŠคํŒ… ํŽ˜์ด์ง€ ์ถ”๊ฐ€

WebContent > WEB-INF > member > test.jsp

<%@ 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>
	<h3>${msg}</h3>
</body>
</html>

 

 

 

 

 

 


[์ •๋ฆฌ] *** MVC - FrontController : Spring MVC *** 

 

FrontController: DispatcherServlet 

1-1) DispatcherServlet๋Š” FrontController ์—ญํ• ์„ ํ•˜์ง€๋งŒ, ์›น ์š”์ฒญ URL๊ณผ Command ๋งตํ•‘ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.  
1-2) DispatcherServlet์€ HandlerMapping์„ ์ฐธ์กฐํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๋งก๊ธด๋‹ค. 

FrontController-Map : HandlerMapping interface 
2-1) BeanNameUrlHandlerMapping 
2-2) SimpleUrlHandlerMapping : ์š”์ฒญ URL์„ ์ผ๊ด„์ฒ˜๋ฆฌํ•œ๋‹ค. 
2-3) ClassNameHandlerMapping 

FrontController-Command Pattern : ๊ฐ๊ฐ์˜ Controller์— ํ•ด๋‹น๋˜๋Š” ํด๋ž˜์Šค(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค. 
3-1) Controller 
3-2) AbstractController 
3-3) AbstractControllerController 
3-4) SimpleFormController 
3-5) MultiActionController : ํ•ด๋‹น URL์—์„œ ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค. 

FrontController-String viewPage : View interface 
4-1) InternalResourceView : ์˜ˆ์ œ์—์„œ๋Š” ModelAndView ์‚ฌ์šฉ.
4-2) JstlView 
4-3) VelocityView 
4-4) MappingJacksonJsonView 

FrontController-forward(request, response) : ViewResolver interface 
5-1) InternalResourceViewResolver 
5-2) ResourceBundleViewResolver 
5-3) VelocityViewResolver

๋ฐ˜์‘ํ˜•
Comments