본문 바로가기

기타

web.xml

★ Index
1. web.xml 이란???
2. 구성 내용
3. 작성 규칙

4. web.xml 틀
5. 구성 태그 설명



[1] web.xml이란?
정의 : Web Application의 Deployment Descriptor(환경파일) 로써 XML형식의 파일~!!!

[2] 구성내용
1) ServletContext의 초기 파라미터
2) Session의 유효시간 설정
3) Servlet/JSP에 대한 정의
4) Servlet/JSP 매핑
5) Mime Type 매핑
6) Welcome File list
7) Error Pages 처리
8) Listen/Filter 설정
9) 보안

추가설명
- web.xml은 <web-app> 태그로 시작하고 종료하는 문서로써 web.xml이 정의 된
Web Application의 동작과 관련된 다양한 환경 정보를 태그 기반으로 설정하는 파일이다.
- web.xml 의 작성 규칙은 XML Schema 로 정의 되어 있고, web.xml을 구성하는 모든 태그들에
대하여 모두 학습하는 것은 의미가 없다.(헉..뜨끔!! 다 학습해버릴라고 했는데..ㅋㅋㅋ)
web.xml의 태그들과 관련된 Servlet 기술을 학습 할 때 같이 학습하는 것이 좋은 방법이다.(고뢔??--;;)

[3] 작성 규칙
1) Servlet 2.3까지의 web.xml의 작성 규칙은 DTD파일이였고, 2.4부터 XML Schema파일로 바뀜.
2) 다음과 같이 web.xml 루트 엘리먼트인 <web-app>태그에 사용 될 XML Schema를 선언해 주어야 함.

접기

접기

3) web.xml에는 목적과 용도에 따라 필요한 태그만을 작성하면 되지만 태그의 작성 위치가 중요하다!
라고 하였는데..스키마에 위치한 순서대로 태그 작성을 하지 않아도 된다.
하지만! filter -> filter-mapping 등은 순서로대 해야 할 듯 싶다!(당연한 소리인가;;)
4) XML 문서이니 만큼 대소문자 구분, 속성에 값을 할당 할 때 인용부호지정, 시작 태그와 종료 태그의
매핑에 대하여 주의 깊게 작성하여야 함.

자~! 여기서 잠깐!! 스키마를 살펴 보자!
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
위의 링크를 따라서 다운로드를 받고 에디터로 열어보자!

ex) 기타 등등 설정이 되어있다~

접기

<xsd:sequence>
<xsd:element name="description"
type="javaee:descriptionType"
minOccurs="0"
maxOccurs="unbounded"/>
<xsd:element name="transport-guarantee"
type="javaee:transport-guaranteeType"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID"/>
</xsd:complexType>

.............................................

<xsd:element name="filter"
type="javaee:filterType"/>
<xsd:element name="filter-mapping"
type="javaee:filter-mappingType"/>
<xsd:element name="listener"
type="javaee:listenerType"/>
<xsd:element name="servlet"
type="javaee:servletType"/>
<xsd:element name="servlet-mapping"
type="javaee:servlet-mappingType"/>
<xsd:element name="session-config"
type="javaee:session-configType"/>
<xsd:element name="mime-mapping"
type="javaee:mime-mappingType"/>
<xsd:element name="welcome-file-list"
type="javaee:welcome-file-listType"/>
<xsd:element name="error-page"
type="javaee:error-pageType"/>
<xsd:element name="jsp-config"
type="javaee:jsp-configType"/>
<xsd:element name="security-constraint"
type="javaee:security-constraintType"/>
<xsd:element name="login-config"
type="javaee:login-configType"/>
<xsd:element name="security-role"
type="javaee:security-roleType"/>
<xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
<xsd:element name="message-destination"
type="javaee:message-destinationType"/>
<xsd:element name="locale-encoding-mapping-list"
type="javaee:locale-encoding-mapping-listType"/>


접기



[4] web.xml 틀!! 은 대~~충 이러하다. --;;

접기

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name></display-name>

/* 리스너 지정 시 사용되는 태그이다.
HttpServletRequest 객체, HttpSession 객체, ServletContext객체에 대하여 리스너 정의가 가능하다. */

<listener>
< listener-class> </listener-class>
< /listener>

/* Servlet Context의 초기값을 지정 할 수 있으며 <web-app> 안에서 사용된다. */
<context-param>
< param-name></param-name>
< param-value></param-value>
< /context-param>

/* Servlet에 별칭을 정의 하거나 초기 파라미터 등을 지정 할 때 사용 된다. */
<servlet>
< servlet-name>spring</servlet-name>
< servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
< init-param>
< param-name>contextConfigLocation</param-name>
< param-value></param-value>
< /init-param>
< load-on-startup>1</load-on-startup>
< /servlet>

<!-- Spring Framework Dispatcher Servlet Mapping -->
/* 어떠한 URI 패턴으로 요청 하였을 때 어떠한 Servlet이 수행 되도록 할 것인지 매핑하는 태그이다. */
<servlet-mapping>
< servlet-name></servlet-name>
< url-pattern></url-pattern>
< /servlet-mapping>

/* 필터를 지정할 때 사용 되는 태그이다. 필터는 Web Application에 존재하는 모든 파일에 대하여 또는 원하는 Servlet과 JSP 단위로 설정하는 것이 가능하다. */
<filter>
< filter-name>encodingFilter</filter-name>
< filter-class></filter-class>
< init-param>
< param-name>encoding</param-name>
< param-value>UTF-8</param-value>
< /init-param>
< /filter>

<filter-mapping>
< filter-name>encodingFilter</filter-name>
< url-pattern>/*</url-pattern>
< /filter-mapping>

/* <welcome-file-list>는 클라이언트에서 파일명 없이 요청하였을 때 대신 리턴되는 기본 파일을
설정하는 기능을 지원한다. 여러파일들이 지정되면 지정된 순서로 우선 순위가 적용 된다. 디폴트는 index.html이다. */

<welcome-file-list>
< welcome-file></welcome-file>
< /welcome-file-list>

/* 생성된 HttpSession 객체 유효 시간을 설정하는 태그로 HttpSession객체가 생성된 후로 정해진 시간 동안 클라이언트로 부터 요청이 오지 않으면 생성된 HttpSession 객체는 자동 삭제 되는데 이때 이 정해진 시간을 설정하는 태그이다. */
<session-config>
< session-timeout></session-timeout>
< /session-config>

</web-app>

접기


[5] 구성 태그 설명
web.xml의 내용을 아래의 내용을 참고하여 살펴보면 된다.

<web-app> 아래 레벨의 태그들


출처 : http://blog.naver.com/b1ack7circ1e?Redirect=Log&logNo=10052647428

추가적인 태그 설명

접기


3. 배포설명자(web.xml)

3. Web Application의배포

3.1 web.xml 의태그들설명

icon : 웹 애플리케이션을나타내기위해IDE나GUI툴에서사용되는하나또는두개의 이미지 파일들의위치를
지정하는데사용한다.

Display-name : GUI툴이 웹애플리케이션을표시하기위해사용하는이름을지정하는데사용

description : 웹 어플리케이션에대한설명을나타낸다.

distributable : Distributable 요소가있다는것은웹어플리케이션이다중서버간에분산배치될 수있다는것을
의미한다.

Context-param : 어플리케이션의 초기화파라미터를선언하는데사용

filter : 서블릿이나 jsp 페이지로들어오는요청정보를사전에걸러내는기능

Filter-mapping : 필터를 지정했다면filter-mapping을지정하여하나이상의서블릿과연결함

listener : 서블릿2.3버전으로부터 세션이나서블릿컨텍스트가생성또는수정되거나소멸되는 것을알려주는
이벤트리스너

servlet : 서블릿이나jsp페이지에 초기화파라미터나사용자url들을할당할때사용되는 서블릿 jsp이름을
지정

Servlet-mapping : 상대URL경로를좀더쉽게다루기위해기본URL를변경할때사용

Session-config : 일정시간동안 세션으로접근이없을경우서버는메모리를절약하기위해
사용하지 않는메모리를삭제한다세션의시간유지기능

Mime-mapping : 특정한 MIME형을가진파일을웹어플리케이션에넣어두고싶은경우사용

Welcome-file-list : Url이 파일명이아닌디렉토리명으로받았을경우기본적으로불러올파일명을
지정하는데 사용

Error-page : Http상태코드가 반환되거나예외가발생햇을때그내용을출력하는페이지

Tag-lib : 태그라이브러리 설명자파일의별칭을지정하는데사용

Resource-envref : Reource-env-ref 요소는자원(resource)과연관되어관리되는객체를
선언하는 역할을한다.

Resource-ref : Resource-ref 요소는 외부에서참조해야할자원을선언할때사용

Security-constraint : 어떤url이 보호되도록지정하는역할을한다. Login-config와연결되어사용

Login-config : 보안된 페이지로들어가려는사용자에대한서버의인증방식을지정해준다.

Security-role : 통합개발 환경에서보안정보를좀더조작하기쉽게만들어준다.

Env-entry : 웹 어플리케이션의환경항목을선언한다.

Ejb-ref : 엔터프리이즈 빈의홈에대한레퍼런스를선언

Ejb-local-ref : 엔터프라이즈 빈의로컬홈에대한레퍼런스를선언

출처 : http://blog.naver.com/kang_129/100052364767

접기



참고사항 web.xml tag 실행 순서!!+ㅁ+ good~
단, 찾아본 결과 http://java.sun.com/dtd/web-app_2_3.dtd 의 스키마에서 나온 것들이 많았다..
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 에서..더 찾아봐야 할 것 같다.
그냥 아래내용은 참고만 해두면 좋을 것 같다^-^;;;

접기


<icon>
< display-name>
< description>
< distributable>
< context-param>
< filter>
< filter-mapping>
< listener>
< servlet>
< servlet-mapping>
< session-config>
< mime-mapping>
< welcome-file-list>
< error-page>
< taglib>
< resource-env-ref>
< resource-ref>
< security-constraint>
< login-config>
< security-role>
< env-entry>
< ejb-ref>
< ejb-local-ref>

 

-------------------------------------------------------------------------------------------------------

 

 

------------------------------------------------------------------------------------------

## 순서

1. <welcome-file-list>

이 프로젝트가 들어 있는곳을 웹에서 접속하면 이곳에 설정으로 인해

파일명을 지정해 주지 않아도 기본으로 index.html 파일이 로딩된다.

2. <servlet>

기본적으로는 servlet-mapinng에 의해서 실행되지만 load-on-startup이 들어있을경우는

스스로 실행된다.

3. <servlet-mapping>

요청이 들어왔을대 어떤 서블릿들 중 어떤것을 실행시켜줄까에 대한 멥핑을 해주는 역할이다.

4. 다시 <servlet>

위에 멥핑에 의하여 해당 서블릿이 동작한다.

## 위의 순서에 입각한 아래코드 분석

웰컴 파일 리스트로 index.html을 해놨으므로 해당 프로젝트에 접근하거나 실행하면

파일이름을 지정하지 않을경우 index.html이 기본페이지로 띄어짐

서블릿에서 2개의 자동실행 구문(load-on-start)부분이 있는데 하나는 ActionServlet클래스(struts관련)를 동작시키기 위한 용도고 다른하나는 DbcpInit(데이터베이스풀 관련)클래스를 동작시키기 위한 부분이다

서블릿 멥핑을 통하여 모든 ??????.do 요청이 들어왔을때 서블릿중 action이란 이름을 가진 서블릿을 실행하도록 해놓았다. action이란 이름을 가진 서블릿은 바로 struts-config이다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts_Board</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts-config.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<display-name>DBCPinit</display-name>
<servlet-name>DBCPinit</servlet-name>
<servlet-class>com.itea.db.DBCPinit</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>