Web.xml(배포기술자)
- 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파일은 전달하기 편하기 위해 사용.
- WEB-INF, classes, lib 폴더는 고정적으로 필수로 있다.
intellij 에서 Tomcat
- target폴더만들어서 배포 시킨후 실행한다.
- maven프로젝트 인것을 intellij가 자동으로 인식한다.
- intellij에서 tomcat local로 실행하도록 설정하고 프로젝트 이름이 mvcexam 일 경우에 intellij가 관리하는 tomcat에 IntelliJ가 board.war파일을 만들어서 배포한다.(deploy)
톰캣 디렉토리 구조
- /bin
- 톰캣 실행시 사용하는 스크립트 모아둔 곳
- /conf
- 웹 어플리케이션에 필요한 설정 파일 모아둔 곳
- /lib
- 톰캣에서 사용하는 라이브러리 모아둔곳
- /logs
- 오류 정보를 기록하는 로그 디렉토리
- /temp
- 임시 파일을 저장하는 디렉토리
- /webapps
- 웹 어플리케이션 배포하는 디렉토리
- /work
- JSP가 Servlet 컴파일되는 디렉토리
client -----> was 에게 요청시 담기는 정보
- 요청정보
- GET / http1.1 : RequestMethod 방식
- 헤더정보(파라미터, 쿠키, 브라우저정보, 언어정보, OS ....)
- 빈줄
- 바디
Tomcat 에서 Web.xml
- conf 폴더에서 Web.xml
- DefaultServlet
- path 가 '/' 이면 모든 요청을 처리한다는 뜻이다.
- path '/' 설정은 DefaultServlet이 처리 로 예약되어있다.
- 정적인 파일을 처리하는 로직이 있다.
- x.jsp, x.jspx 확장자 형식은 JSPSerlvet이 처리한다.
프로젝트 에서 Web.xml
- Web.xml 설정
- path를 '/' 으로 설정하면 설정이 오버라이딩 되어 DispatcherServlet가 모든요청을 처리한다.
- @Controller, @RestController(@RequestMapping)을 처리한다.
- 동적인 파일은 DispatcherServlet 에서 처리하고 정적인 파일은 DefaultServlet에서 처리 하도록 한다.(DefaultServlet에 구현되어있기 떄문에 사용)
- 요청이 오면 DispatcherServlet이 요청받은 path를 찾고나서 없으면 Tomcat의 DefaultServlet한테 넘기고 없으면 404에러가 나온다.(설정을 해야한다.)
- DispatcherServlet에서 요청온 path를 찾고 없으면 DefaultServlet을 사용한다는 설정
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.test.controller" })
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
// default servlet handler를 사용하게 합니다.
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
0 개의 댓글:
댓글 쓰기