[Spring-Framework] 8. Spring MVC 웹 프로젝트 생성하기, UTF-8 문제(1)
Spring MVC 프로젝트를 이해하기 위해서는 몇 가지 가벼운 지식이 요구된다.
* 웹 서버: Apache Tomcat 9
- JSP/Servlet 기초 이해력
* 라이브러리: Maven(메이븐)
* Spring 프레임워크없이, JSP/Servlet 기반으로 MVC2를 직접 구현할 수 있는 수준
jQuery, Ajax 등 기반으로 만들어진 시중 책들이 굉장히 많은데 이건 별도의 영역이다.
같이 취급해서는 안 된다고 본다.
엄밀히 보면, jQuery나 Ajax는 javascript 영역이다.
시중 책들이 워낙 어렵게 소개되고 있어서 간단하고 알기 쉽게 소개하려고 한다.
운영체제: Microsoft Windows 10
개발환경: Spring Tool-Suite 4-4.7.2. Release (Eclipse 기반 개발)
웹 서버: apache-tomcat-9.0.37-windows-x64
1. Eclipse Marketplace에서 "Spring Tools 3 Add-On for Spring Tools 4 3.9.14. RELEASE" 설치하기
(부재: Spring Legacy Project 기능 추가하기)
Spring MVC Project를 쉽고 빠르게 사용하려면, Spring Legacy Project 기능을 설치해야 한다.
현재 최신 STS 4-4.7.2를 보면, Spring Boot나 Spring Starter 등 최신 기능을 주력으로 하는 것 같다.
그림 1. Eclipse의 Help 메뉴
"Help->Eclipse Marketplace"를 들어간다.
그림 2. STS 검색하기
sts를 검색한다.
"Spring Tools 3 Add-On for Spring Tools 4 3.9.14. RELEASE"를 Install한다.
(중략함. 설치 과정 자체가 쉬움.)
2. 새 프로젝트 만들기
File-> New-> Others를 누른다.
그림 3. Project 생성하기
Spring 폴더의 Spring Legacy Project를 선택한다.
Next를 누른다.
그림 4. Project 생성하기
Spring MVC Project를 선택한 후 Next를 누른다.
그림 5. Project 생성하기
프로젝트 상위 패키지명을 입력한 후 Finish를 누른다.
의외로 쉽게 MVC 프로젝트가 생성되는 것을 확인할 수 있다.
참고로 com.springMVC1.web으로 작성하면, 태스트 배포 주소는 "홈페이지주소:8080/web"이 된다.
3. 신규 프로젝트 구경하기
시작이 반이다.
Spring MVC에 겁먹지 말고, 프로젝트를 구경해보기 바란다.
그림 6. Controller 모습
그림 7. View 영역의 WEB-INF/views/home.jsp 모습
그림 8. servlet-context.xml
과거에는 힘들게 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 https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<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>
<context:component-scan base-package="com.springMVC1.web" />
</beans:beans>
* 소스코드 원문: servlet-context.xml
그림 9. root-context.xml
그림 10. servlet-context.xml
web.xml 파일이다.
servlet 작성하면서, 작업해본 경험이 있을 수 있다. 동일하게 사용할 수 있다.
참고로 maven으로 웹 프로젝트를 개설하면, 자동으로 생성된다.
그림 11. pom.xml
Spring Framework는 maven 프로젝트의 핵심인 pom.xml 기능을 그대로 사용할 수 있다.
그림 12. Hello World - 초기 접속
Spring MVC를 처음으로 구성하고 접속해보면, 그림 12의 화면을 볼 수 있다.
4. 한글 문제 해결하기(UTF-8 문제)
한글 문제 해결에 관한 이슈이다.
web.xml 파일을 수정하여 해결할 수 있다.
그림 13. web.xml에서 한글 문제 해결하기
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<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>
<!-- UTF-8 -->
<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>
* 파일명: web.xml
[첨부(Attachments)]
그림 14. 한글 문제가 해결된 모습
5. Controller - 입문하기
Spring MVC Controller를 활용하여 쉽고 간단하게 작성하는 방법을 소개하겠다.
그림 15. 클래스 만들기(Controller로 개조 예정)
패키지에서 오른쪽 버튼을 클릭한다.
New->Class를 클릭한다.
"BoardController"를 하나 만들어준다.
그림 16. 클래스 만들기(Controller) - HomeController.java
HomeController의 내용을 신규 생성한 "BoardController.java" 파일을 열어서 복사, 붙여넣기를 해준다.
그림 17. 클래스 만들기(Controller) - BoardController.java
편집을 완료한 BoardController의 모습이다.
정정:
(1) HomeController.class -> BoardController.class로 변경 (탈자)
(2) Welcome home: The ..... -> Welcome board: The...로 변경
그림 18. lisp.jsp 생성하기 -> src/main/webapp/WEB-INF/views/board/list.jsp
views내에 board폴더를 만든다.
board폴더 내에 list.jsp 파일을 만든다.
그림 19. 서버를 로드했을 때 모습 - STS 4
Spring-Framework MVC를 웹서버에서 실행시켜보면, 매우 간단한 구조로 동작하는 모습을 살펴볼 수 있다.
web.xml 파일 수정도 안 했으며, Controller하고 list.jsp 파일만 만들었는데 작동하는 모습을 보면, 프레임워크가 좋긴 좋다는 것을 느낄 수 있다.
그림 20. board/list 호출한 결과
* 맺음글(Conclusion)
매우 간단한 형태로 Spring MVC Project를 구성하는 방법에 대해서 소개하였다.