Spring MVC 프로젝트생성 2015 Web Service Computing
일반적인스프링의정의 스프링의정의 자바엔터프라이즈개발을편하게해주는오픈소스경량급애플리케이션프레임워크 스프링의기원 로드존슨 (Rod Johnson) 이라는유명 J2EE 개발자가출간한 Expert One-on- One J2EE Design and Development 이라는제목의책에소개된예제샘플 정의내단어 1 - 애플리케이션프레임워크 애플리케이션개발의전과정을빠르고편리하며효율적으로진행하는데일차적인목표 애플리케이션전영역을관통하는일관된프로그래밍모델과핵심기술제공
프레임워크란? 스프링의정의 GoF 의디자인패턴으로유명한랄프존슨 (Ralph Johnson) 교수는프레임워크를 " 소프트웨어의구체적인부분에해당하는설계와구현을재사용이가능하게끔일련의협업화된형태로클래스들을제공하는것 " 이라고정의 소프트웨어제작을편리하게할수있도록미리뼈대를이루는클래스와인터페이스를제작하여제공 프레임워크는애플리케이션의틀과구조를결정할뿐아니라, 그위에개발된개발자의코드를제어
정의내단어 2 경량급 스프링의정의 불필요하게무겁지않다는뜻 예전의무거운 EJB (Enterprise Java Beans) 의과도한엔지니어링기술에비해가벼운스프링을설명하는단어 코드는더단순하고개발과정은더편리해짐 EJB에서불편했던고급기능을세련된방식으로적용가능 스프링으로만들어진코드는 EJB기반으로만들어진코드와기술수준은비슷하면서도생산성과품질면에서는더유리함
스프링의정의 정의내단어 3 자바엔터프라이즈개발을편하게 근본적으로엔터프라이즈개발의복잡함을제거하고편하게개발할수있는해결책제공 EJB 1.0 스펙에서제시된 EJB 목표와비슷 스프링은위와같은 EJB 가궁극적으로이루려고했던목적을제대로실현해주는프레임워크
정의내단어 4 오픈소스 소스가모두에게공개되고특별한라이센스를취득할필요없이자유롭게이용가능 스프링에적용된오픈소스라이센스 Apache License Ver. 2.0 상업적인제품에포함하거나비공개프로젝트에자유롭게이용가능 다만스프링을이용하고있으며, 원저작자에대한정보는포함해야하는의무사항존재 필요하다면기존소스를수정하여사용가능하며수정된내용에대한공개의무는없음 온라인커뮤니티 의견공유, 버그신고, 기능추가요청, 피드백등 공식적인개발자및업체 스프링의정의 초기부터공식적인개발자그룹존재해왔음 SpringSource 업체에서코드개발주관해옴 2009 년 SpringSource 는 VMWare 업체에합병됨 더욱안정된환경과조직에서스프링소스를개발하고있음
전자정부프레임워크의토대 http://www.egovframe.go.kr/apc/selectappliedcase.do? menu=1&submenu=5&leftsub=1
프로젝트생성
프로젝트생성
Enable Auto-Import 클릭 프로젝트생성
프로젝트생성 File->Setting 메뉴에서 encoding 으로검색해서가능한모든것을 UTF-8 로변경
.gitignore 는 github 에올라가길바라지않는백업파일이나개인적인설정파일들을기입하는파일이다. 프로젝트최상위폴더에.gitignore 라는파일을생성하고, 아래와같이복사.idea target *.iml src/main/resources/dev/*.gitignore 생성.gitignore 에등록했는데도반영이안될경우 아래와같이 cache 된파일들을지우고새로반영 1) git rm r cached. 2) git add.
생성된프로젝트를 Git 에추가하기 1) git init 2) git add. 3) git commit -m "first commit 4) github에로그인해서 repository 생성 5) git remote add origin https://github.com/your_id/your_repository.git 6) git push -u origin master
프로젝트기본구조 /src/main/java.java 파일이위치 /src/main/webapp.jsp 파일이위치 /src/main/resources 설정파일 (.xml,.properties..) 이위치 /target 실행파일 (.class 파일및빌드패키지 ) 위치 pom.xml Maven 설정파일 External Libraries 외부라이브러리파일
pom.xml 설정 pom.xml 1/2 <?xml version="1.0" encoding="utf-8"?> <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> <name>web Service and Computing - Spring</name> <groupid>koreatech.cse</groupid> <artifactid>wsc</artifactid> <version>001</version> <packaging>war</packaging> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputencoding>utf-8</project.reporting.outputencoding> <spring.version>4.2.0.release</spring.version> </properties> <dependencies> <!-- Servlet --> <dependency> <groupid>javax.servlet</groupid> <artifactid>javax.servlet-api</artifactid> <version>3.0.1</version> <scope>provided</scope> </dependency>
pom.xml 2/2 pom.xml 설정 <dependency> <groupid>javax.servlet.jsp</groupid> <artifactid>jsp-api</artifactid> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> <version>1.2</version> </dependency> <!-- Spring --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version}</version> </dependency> </dependencies> </project>
dispatcher-servlet.xml 설정 /src/main/web/web-inf/dispatcher-servlet.xml 생성 <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
services.xml 설정 /src/main/resources/services.xml 생성이름은다른것으로해도무관하다.(spring-config.xml, app-config.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="koreatech.cse" /> <bean id="contentnegotiatingviewresolver" class="org.springframework.web.servlet.view.contentnegotiatingviewresolver"> <property name="viewresolvers"> <list> <bean class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/web-inf/views/" /> <property name="suffix" value=".jsp" /> </bean> </list> </property> </bean> </beans>
web.xml 설정 /src/main/web/web-inf/web.xml 생성 <?xml version="1.0" encoding="utf-8"?> <web-app version="3.0" 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 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>web Service and Computing</display-name> <context-param> <param-name>contextconfiglocation</param-name> <param-value> classpath:services.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.contextloaderlistener </listener-class> </listener> <!--dispatcher-servlet.xml--> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
프로젝트타입지정 File->Project Structure->Modules 에서 + 버튼클릭후앞서생성한설정파일들체크 이프로젝트가 Spring Web 프로젝트이고, 설정파일은이러한것이있다라는것을 Intellij 에알려줌
DispatcherServlet 간단소개
HomeController 설정 /src/main/java/ 에 koreatech.cse.controller 패키지생성 HomeController.java 생성 package koreatech.cse.controller; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.requestmapping; @Controller @RequestMapping("/") public class HomeController { } @RequestMapping public String home(model model) { model.addattribute("textfromcontroller", "World"); return "hello"; }
hello.jsp 설정 /src/main/webapp/web-inf/views 에 hello.jsp 생성 <%@ page contenttype="text/html;charset=utf-8" language="java" %> <html> <head> <title></title> </head> <body> Hello, ${textfromcontroller} </body> </html>
실행환경설정
실행 브라우저에 http://localhost:8080 입력 Hello, World 라는텍스트가나타나는지확인
/target 폴더리뷰 앞서톰캣실행환경설정에서 Build 'wsc:war exploded' artifact 라는문구가의미하는것은아래와같이 프로젝트를 war 압축이풀린상태에서실행함 을의미하는것이다.
JRebel 설치.jsp 는수정해도톰캣재시작이필요하지않지만.java 는수정하면톰캣을재시작해야반영된다. 개발상의편의를위해서재시작이필요없게해주는플러그인설치 https://zeroturnaround.com/software/jrebel/trial/
JRebel 설치 간단한가입후나오는 activation code 를복사 나중을위해개인적으로안전한곳에저장하자.
JRebel 설치 Intellij 에서 Plug-in 검색, 설치
JRebel 설치 앞서의 Activation code 붙여넣기