- maven dependency를 보고 의존관계를 이해하자
- jsp
- 결과를 출력 JSTL & EL(WAS에 있다)
- was에 올라갈때만 실행된다.
- jstl 사용하려면 라이브러리를 지정해줘야 한다.
- POM.xml
- <scope>provided</scope>
컴파일 할때만 사용하고 배포할때는 사용하지 말라는 뜻
- maven-compiler-plugin플러그인이 지정안되어 있다면 maven프로젝트는 JDK 1.5를 사용
- org.apache.tomcat.maven : maven에서 tomcat을 실행한다.
<build>
<finalName>mvcexam</finalName>
<plugins>
<!-- 해당 플러그인이 지정안되어 있다면 maven프로젝트는 JDK 1.5를 사용 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- maven에서 tomcat을 실행한다. -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<charset>UTF-8</charset>
<uriEncoding>UTF-8</uriEncoding>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</build>
- DispatcherSerlvet 을 FrontController로 설정하기
- 1.WAS는 배포시 처음에 web.xml을 찾는다.(서블릿)
2. 3.0부터는 javax.servlet.ServletContainerInitializer을 web.xml 을 대신하여 사용할수 있다(서블릿) -> 구현한게 없으면 WebApplicationInitializer 를 찾는다.
3. org.springframework.web.WebApplicationInitializer 인터페이스를 구현해서 사용한다 (스프링MVC)(스프링은 이미 ServletContainerInitializer 구현한 클래스를 가지고 있다. )
-> classPath에서 WebApplicationInitializer를 구현한 것을 찾는다.
- POM.xml에 설정 기반으로 classPath에 라이브러리를 넣어준다.(scope 설정에따라 classpath에 따라 라이브러리가 안들어갈수 있다.)
-> 로컬에서는 IDE tool 이 maven을 통해 배포한다면 maven이 해준다.
- 모든 설정은 스프링을 통해서 하라는 의도가 있다.(하지만 그렇게 안해도 된다.)
- DispatcherSerlvet는 설정파일을 읽어서 메모리에 올려준다.
- 내부적으로 InternalResourceViewResolver을 호출하는 부분이 있다.
- 아래의 그림에서 보라색 부분이 개발자가 만드는 부분이다.
- DispatcherSerlvet
- web.xml 에 <url-pattern>/</url-pattern> 으로 설정이 되어있으면 context root 이하의 모든 요청을 처리하는것을 의미하며 Font Controller이라 부른다.
- client에서 request하는 content-type 또는 path의 정보의 전략에 따라서 분석을 하여 실행한다.
- DispatcherSerlvet이 @Controller이 붙어 있는 클래스에서 @GetMapping, @PostMapping, @RequestMapping 어노테이션을 읽어서 Handler Mapping이라는 객체를 만든다. 설정된 어노테이션에따라 객체가 생긴다. (같은 어노테이션끼리는 같은 path를 가지면 안된다.)
- Handler Adapter가 선택한 Handler Mapping객체를 실행하고 view name을 리턴한다. (스프링은 view를 꼭 jsp 만 쓰는것은 아니다.)
- View Resolver는 여러개 생길수 있다. context-type에 담긴 형식에 따라서 맞는 view객체를 찾아서 응답해준다.
ex) client에서 content-type 를 text/hml형식으로 요청했다면InternalResourceViewResolver( jsp를 처리하는 View Resolver )를 사용한다.
- Web.xml (서블릿 스펙이다. 어떤 WAS든 설정은 같다.)
- context root설정은 WAS마다 다르다.
- <url-pattern>/</url-pattern> 은 context root 경로 이하인 경로 설정이다.
- 스프링 웹 MVC 대한 대부분의 설정이 자동으로 되는 것이 많다.
- @Configuration를 선언할때 사용
- Tomcat 과 웹어플리케이션
- context root는 웹 어플리케이션마다 유일한 값을 가져야 한다.
- WAS마다 설정방법이 다르다. (Tomcat, Weblogic 등에 따라 다르다.)
- tomcat은 ROOT 라는 이름의 웹어플리케이션은 / 로 인식을 한다. 나머지는 보통 폴더이름이 context root가 된다.
- http://localhost:8080/hello.jsp (ROOT 웹어플리케이션의 hello.jsp) http://localhost:8080/manager/hello.jsp (manager 웹 어플리케이션의 hello.jsp)
- 예를들어 게시판 웹 어플리케이션(board)가 있다고 가정해보자
board폴더 안의 내용을 jar로 묶어서 하나의 파일로 만든다. board.war 로 만든다.
- tomcat에 배포하려면 어떻게 해야할까?
webapps폴더에 복사를 하고 tomcat을 실행한다. tomcat이 실행되면서 board.war의 압축을 해제한다. webapps ---- board ---- war파일의 내용이 묶인것이 풀린다.
http://localhost:8080/board/list.jsp 이런식으로 호출을 할 수 있다.
- 웹어플리케이션 구조를 가지고 있다면 war파일로 묶지 않아도 구동될수 있다. war파일은 전달하기 편하기 위해 사용.
- intellij 에서 Tomcat
- target폴더만들어서 배포 시킨후 실행한다.
- maven프로젝트 인것을 intellij가 자동으로 인식한다.
- intellij에서 tomcat local로 실행하도록 설정하고 프로젝트 이름이 mvcexam 일 경우에 intellij가 관리하는 tomcat에 IntelliJ가 board.war파일을 만들어서 배포한다.(deploy)
- Maven
- 라이프 사이클의 하나의 단위 명령을 goal이라고 한다. (clean, compile , package등등)
- maven-compiler-plugin이 지정안되어 있으면 Jdk 1.5를 사용한다.
- mvn plugin 설정을 활용하면 GUI환경을 사용하지않고 JAVA와 MAVEN만 있으면 실행할 수 있다.
- maven에서 tomcat plugin 을 추가하여 톰캣을 구동할 수 있다.
콘솔에서 : mvn tomcat7:run (톰캣실행)
- <finalName>mvcexam</finalName> 이름이 context path(application path, Context root)가 된다. http://localhost:8080/mvcexam 로 접속
<!-- maven에서 tomcat을 실행한다. -->
<build>
<finalName>mvcexam</finalName>
<plugins>
<!-- 해당 플러그인이 지정안되어 있다면 maven프로젝트는 JDK 1.5를 사용 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- maven에서 tomcat을 실행한다. -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<charset>UTF-8</charset>
<uriEncoding>UTF-8</uriEncoding>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</build>
- <path>/</path>로 설정을 추가하면 http://localhost:8080/ 로 접속
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<charset>UTF-8</charset>
<uriEncoding>UTF-8</uriEncoding>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
0 개의 댓글:
댓글 쓰기