Spring(MVC) - 기본세팅(2) - XML

2020. 9. 3. 21:22Java/Spring

반응형

XML을 이용하여 MVC 환경을 세팅하는 방법을 알아보도록 한다.

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

 

프로젝트를 생성하고 이전  포스트에서 작성한 pom.xml을 붙여 넣는다.  

 

그리고 WebContent -> WEB-INF 에 web.xml을 생성한다.

 

다음과 같이 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
	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_3_1.xsd">


	<!-- 현재 웹 어플리케이션에서 받아들이는 모든 요청에 대해 appServlet 이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
</web-app>

 

모든 실행에 대해서 springframework.web.servlet.DispatcherServlet로 실행한다.

indexs.jsp를 찾아서 실행한다고 보면 된다.

WebContent -> index.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>
<h5>index</h5>
</body>
</html>

 

위 처럼 프로젝트를 클릭하고 실행한다.

루트에서 index.jsp가 실행되면 여기까지 설정이 완료된 것이다.


WebContent -> WEB-INF 에 config 폴더를 생성하고 servlet-context.xml 파일을 생성한다.

 

해당 파일에서는 spring framework에 대한 설정을 한다.

 

현재는 따로 작성하지 않고 생성만 한다.

 

그 후 WebContent -> WEB-INF -> web.xml 을 다음과 같이 수정한다.

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
	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_3_1.xsd">


	<!-- 현재 웹 어플리케이션에서 받아들이는 모든 요청에 대해 appServlet 이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<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/config/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
</web-app>

추가 후 실행하면 콘솔에 오류가 난다.

 

 servlet-context.xml 에 별다른 코드를 입력하지 않아서 생긴 오류이다.

 

일단, 파일을 읽었으므로 정상적으로 세팅이 되고 있다.


다음으로 beans를 세팅 할 xml을 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>

그 후 web.xml에 해당 코드를 작성한다.

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

Controller 세팅

 

controller를 세팅하기 위해 src에 패키지를 새로 만들어준다.(cookingcoding.controller)

 

그후  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 어노테이션을 가지고 있는 클래스를 Controller로 로딩하도록 한다. -->
	<annotation-driven/>
	
	<!-- 스캔할 bean들이 모여있는 패키지를 지정한다. -->
	<context:component-scan base-package="cookingcoding.controller"/>

</beans:beans>			 					   

 

 

생성한 controller 패키지에 HomeController 클래스를 생성한다.

 

해당 클래스를 다음과 같이 작성한다.

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

 

/ 로 들어갔을 시 home 메소드를 실행시킨다.

 

기존에 생성한 index.jsp를 삭제하고 실행시킨다.

 

500 에러가 뜨면서 home이 출력된다.

 

HomeController 클래스에 다음과 같이 추가하고 실행한다.

 

@RequestMapping(value="/test",method = RequestMethod.GET)
public String test() {
	System.out.println("test");
	return null;
}

그 후 /test에 접속하면 다음과 같은 콘솔이 확인 가능하다.

 

 


View 설정

WEB-INF에 views 폴더를 생성한다.

 

그 안에 index.jsp를 생성한다.

 

 그 후 HomeController 클래스의 home 메소드를 다음과 같이 수정한다.

 

@RequestMapping(value="/",method = RequestMethod.GET)
public String home() {
	System.out.println("home");
	return "/WEB-INF/views/index.jsp";
}

 

해당 주소 입장시 메소드를 실행하고 index.jsp를 반환한다.

 

페이지와 콘솔 모두 잘 나오는 것을 확인한다.

 

HomeController의 반환값에서 중복될 것들이 많기에 중복을 줄여준다.

 

servlet-context.xml에 다음을 추가한다.

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

그 후 HomeController 클래스의 home 메소드의 리턴 값을 다음과 같이 수정하면 정상 작동한다.

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

정적파일(이미지,js,css) 경로 설정

 

해당 파일들을 보관할 resources 폴더를 WebContent에 생성한다.

 

servlet-context.xml에 다음을 추가한다.

<!-- 정적파일 경로 세팅 -->
<resources mapping="/**" location="/resources/"></resources>

그 후 resources 폴더에 image 폴더를 만들어 이미지를 한 개 넣는다.

 

 

다음과 같이 index.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>index</h3>
<img src="image/1.png">
</body>
</html>

 

 

이미지 로딩까지 완료! 여기까지가 xml을 이용한 세팅은 끝이다.

 

다음장에서는 java의 어노테이션을 이용한 세팅을 해보자!

반응형

'Java > Spring' 카테고리의 다른 글

Spring MVC - URL Mapping  (0) 2020.09.05
Spring MVC - 기본세팅(3) - JAVA  (0) 2020.09.04
Spring(MVC) - 기본세팅(1)  (0) 2020.09.02
Spring - mybatis  (0) 2020.09.01
Spring - JDBC(mysql)  (0) 2020.09.01