두 개의 web.xml 비교해보자


안녕하세요.
고코더 입니다.



 1. 저번 블로그에 web-inf 아래 web.xml에 생성 방법을 글을 쓰니 두개의 xml에 대한 차이점을 물어보는 분이 계셔서 글을 남깁니다.


 2. 톰캣에 있는 web.xml 은 모든 프로젝트에 보통 기본설정(default)을 기록 합니다. 그리고 범용적인 프로젝트 설정을 기록하게 됩니다. 개발 파일을 공유할때 톰캣 파일을 함께 배포하기에 회사에서 혹은 큰 프로젝트에서 함께 써야 하는 꼭 필요한 기본설정을 기록 합니다. 범용적인 설정 위주로 기록합니다.

 3. web-inf 아래에 있는 web.xml은 해당 프로젝트에 대한 상세한(detail) 설정을 기록 합니다. 예를 들면 해당 프로젝트는 세션 타임아웃을 30초로 둔다면 여기에 기록합니다. 해당 사이트에서만 해야 하는 설정이기 때문입니다. 

모든 프로젝트에 적용할 범용설정은 config아래에 web.xml에 기록하고 
해당 프로젝트에만 사용할 기록은 web-inf 아래에 web.xml에 기록 합니다.

결론적으로 우선순위에 있는 xml은 톰캣에 있는 web-inf 입니다.
만약 같은 프로퍼티에 다른 내용이 있다면 web-inf에 있는 xml이 이를 오버라이드 합니다.

댓글로 첨언해주신 Terry 님에 자세하고 귀한 설명을 추가했습니다! 감사합니다. 언제나 부족한 설명있거나 잘못된게 있거나 궁금한게 있으면 댓글로 소통 합니다.


마무리


이런 자잘한 부분때메 자바가 복잡하죠.






댓글을 달아 주세요

  • Terry 2019.10.02 10:22  댓글주소  수정/삭제  댓글쓰기

    우연히 티스토리 글들을 보다가 이 글을 보게 되었는데요..보시는 분들이 오해의 소지가 있을것 같아서 첨언을 드립니다..
    2번에 언급했던 web.xml은 tomcat 디렉토리의 conf 디렉토리 밑에 있는 web.xml이 나오는 것인데요..
    이 web.xml의 역할은 기본설정..이란 말은 맞지만 해당 프로젝트만 그런게 아니라 모든 프로젝트에 적용되는 범용적인 설정을 여기다가 기록합니다..
    그리고 3번에 있는 web.xml은 WEB-INF 디렉토리가 있는 해당 프로젝트만 적용되는 설정을 여기에 적습니다..
    예를 들어서 세션 타임아웃을 설정하는 다음과 같은 항목이 web.xml에 있습니다..

    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>

    만약 이 항목이 2번 web.xml에 30으로 적혀있고 3번 web.xml에 20으로 적혀 있음 3번것으로 적용이 됩니다..
    그러나 2번 web.xml에 30으로 적혀있는데 3번 web.xml에는 이 설정값이 아예 없다면 2번 것으로 적용됩니다..
    거꾸로 2번 web.xml에 이 설정값이 없는데 3번 web.xml에 이 설정값이 있다면 3번 것으로 적용은 됩니다만 다른 프로젝트에서는 해당 프로젝트의 WEB-INF 디렉토리에 있는 web.xml에 이 항목이 없다면 그 프로젝트는 오류가 나겠죠..

    정리하자면 모든 프로젝트에 적용할 설정값을 2번 web.xml에 기록하고 만약 특정 프로젝트에만 다른 값을 설정하는 방식으로 override 할 경우에는 3번 web.xml에 기록하게 됩니다..

    해당 프로젝트에 대한 기본 설정, 상세 설정 개념으로 설명하실 경우 오해의 소지가 있을것 같아 주제넘게 댓글을 달았습니다..

    • Favicon of https://gocoder.tistory.com 고코더 2019.10.02 10:41 신고  댓글주소  수정/삭제

      테리님 감사합니다
      설명이 조금 부족했었는데
      첨언해주셔서 추가로 내용에 기록하여 내용을 보강했습니다^^
      감사합니다!


web.xml 생성하자


안녕하세요.
고코더 입니다.



 1. WEB-INF 아래 web.xml이 없을때가 있습니다.
초기 셋팅때는 특히나 없는 경우가 정상입니다.
이클립스에서는 간단한 방법으로 web.xml을 만드는 기능을 제공 합니다.


 2. 다이나믹 웹 프로젝트로 만든 후에 web-inf 아래 web.xml이 없습니다.

 3. 그럼 프로젝트에서 마우스 오른쪽 버튼을 누르고 
Java EE Tools -> Generate Deployment Descriptor sub 를 클릭 합니다.

 4. 그럼 자동으로 WEB-INF 아래 WEB.xml을 생성 해줍니다.


 5. 해당 파일을 열어보면 web.xml 기본 텍스트도 존재합니다.


마무리


web.xml 없다고 당황하지 마세요.



댓글을 달아 주세요


스프링에서 UTF-8 한글 나오도록 설정


안녕하세요.
고코더 입니다.


 1. 스프링으로 기본 프로젝트를 생성하면 한글이 ?로 출력 됩니다.
스프링 기본 프로젝트는 UTF-8로 만들어지지 않기 때문입니다.


 2. web.xml에 아래 코드를 추가해주세요.
엔코딩필터에 UTF-8을 사용할 수 있게 만들어주는 코드 입니다.
     <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>


 3. 위치는 맨아래에 추가합니다.  코드를 그대로 복사해서 붙혀넣어주세요.
xml이 변경되었기 때문에 서버를 재시작 합니다.


그리고 다시 접속해보면
물음표(?)로 보이던 한글이 정상적으로 출력 가능합니다.


마무리


영어권 국가였으면


댓글을 달아 주세요