유정잉

53일차 스프링 [ MVC ] 본문

네이버 클라우드 부트캠프/복습 정리

53일차 스프링 [ MVC ]

유정♡ 2024. 5. 7. 13:06

[ 일반 project에서 maven project로 바꾸는 방법 1 - dynamic -> convert maven ] 

     1) Porject 오른쪽 클릭 -> Configure -> Convert to Maven Project ( project가 maven으로 바뀐 거 확인할 수 있음)

 

 

[ 일반 project에서 maven project로 바꾸는 방법 2 - sts 설치 ] 

     1) Help -> Eclipse Marketplace 혹은 spring sts 검색 후 다운로드 

https://spring.io/tools

 

Spring | Tools

 

spring.io

 

[ 일반 project에서 maven project로 바꾸는 방법 3 - 전자정부프레임워크 ] 

     1) 개발자 교육 -> 교육자료 -> win or man 환경에 맞는 버전 설치 

https://www.egovframe.go.kr/home/sub.do?menuNo=65

 

교육자료 | 표준프레임워크 포털 eGovFrame

처리중입니다. 잠시만 기다려주십시오.

www.egovframe.go.kr

 

 


[ MVC_Basic_01 - project ]

config 작업을 xml 파일로 

src -> main -> webapp -> WEB-INF -> config(폴더생성) -> root-context.xml과 servlet-context.xml 활용

 

1) Dynamic project로 MVC_Basic_01 생성 -> Convert Maven -> pom.xml 파일 생성 된 것 확인

 

2) pom.xml 환경 설정 

[ pom.xml ]

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
						http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>MVC_Basic_01</groupId>
	<artifactId>MVC_Basic_01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.1</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<!-- 라이브러리 버전관리 -->
	<properties>
		<javax.servlet-version>4.0.1</javax.servlet-version>
		<javax.servlet.jsp-version>2.3.3</javax.servlet.jsp-version>
		<javax.servlet.jsp.jstl-version>1.2</javax.servlet.jsp.jstl-version>
		<org.springframework-version>5.2.2.RELEASE</org.springframework-version>
		<!-- <org.springframework-version>4.3.25.RELEASE</org.springframework-version> -->
	</properties>
	<!-- 라이브러리 셋팅 -->
	<dependencies>
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${javax.servlet-version}</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>${javax.servlet.jsp-version}</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>${javax.servlet.jsp.jstl-version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>


	</dependencies>
</project>

 

3) src -> main -> wewbapp -> WEB-INF -> config & views 폴더와 web.xml xml 파일 생성 

[ web.xml ]

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       
						http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">

	<!-- 현재 웹 애플리케이션에서 받아들이는 모든 요청에 대해 appServlet이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<!-- 요청 정보를 분석해서 컨트롤러를 선택하는 서블릿을 지정한다. -->
	<servlet>
        <servlet-name>appServlet</servlet-name>
        <!-- Spring MVC에서 제공하고 있는 기본 서블릿을 지정한다. -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- Spring MVC 설정을 위한 xml 파일을 지정한다. -->
        <init-param>
        	<param-name>contextConfigLocation</param-name>
        	<param-value>/WEB-INF/config/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!-- Bean을 정의할 xml 파일을 지정한다. -->
    <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>/WEB-INF/config/root-context.xml</param-value>
    </context-param>
    
    <!-- 리스너설정 -->
    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- 파라미터 인코딩 필터 설정 -->
    <filter>
    	<filter-name>encodingFilter</filter-name>
    	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    	<init-param>
    		<param-name>encoding</param-name>
    		<param-value>UTF-8</param-value>
    	</init-param>
    	<init-param>
    		<param-name>forceEncoding</param-name>
    		<param-value>true</param-value>
    	</init-param>
    </filter>
    
    <filter-mapping>
    	<filter-name>encodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
[ config 폴더 안 servlet-context.xml 파일 ]

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
			 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			 xmlns:beans="http://www.springframework.org/schema/beans"
			 xmlns:context="http://www.springframework.org/schema/context"
			 xsi:schemaLocation="http://www.springframework.org/schema/mvc
			 					 http://www.springframework.org/schema/mvc/spring-mvc.xsd
			 					 http://www.springframework.org/schema/beans
			 					 http://www.springframework.org/schema/beans/spring-beans.xsd
			 					 http://www.springframework.org/schema/context
			 					 http://www.springframework.org/schema/context/spring-context.xsd">
			 					 
		<!-- 스캔한 패키지 내부의 클래스 중 controller로 로딩하도록 한다 -->
		<annotation-driven/>
		
		<!-- 스캔할 Bean들이 모여있는 패키지를 지정한다  -->
		<context:component-scan base-package="kr.bit.controller"/>
			 			
		<!--  controller메서드에서 반환하는 문자열 앞 뒤에 붙힐 경로 설정 -->		 
	 	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	 		<beans:property name="prefix" value="/WEB-INF/views/"/>
	 		<beans:property name="suffix" value=".jsp"/>
	 	</beans:bean>
	 	
	 	<!-- 정적파일 세팅 -->
	 	<resources location="/resources/" mapping="/**"></resources>
	  					 
</beans:beans>
[ config 폴더 안 root-context.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"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
	   					   http://www.springframework.org/schema/beans/spring-beans.xsd">
	   					   
</beans>
[ views 폴더 안 indes.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>
	<h1>Spring MVC</h1>
</body>
</html>

 

4) src/main/java에 kr.bit.controller package 생성 -> HomeController.java class 생성 

package kr.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
	
	@RequestMapping(value="/", method=RequestMethod.GET)
	public String home() {
		System.out.println("home");
		return "index";
	}

}

 


[ MVC_Basic_02 - project ]

config 작업을 .java 파일로

src/main/java -> kr.bit.config(패키지생성) -> RootAppContext, ServletAppContext, SpringConfigClass java class 생성 

 

1) src/main/java -> kr.bit.config package생성 후 RootAppContext, ServletAppContext, SpringConfigClass java class 생성 

package kr.bit.config;

import org.springframework.context.annotation.Configuration;

@Configuration
public class RootAppContext {  //root-context.xml

}
package kr.bit.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
public class ServletAppContext implements WebMvcConfigurer{
	
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		WebMvcConfigurer.super.configureViewResolvers(registry);
		registry.jsp("/WEB-INF/views/",".jsp");
	}
	
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		WebMvcConfigurer.super.addResourceHandlers(registry);
		registry.addResourceHandler("/**").addResourceLocations("/resources/");
	}
}
package kr.bit.config;

import javax.servlet.Filter;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringConfigClass extends AbstractAnnotationConfigDispatcherServletInitializer {
	
	@Override
	protected String[] getServletMappings() {
		// TODO Auto-generated method stub
		return new String[] {"/"};
	}
	
	@Override
	protected Class<?>[] getServletConfigClasses() {
		// TODO Auto-generated method stub
		return new Class[] {ServletAppContext.class};
	}
	
	
	@Override
	protected Class<?>[] getRootConfigClasses() {
		// TODO Auto-generated method stub
		return new Class[] {RootAppContext.class};
	}
	
	
	@Override
	protected Filter[] getServletFilters() {
		// TODO Auto-generated method stub
		CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
		encodingFilter.setEncoding("UTF-8");
		return new Filter[] {encodingFilter};
	}
	

}

 


[ MVC_Basic_03 - project ]

 

1) SpringController와 Sub1Controller의 java class에서 @RequsetMapping 작업 후 views 폴더에 jsp 파일 실행

   방법 3가지 !

   첫번째방법 : views 폴더 안에 있는 jsp

   두번쩨방법 : views 폴더 안에 sub1 폴더 안에 jsp @RequestMapping(value="sub1/spring3",method=RequestMethod.GET)로 Mapping

   세번째방법 : views 폴더 안에 sub2 폴더 안에 jsp 를 @RequestMapping("/sub2") 로 Mapping

[ kr.bit.controller package의 SpringController.java 자바 클래스 파일 ]

package kr.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class SpringController {

	@RequestMapping(value="/spring1",method=RequestMethod.GET)
	public String spring1() { //파일 넘길때는 반환형 String 사용 
		return "spring1"; //spring1.jsp 화면으로 이동
	}
	
	@RequestMapping(value="/spring2",method=RequestMethod.GET)
	public String spring2() {
		return "spring2"; //spring1.jsp 화면으로 이동
	}
}
[ kr.bit.controller package의 Sub1Controller.java 자바 클래스 파일 ]

package kr.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class Sub1Controller {

	@RequestMapping(value="sub1/spring3",method=RequestMethod.GET)
	public String spring3() {
		return "sub1/spring3";
	}
	
	@RequestMapping(value="sub1/spring4",method=RequestMethod.GET)
	public String spring4() {
		return "sub1/spring4";
	}
}
[ kr.bit.controller package의 Sub2Controller.java 자바 클래스 파일 ]

package kr.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/sub2")
public class Sub2Controller {
	
	@RequestMapping(value="/spring5",method=RequestMethod.GET)
	public String spring5() {
		return "sub2/spring5";
	}
	@RequestMapping(value="/spring6",method=RequestMethod.GET)
	public String spring6() {
		return "sub2/spring6";
	}
}
[ index.jsp 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>
	<a href="spring1">spring1</a><br>
	<a href="spring2">spring2</a><br>
	
	<a href="sub1/spring3">sub1/spring3</a><br>
	<a href="sub1/spring4">sub1/spring4</a><br>
	<a href="sub1/spring5">sub1/spring5</a><br>
	<a href="sub1/spring6">sub1/spring6</a><br>
</body>
</html>
[ spring1.jsp 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>
	<h1>스프링1</h1>
</body>
</html>

 

 

 


[ MVC_Basic_04 - project ]

 

@RequestMapping(value="", method={RequestMethod.GET,RequestMethod.POST}),

@GetMapping, @PostMapping

[ SpringController.java class 파일 ]

package kr.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다 
@Controller
public class SpringController {

	@RequestMapping(value="/spring1" , method=RequestMethod.GET) //url만 가능(=GET)
	public String spring1() {
		return "spring1";
	}
	
	@RequestMapping(value="/spring2" , method=RequestMethod.GET) //url만 가능(=GET)
	public String spring2() {
		return "spring2";
	}
	
	@GetMapping("/spring4") //url만 가능(=GET)
	public String spring4() {
		return "spring4";
	}
	
	@PostMapping("/spring5") //button만 가능(=POST)
	public String spring5() {
		return "spring5";
	}
	
	@RequestMapping(value="/spring7" , method= {RequestMethod.GET , RequestMethod.POST}) //url과 button 둘다 가능 (=GET과 POST) / 중괄호{} 이용하여 한번에 쓰는 법 
	public String spring7() {
		return "spring7";
	}
//  이런식으로 따로 따로 한번에 쓰는 것은 불가능 밑에 처럼 아예 따로 따로 써야 됨  
//	@GetMapping("/spring8") 
//	@PostMapping("/spring8")
//	public String spring8() {
//		return "spring8";
//	}
	
	@GetMapping("/spring8")
	public String spring8() {
		return "spring8";
	}
	 
	@PostMapping("/spring8")
	public String spring88() {
		return "spring8";
	}
}
[ index.jsp 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>
	<a href="spring1">spring1</a><br>
	<form action="spring1" method="post">
		<button type="submit">spring1</button>
	</form>
	
	<a href="spring2">spring2</a><br>
	<form action="spring2" method="post">
		<button type="submit">spring2</button>
	</form>
	
	<a href="spring3">spring3</a><br>
	<form action="spring3" method="post">
		<button type="submit">spring3</button>
	</form>
	
	<a href="spring4">spring4</a><br>
	<form action="spring4" method="post">
		<button type="submit">spring4</button>
	</form>
	
	<a href="spring5">spring5</a><br>
	<form action="spring5" method="post">
		<button type="submit">spring5</button>
	</form>
	
	<a href="spring6">spring6</a><br>
	<form action="spring6" method="post">
		<button type="submit">spring6</button>
	</form>
	
	<a href="spring7">spring7</a><br>
	<form action="spring7" method="post">
		<button type="submit">spring7</button>
	</form>
	
	<a href="spring8">spring8</a><br>
	<form action="spring8" method="post">
		<button type="submit">spring8</button>
	</form>						
		
</body>
</html>

 

[ spring1.jsp 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>
	<h1>스프링1</h1>
</body>
</html>

728x90