Spring MVC 시작하기

zooyeong·2023년 5월 25일
0

17주차

목록 보기
3/4
post-thumbnail

https://www.postman.com/downloads/

localhost에서 사용할 수 있게 실습에 사용하는 툴을 다운로드 해준다.
>>> Windows 64-bit 다운 클릭

Java JDK 11 버전 설치
https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_windows-x64_bin.zip

설치 후 압축해제가 완료되면 환경변수의 새로만들기를 통해 JAVA_HOME의 값으로 JDK 설치 폴더를 지정한다.

이후 Path 경로에 JDK 설치 폴더 > bin 폴더 경로를 추가한다.

기존 이클립스에서 자바를 17버전으로 사용하고 있어 다음과 같은 안내창과 함께 이클립스를 실행할 수 없다고 뜬다.

이클립스 설치 경로에 들어가서 eclipse.ini 파일에 들어간 후 Version이 17로 되어 있는 것을 11로 변경해준다.

이제 이클립스에 접속이 가능하다.

>>> Preferences > Java > Compiler > 11 확인

>>> Preferences > Java > Installed JREs > jdk-11.x.x 확인

Dynamic Web Project를 생성한 후 Maven Project로 전환해준다.

이후 프로젝트 안에 생성된 pom.xml에 들어가서 몇가지 dependency를 추가해줄 것이다.

구글에 maven repository를 검색한 후 아래 페이지에 접속.

https://mvnrepository.com/

dependency는 총 4개를 추가해줄 것이다. 아래 드래그된 코드들을 pom.xml 파일 안 <dependencies></dependencies> 태그로 감싸 넣어준다.

>>>Java Servlet API 4.0.1

>>>JavaServer Pages(TM) API 2.3.3

>>>JSTL 1.2

JSTL은 붙여넣고나면 오류가 생기는데 이는 javax.servlet.jsp.jstl 이 javax.servlet 으로 옮겼기 때문이다. 드래그 된 부분을 지워주면 빨간줄은 사라진다!
javax.servlet.jsp.jstl > javax.servlet

이번엔 <properties></properties> 태그 안에 각 dependency의 groupId에 -version을 붙여주고 버전을 넣어준다. 이후 dependency > version > ${} 중괄호 안에 프로퍼티 태그 이름을 넣어준다. (아래 사진 참고)



↓↓↓↓↓↓↓ 전체 코드

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



이번엔 프로젝트의 WEB_INF 폴더 안에 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">
							
							
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<filter> <!-- jsp 파일에 일일이 UTF-8을 넣어주지 않게 -->
		<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> <!-- 전체 다 encoding 해줌 -->
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

▲web.xml



이후 web.xml > param-value 경로에 맞는 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">

	<annotation-driven/>
	
	<context:component-scan base-package="com.app.controller"></context:component-scan>
	
	<!-- Controller에서 중복되는 경로를 하나로 설정 -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/"></beans:property>
		<beans:property name="suffix" value=".jsp"></beans:property>
	</beans:bean>
	
	<!-- 경로를 지정 -->
	<!-- resources 아래에 하위 폴더 생성해서 사용 -->
	<resources location="/resources/" mapping="/**"></resources>
	
</beans:beans>

▲servlet-context.xml



spring 폴더 아래에 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>

▲root-context.xml



servlet-context.xml base-package 경로에 맞는 패키지 생성 후 예시로 사용할 Controller를 만들어주었다.

package com.app.controller;

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

@Controller
public class SampleController {
	
	@RequestMapping("/samplehome")
	public String samplePage() {
		return "sample";
	}
}

>>> url 주소를 프로젝트명 뒤에 RuquestMapping에 입력한 주소(/samplehome) 입력 시 return 값에 들어 있는 경로로 이동
>>> url 주소에 jsp 파일명을 입력하지 않아도 이동할 수 있음!
>>> 원래는 return 값에 /WEB-INF/views/gh.jsp 이렇게 전체 경로를 받아야하지만, servlet-context.xml에서 중복되는 경로를 설정해주었기 때문에 파일명만 return 값으로 들어오면 된다.


>>> spring MVC 기본세팅완료.

profile
Have a good day ⌯’▾’⌯

0개의 댓글