* 참고한 사이트주소
https://seongilman.tistory.com/16[SEONG]
\ web.xml
web.xml은 Deployment Descriptor 배포서술자 라고도 하며 Tomcat의 DD는 web.xml로 환경설정 부분을 담당한다.
Deployment Descriptor?
배포 서술자(DD, Deployment Descriptor)는 java EE 스펙으로 웹 앱의 기본적인 설정을 위해 작성하는 파일로, 보통은 WEB-INF/web.xml 파일을 말한다.
배포 서술자는 web.xml 이외에도 EJB를 위한 ejb-jar.xml, 웹서비스를 위한 webservices.xml등이 있으며, JSP와 서블릿만으로 구성된 경우에는 web.xml파일만 사용하면 된다고 한다.
web.xml(DD)의 이점?
1. 작성한 소스코드를 수정하지 않고도 웹앱을 '커스터마이징'할 수 있따.
2. 이미 테스트 된 소스코드의 수정을 최소화 한다.
3. 소스코드가 없어도 수정이 가능하다.
4. 재 컴파일 하지 않고 서버의 자원을 변경할 수 있다.
5. 접근제한, 보안, 오류페이지를 설정하고 초기화 값의 구성 등을 할 수 있다.
web.xml의 구조 및 설정
이부분은 xml파일임을 알리는 부분이다. 내용에 한글을 포함할 경우가 있기 때문에, 인코딩 속성은 UTF-8로 설정한다. (eclipse는 web.xml 생성시 자동 설정)
we-app
web-app 태그는 web.xml 파일의 루트 엘리먼트이다. 모든 웹 앱 설정은 태그 사이에 위치하여야 한다.xsi:schemaLocation옆의 서정은 해당URL에 있는 파일의 스키마 정의를 따른다는 뜻. 위의 인코딩과 태그는 이클립스 web.xml 생선시 자동으로 등록되어 있다.
display-name: DD파일의 title과 같은 역할.
description: 어떤 프로젝트를 위한 배포 서술자인지 상세하게 기록한다.
ContextLoaderListener
Spring MVC는 web.xml-dispatcher.xml로부터 1개 이상의 스프링 설정 정보를 읽어들일 수 있다. 이 떄 한 개 만으로 충분한 경우 dispatcher에 지정하면 되지만 2개 이상이면 너무 복잡해지므로 contextConfigLocation초기화 파라미터에 설정파일 목록을 지정하면 된다.
org.springframework.web.context.ContextLoaderListener contextConfigLoation /WEB-INF/spring/application-context.xml /WEB-INF/spring/application-context-security.xml
servlet
DispatcherServlet 클래스를 초기화하여 spring의 servlet context를 생성한다.
초기화 parameter로 bean 메타 설정 파일의 위치를 넘겨준다.
servlet-mapping은 url pattern으로 지정된 값으로 웹 요청이 들어왔을 때 servlet-name에 지정된 이름의 servlet를 호출하겠다는 의미이다.
spring에서는 DispatcherServlet이 모든 요청을 받고, 요청의 URL과 맵핑하는 Controller에 위임한다. 예를 들어 Controller class에 @RequestMapping("/list") annotation으로 지정되어 있는 method가 존재하면 http://localhost:8080/list.do 요청 시 DispatcherServlet이 해당하는 URL과 mapping되는 정보를 찾은 후 연결되는 method에 요청을 위임한다.
dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/dispatcher-servlet.xml 1 // servlet 최초 요청시 우선순위 지정옵션 dispatcher *.do
filter
필터는 웹 앱 전반에 걸쳐 특정 URL이나 파일 요청 시 먼저 로딩되어 사전에 처리할 작업을 수행(필터링)하고 해당 요청을 처리하는 자바 웹 애플리케이션 유형 중 하나이다.
에서는 해당 필터를 적용할 URL패턴이나 Servlet 등을 등록한다.
스프링 시큐리티 예제를 만들어 보면서도 시큐리티 관련 filter를 등록해야 한다.
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.amorepacific.foundation.config.sitemesh.MySitemeshConfigureFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Encoding Filter -->
<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>
<!-- Spring Security Filter Chain -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
session-config
세션 설정
30
error-page
각 error-code 별 page 설정
<!-- Error Page -->
<error-page>
<error-code>400</error-code>
<location>/error/bad_request.do</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/access_denied.do</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/page_not_found.do</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/program_error.do</location>
</error-page>
welcome-file-list
웹앱 요청시 제일먼저 보여질 메인페이지 시작파일을 지정한다.
index.html
ContextLoaderListener: 서블릿에서 제공하는 ServletContextListener를 확장하여 만든 것으로
웹앱이 서블릿컨테이너에 로딩될 떄 실행되는 리스너.
이 리스너가 하는 일은 웹앱이 로딩될 때 webApplicationContext를 만드는 것이다. 이렇게 생성된 WebApplucationContext는 ContextConfigLocation에 설정한 bean 설정파일을 사용해서 웹앱에서 사용할 객체를 관리해주는 역할을 한다.
ContextLoaderListener는 어플리케이션 전체에서 사용할 WAC을 만드로 DispatcherServlet은 해당 서블릿에서만 사용할 WAC을 만든다.
webApplicationContext는 상속구조를 가질 수 있는데 이 때 몇가지 중요한 특징이 있다.
자식WAC(서비스, DAO)에서 부모WAC을 참조할 수 있지만, 부모WAC에서는 자식 WAC의 빈을 참조할 수 없다.
자식 WAC에서 어떤 빈을 참조할 때, 먼저 자기 자신 내부에 있는 빈을 참조한다. 만약 자기 자신 내부에 없다면 부모 쪽에서 찾아보고, 부모쪽에도 원하는 빈이 없다면 예외를 발생시킨다. 그래서 보통 WAC(CLL)rhk WAC(DS)로 다음과 같이 빈을 나워서 관리한다.
'Dev > spring' 카테고리의 다른 글
Learn Spring 5( Boot 2, JPA, Thymeleaf, AOP...) - 18. @OneToMany and @ManyToOne Annotations for Relating Entities (0) | 2019.12.18 |
---|---|
[스프링프레임워크] AOP 구현 (0) | 2019.11.10 |
[스프링프레임워크] transaction, rollback, jndi (0) | 2019.11.10 |
[스프링프레임워크] 스프링 주요특징 - 의존성주입(DI)를 통한 객체 간의 관계 구성 (0) | 2019.10.30 |
[스프링프레임워크] lazy-init 태그 (0) | 2019.10.29 |