2016. 12. 13. (Tue)
[Spring 강의] L01 Hello_Spring
JSP Project가 끝나고 오늘부터 Spring 수업이 시작되었다.
그리고 기존 JSP 때와 다른 점을 비교해가면서 jsp page 호출 하는 법,
Parameter 받아오는 법 등을 배워보았다.
JAVA, JSP에 이어 SPRING까지 모든 것이 다 중요하지만,
실무에서 Spring이 제일 많이 쓰인다고 하니..
오늘부터 마음을 다시 잡고 매일매일 배운 내용을 포스팅하고
잘 배워봐야겠다!!
맨 밑에 pom.xml에서 설정이 필요하다.
상세설명은 주석을 참고하자
아래의 예제를 살펴보자
ex) pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | <?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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.spring</groupId> <artifactId>l01_hello</artifactId> <name>l01_hello_spring</name> <packaging>war</packaging> <version>1.0.0-BUILD-SNAPSHOT</version> <properties> <java-version>1.8</java-version> <org.springframework-version>4.1.7.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> <!-- 대소문자 구분이 안되는 표기를 사용하는 이유는 Maven에 있다. pom.xml을 메이븐 설정 -> 메이븐 프로젝트라 부른다. 라이브러리를 사용하기 위해 다운받아서 WEB-INF/lib 폴더에 넣었던 것을 pom.xml 설정으로 자동으로 다운 받게 되는 구조가 Maven이다. 기존의 웹프로젝트도 구조가 다른 이유는 메이븐 프로젝트이기 때문이다. pom.xml은 대소문자를 구분하지 않는다. 그래서 대부분의 이름을 "_" 표기로 한다. 메이븐은 lib 폴더를 --> <!-- artifactIdsms 메이븐이 배포될때 설치될 장소, context-path로 지정 --> <!-- java 버전 바꾸는 방법 1. Project Facets의 java를 1.8 2. Java Compiler의 Java Build Path를 jdk1.8로 수정 3. pom.xml의 java를 1.8로 수정 --> <!-- spring mvc는 나온지가 5~7년 전 버전 때문에 너무 구버전이라 설정을 다시해야한다. 메이븐이 지원하는 Spring Framework-version은 4. 때데 너무 하위 버전이라 오류를 일으킬 수 있다. 스프링에서 mvc 프레임워크로 지원하는 메이븐은 4.1.7이 최적이다. 4.2.8, 4.3.4(3.~4.) 메이븐을 지원 안함. --> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${org.slf4j-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> </exclusions> <scope>runtime</scope> </dependency> <!-- @Inject --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.6</source> <target>1.6</target> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>org.test.int1.Main</mainClass> </configuration> </plugin> </plugins> </build> </project> | cs |
그리고 servlet-context.xml 도 살펴보자
상세설명은 주석을 참고하자
ex) servlet-context.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?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"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <!-- @Controller의 위치를 찾아서 Servlet 경로를 지정해준다. 이 때 context:component-scan으로 지정한 위치의 객체만 찾는다. 이 프로젝트의 Controller(HttpServlet)의 위치는 com.spring.l01_hello가 가지는 class들 중에 @Controller가 있는 class다. --> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <!-- servlet에서 WEB-INF 이하의 폴더에 있는 JSP 문서를 찾도록 돕는 기술 JSP 문서는 배포 파일이지만 서버언어가 포함되어 있다. 기존의 프로젝트는 webContent(webapp) 이하에 view를 두고 있어서 서버의 경로가 노출될 위험이 있다. 서버의 경로가 노출되면 해커에게 파일 업로드 공격을 당할 수 있다. 이것을 막기 위해 view의 위치를 WEB-INF 이하에 둔다. WEB-INF 이하 경로는 외부에서 접근할 수 없다. -> 내부에서도 접근하기 힘들다. 때문에 내부(서블릿, controller)에서 접근하기 위한 기술로 ViewResolver를 사용한다. --> <!-- 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 context 기술이고 해당 패키지 이하의 class를 객체화하고 DI 컨테이너에서 사용할 수 있다. servlet-context.xml에서는 context:component-scan으로 @Controller 위치를 가지고 annotation-driven으로 해당 객체를 스캔(servlet으로)한다. --> <context:component-scan base-package="com.spring.l01_hello" /> </beans:beans> | cs |
HomeController.java에서 추가 설명을 보자
ex) HomeController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.spring.l01_hello; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ //@Controller DispatcherServlet class를 의존성 주입한다. //DispatcherServlet은 아파치 lib인 HttpServlet과 동일하다. //@Controller를 해서 extends HttpServlet과 동일한 역할을 한다. //servlet-context.xml에서 context:component-scan을 이용해서 //@Controller가 있는 패키지 이하 클래스를 객체로 가지고 //annotation-driven으로 @Controller 이하에 있는 @RequestMapping를 검사 후 url을 등록한다. @Controller public class HomeController { //HomeController는 프로젝트 생성시 자동으로 만들어지는 컨트롤러(서블릿)이다. //SPRING은 모든 VIEW를 경로로 들어내는 것을 싫어한다. //가령 webConten(wepapp) 이하에 index.jsp를 만들어도 /로 인식할 수 없도록 하고 있다. //그래서 context-path 호출시 초기에 호출되는 상태를 ㅁ만든 것이 HomeController이다. private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate ); return "home"; } } | cs |
주석에도 설명이 있듯이 스프링은 나온지 조금 시간지나서 설정을 해줄게 많다.
잊어버리지 않도록 잘 기억해두자!!
1. pom.xml에서 Java version 1.6 에서 1.8로 수정한다. 그리고 Spring-framework version을 4.1.7.RELEASE로 설정!!
2. JAVA BUILD PATH에서 JavaSE-1.8 설정
3. Java Compiler 에서 Java 1.8 설정
4. Project Facets 에서 Java 1.8 설정
Server를 실행해보자!
지금까지와는 다르게 프로젝트 폴더를 선택 후 실행을 누르면 아래와 같이 뜬다.
Run on Server를 선택하고 실행하면 Home.jsp 화면이 실행되는 것을 확인할 수 있다.
'IT story > Spring' 카테고리의 다른 글
[Spring 강의] 한글깨짐현상 해결 & 프로젝트 복사 (0) | 2016.12.15 |
---|---|
[Spring 강의] L03 Controller2 (0) | 2016.12.14 |
[Spring 강의] L02 Controller (0) | 2016.12.13 |