CHAR DATATYPE은 FIXED LENGTH CAHRACTER STRING을 저장합니다.      
COLUMN LEGTH는 1 에서 255BYTES 까지의 DATA를 저장할 수 있읍니다.  
    
COLUMN길이가 10 으로 정의되었을때 한번 INSERT 문장을 통해 5 BYTES를 입력하였다면 
나머지 5 BYTES는 SPACE처리되어 그 DATA의 SIZE는 10 BYTE가 됩니다.      
 
 
반면에 VARCHAR2 DATATYPE은 VARIABLE-LENGTH CHARACTER STRINGS을 저장합니다. 
COLUMN LENGTH는 1에서 4000BYTES 까지의 DATA를 저장할수 있읍니다.  
     
COLUMN길이가 10 으로 정의되었을때 한번 INSERT 문장을 통해 5 BYTES를 입력하였다면 
나머지 5 BYTES는 NULL 처리되어 그 DATA의 SIZE는 5 BYTE가 됩니다.      
 
 
우리가 SQLPLUS의 VSIZE함수를 통해 알아보면 다음과 같습니다.      
 
SQL>CREATE TABLE varchar_test(
    char_ CHAR(10),
    varchar_ VARCHAR2(10));
 

SQL> INSERT INTO varchar_test(char_ , varchar_) VALUES('aaaaa', 'bbbbb');
1 개의 행이 만들어졌습니다.
     
 
SQL>SELECT VSIZE(char_) "CHAR_DATATYPE", VSIZE(varchar_) "VARCHAR2_DATATYPE"  
    FROM varchar_test
 
 
CHAR_DATATYPE   VARCHAR2_DATATYPE
-------------           -----------------
           10                                 5
           
 
위와 같은 특징을 갖고 있기 때문에 정확히 구분하여 사용해야만 SPACE를 절약할수 있고 
ERROR를 방지할수 있습니다.      
 
만약 사용자가 COMPARISON상에서 ANSI호환성을 요구한다면 를 DATA TYPE를 CHAR로 선언해야 합니다.
즉 나머지공간이 STRING COMPARISONS에서 중요한다면 CHAR로 해야합니다.     
 
그런 특수한 경우 제외한 나머지 경우에는 VARCAHR2로 사용하는 것이 SPACE가 절약 될 것입니다. 

출처 -  http://cafe.naver.com/javada.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=119& 

'DB > Common' 카테고리의 다른 글

SQLite  (0) 2012.03.02
varchar와 varchar2의 차이와 number(5,2) 의미  (1) 2012.02.13
TABLE의 key  (0) 2012.01.09
데이터베이스 언어(DBL; DataBase Language)  (0) 2012.01.03
Table, Field, Record 관계  (0) 2011.12.20
Posted by linuxism
,

-XML(eXtensible Markup Language)-

 

 구조,데이터,표현이 분리된 데이터 정의를 위한 언어

 구조는 DTD(Document Type Definition) 혹은

 XSD(XML Schema Definition) 로 나뉘어지며

  데이터는 DTD혹은 XSD에 의해 트리 형태의 XML문서로 표현 되고

(여기서 표현된다 함은 단순 히 구조적인 외관모습임)

 마지막 표현(Description)의 경우는

 XSL(eXtensible Stylesheet Language) 이 이용된다.

 

 

 

XSL없이 단순히 XML파일만을 익스플로러에서 읽었을 경우

Tree형태로 내용이 그대로 드러남.

 


 
 
반면 XSL을 작성 후
 
 

 
 
 
위 화면은 XML-XSD-XSL의 경우이고
XML-DTD-XSL의 경우를 살펴보면



출처 - http://dontcryme.blog.me/30014949013


'Development > XML' 카테고리의 다른 글

XML - XML 예약문자  (0) 2012.09.16
xml namespace  (0) 2012.03.24
Markup Language  (0) 2012.01.27
XML DOM(Document Object Model)  (1) 2012.01.23
XSD(XML Schema Difinition)  (0) 2012.01.18
Posted by linuxism
,

was - web.xml 설명

Web/WAS 2012. 2. 12. 23:49

Web.xml이란?

Web Application Deployment Descriptor(환경 파일)로서 XML 형식의 파일

 

 

Web.xml에 작성되는 내용

-ServletContext의 초기 파라미터

-Session의 유효시간 설정

-Servlet/JSP에 대한 정의

-Servlet/JSP 매핑

-Mime Type 매핑

-Welcome File list

-Error Pages 처리

-리스너/필터 설정

-보안

 

Web Application은 임의의 디렉토리로 구성되며 JSP, HTML 기타 이미지 파일 등이 존재하게 되는 디렉토리와 Deployment Desciptor(DD파일, 환경 파일)가 존재하는 디렉토리 그리고 Servlet과 같은 서버상에서 수행되는 클래스 파일들이 존재하게 되는 디렉토리가 이미 정해져 있다. 최상위 디렉토리(docbase) edu 디렉토리라고 한다면 다음과 같은 구조가 된다.


 

 

[출처] web.xml이란?|작성자 theone


web.xml <web-app>태그로 시작하고 종료하는 문서로서 web.xml이 정의된 Web Application의 동작과 관련된 다양한 환경 정보를 태그기반으로 설정하는 파일입니다.

web.xml의 작성 규칙은 XML Schema로 정의되어 있습니다. 그러므로 XML Schema에 대한 사전 지식이 없는 경우에는 작성 규칙을 보면서 이해한다는 것이 좀 어려윤 것은 사실입니다. web.xml을 구성하는 모든 태그들에 대하여 모두 학습하는 것은 의미 없습니다. web.xml의 태그들과 관련된 Servlet 기술을 학습할 때 같이 학습하는 것이 좋은 방법입니다.

 

작성 규칙1 :

-Servlet 2.3 까지의 web.xml의 작성 규칙은 DTD 파일이었고, 2.4부터 XML Schema 파일로 바뀜

-다음과 같이 web.xml의 루트 엘리먼트인 <web-app> 태그에 사용될 XML Schema를 선언해 주어야 함

 

 

-web.xml에는 목적과 용도에 따라 필요한 태그만을 작성하면 되지만 태그의 작성 위치가 중요

-XML 문서이니만큼 대소문자 구분, 속성에 값을 할당할 때 인용 부호 지정, 시작 태그와 종료 태그의 매핑에 대하여 주의 깊게 작성하여야 함


 다음은 <web-app> 태그에 정의 가능한 주요 서브 태그들에 대한 리스트입니다. 서브 태그는 XML Schema에 정의된 순서대로 작성해 주어야 합니다.


 

web.xml은 주로 다음고 ㅏ같은 형식의 내용으로 작성 됩니다.


 


다음은 web.xml에 정의될 수 있는 주요 태그에 대한 설명입니다. 다음에 소개 하는 태그들은 모두 <web-app>의 바로 아래 레벨의 태그들입니다.

  
 

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







   <!-- DBCP 설정 추가 -->
   <resource-ref>
    <description>Oracle DataSource</description>
    <res-ref-name>jdbc/myoracle</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
   </resource-ref>
  
   <!-- JSP, Servlet, JDBC를 이용한 자유게시판 서블릿 설정 -->
   <servlet>
     <servlet-name>boardServlet</servlet-name>
     <!--
     .do로 끝나는 서블릿 주소 요청이 있는 경우
     BoardServlet 클래스를 연결합니다.
      -->
     <servlet-class>com.board.BoardServlet</servlet-class>
   </servlet>
   <servlet-mapping>
     <servlet-name>boardServlet</servlet-name>
     <!--
     *.do는 서블릿 주소가 .do로 끝나는 모든 경우를 말함
     서블릿 주소는 임의 지정가능.
     여러개의 서블릿 주소가 있는 페이지 운영시
     예를 들어, *.do, *.ac 등.
      -->     
     <url-pattern>*.do</url-pattern>
   </servlet-mapping>

출처 -  
 http://blog.naver.com/mxncbv?Redirect=Log&logNo=110107153297






Deployment Descriptor로 각 어플리케이션의 환경을 설정하는 부분을 담당한다. WAR 파일이 패키지 될 때 같이 포함되며 root directory 밑에 /WEB-INF 디렉토리에 위치한다.

by kkaok
2003-05-12

 

web.xml 의 구조

xml 정의와 schema 선언

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd>
위 스키마는 sun 사에서 미리 정의된것이다.

 

웹 어플리케이션의 환경 설정

<web-app>
    <servlet>
      <servlet-name>사용되는 클래스명</servlet-name>
      <servlet-class>클래스 경로</servlet-class>
    </servlet>
    <mime-mapping>
      <extension>txt</extension>
      <mime-type>text/plain</mime-type>
    </mime-mapping>
    <welcome-file-list>
      <welcome-file>기본 파일 경로</welcome-file>
      <welcome-file>두번째 시작하는 파일 경로</welcome-file>
    </welcome-file-list>
    <taglib>
      <taglib-uri>태그라이브러리</taglib-uri>
      <taglib-location>경로</taglib-location>
    </taglib>
</web-app>

 

web.xml은 xml파일이다. 따라서 xml 작성과 동일한 규칙이 적용된다.
환경설정은 <web-app>으로 시작하고 </web-app>로 끝난다. 그외 삽입되는 요소로는 다음과 같다.

.ServletContext Init Parameters 
.Session Configuration 
.Servlet/JSP Definitions 
.Servlet/JSP Mappings 
.Mime Type Mappings 
.Welcom File list 
.Error Pages

 

web.xml의 elements의 순서
각 element의 순서는 아래 순서에 따른다.

<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*>


자주 쓰이는 elements 예제

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd>

<web-app>
    <display-name>어플리케이션 이름</display-name>
    <description>어플리케이션 설명</desccription>
    <!-- 서블릿 매핑 : 보안과 주소를 간략화 하기 위해 사용
        http://localhost/servlet/KCount 이렇게 사용가능  -->
    <servlet>
      <servlet-name>KCount</servlet-name> 
      <servlet-class>kr.pe.kkaok.mycount.KCount</servlet-class>
    </servlet>
    <!-- load-on-startup 옵션은 서버 구동시 자동으로 시작 되도록 하는 것이다. -->
    <servlet>
      <servlet-name>PoolManager</servlet-name>
      <servlet-class>kr.pe.kkaok.jdbc.PoolManager</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 서블릿 매핑 : 위에서 servlet 부분을 삭제한다. 
        http://localhost/KCount 이렇게 사용가능  -->
    <servlet-mapping>
      <servlet-name>KCount</servlet-name>
      <url-pattern>/KCount</url-pattern>
    </servlet-mapping>
    <!-- /servlet/* 과 동일한 패턴의 요청이 들어오면 servlet으로 처리 -->
    <servlet-mapping>
      <servlet-name>invoker</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    <!-- 세션 기간 설정 -->
    <session-config>
      <session-timeout>
        30
      </session-timeout>
    </session-config>
    <!-- mime 매핑 -->
    <mime-mapping>
      <extension>txt</extension>
      <mime-type>text/plain</mime-type>
    </mime-mapping>
    <!-- 시작페이지 설정 -->
    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>index.html</welcome-file> 
    </welcome-file-list>
    <!-- 존재하지 않는 페이지, 404에러시 처리 페이지 설정 -->
    <error-page> 
      <error-code>404</error-code> 
      <location>/error.jsp</location> 
    </error-page> 
    <!-- 태그 라이브러리 설정 -->
    <taglib>
      <taglib-uri>taglibs</taglib-uri>
      <taglib-location>/WEB-INF/taglibs-cache.tld</taglib-location>
    </taglib>
    <!-- resource 설정 -->
 <resource-ref>
      <res-ref-name>jdbc/jack1972</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
    </resource-ref>
</web-app>

 

* 만약 톰캣 4에서 servelt에 접근이 안되는 경우
아래는 okjsp.pe.kr 운영자 kenu님의 처리 방법이다.

invoker 서블릿의 매핑이 보안문제로 막혀있어서 발생하는 문제로 $CATALINA_HOME/conf/web.xml를 열고 해당 부분의 주석을 제거한다.

<!-- The mapping for the invoker servlet -->
<servlet-mapping>
  <servlet-name>invoker</servlet-name>
  <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

security-constraint 엘리먼트를 $CATALINA_HOME/conf/web.xml 파일의 welcome-file-list 엘리먼트 아래쪽 <web-app> 에 중첩되게 복사합니다.

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
 
<security-constraint>
  <display-name>Default Servlet</display-name>
  <!-- Disable direct alls on the Default Servlet -->
  <web-resource-collection>
    <web-resource-name>Disallowed Location</web-resource-name>
    <url-pattern>/servlet/org.apache.catalina.servlets.DefaultServlet/*</url-pattern>
    <http-method>DELETE</http-method>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
    <http-method>PUT</http-method>
  </web-resource-collection>
  <auth-constraint>  
    <role-name></role-name>
  </auth-constraint> 
</security-constraint>

                        
톰캣을 재시동하고 테스트해보면 정상적으로 작동하는걸 확인할 수 있다.

                         

[출처] web.xml이란|작성자 바국이

출처 -  http://blog.naver.com/habakukwjb?Redirect=Log&logNo=100006013373 








▣ web.xml 파일이란?
1. 톰캣의 실행환경에 대한 정보를 담당하는 '환경설정' 파일 이다.

2.  각종 servlet의 설정과 servlet 매핑, 필터, 인코딩 등을 담당한다.

3. web.xml은 톰캣에 있는 모든 web application의 기본설정을 정의한다. 
4. web.xml은 각 application이 deploy될 때 각 application의 'WEB-INF/web.xml' deployment descripter에 따라서 처리가 된다.

5. 각 application 마다 설정시, web.xml은 파일을 복사해서 필요한 것만 적으면 된다.

 

▣ 디렉토리 위치?

:%CATALINA_HOME%\conf\web.xml         //CATALINA_HOME은 톰캣의 홈디렉토리!~

 

▣ 내용설명

각 servlet을 설정하자~~

 

DefaultServlet :공유자원을 제공하며 servlet mapping을 가진 모든 요청을 처리한다. 

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

 

InvokerServlet  :web.xml 파일에 정의되지 않은 어떠한 servlet 클래스라도 실행할 수 있도록 한다. 
이 servlet은 기본적으로 "/servlet/*"의 URL에 매핑되어 있음.

Tomcat의 버전이 올라가면서 보안상의 이유로 기본적으로는 서블릿을 실행하지 못하도록 설정이 되어있다.(default 주석처리) 

 <servlet>
    <servlet-name>invoker</servlet-name>
    <servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class>
    <... 기타 속성들 ...>

</servlet>

 

JspServlet : JSP의 컴파일과 실행을 담당하는 servlet

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <... 기타 속성들 ...>

</servlet>


 

기타 servlet 으로.. 아래 두개가 있지만 잘 안쓰는지 모두 주석처리 되어 있다. -ㅇ-..

그래서 뭐.. 설명생략!~

<servlet-name>ssi</servlet-name>
<servlet-name>cgi</servlet-name>

 

이제.. 위에서 설정한 servlet에 대한 매핑작업에 대한 정보!~

<servlet-mapping>
    <servlet-name>default</servlet-name>           // 일반적으로는 모두 '/' 로..
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!--
<servlet-mapping>
    <servlet-name>invoker</servlet-name>         // invoker는 '/servlet/*' 로..
    <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->


<servlet-mapping>
    <servlet-name>jsp</servlet-name>               // jsp는 '/*.jsp' 로..
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

 

세션 기간 설정~

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

 

mime 매핑~
<mime-mapping>
    <extension>abs</extension>
    <mime-type>audio/x-mpeg</mime-type>
</mime-mapping>
<mime-mapping>
    <extension>ai</extension>
    <mime-type>application/postscript</mime-type>
</mime-mapping>


 

시작페이지 설정~

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>


 


위까지 내용은 톰캣 설치하면 보이는 기본값에 대한 설정이고..

아래내용은 필요할 때마다 참고하자궁..(web.xml 파일내용)

 

아래의 블로그 내용을 참조하였음.

http://brainism.tistory.com/7?srchid=BR1http%3A%2F%2Fbrainism.tistory.com%2F7

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  5.     version="2.5">  
  6.   
  7.     <!-- JDBC 연결을 위한 정보 -->  
  8.     <resource-ref>  
  9.         <description>OracleDatasource</description>  
  10.         <res-ref-name>jdbc/myoracle</res-ref-name>  
  11.         <res-type>javax.sql.DataSource</res-type>  
  12.         <res-auth>Container</res-auth>  
  13.     </resource-ref>  
  14.   
  15.     <context-param>  
  16.         <param-name>ds</param-name>  
  17.         <param-value>jdbc/myoracle</param-vlaue>  
  18.     </context-param>  
  19.   
  20.     <!-- Filter 설정 (Encoding Filter) -->  
  21.     <filter>  
  22.         <filter-name>Encoding Filter</filter-name>  
  23.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  24.         <init-param>  
  25.             <param-name>encoding</param-name>  
  26.             <param-value>UTF-8</param-value>  
  27.         </init-param>  
  28.     </filter>  
  29.   
  30.     <filter-mapping>  
  31.         <filter-name>Encoding Filter</filter-name>  
  32.         <servlet-name>action</servlet-name>  
  33.     </filter-mapping>  
  34.   
  35.     <!-- servlet 설정 -->  
  36.     <servlet>  
  37.         <servlet-name>action</servlet-name>  
  38.         <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  39.         <init-param>  
  40.             <param-name>config</param-name>  
  41.             <param-value>/WEB-INF/struts-config.xml</param-value>  
  42.         </init-param>  
  43.         <init-param>  
  44.             <param-name>debug</param-name>  
  45.             <param-value>3</param-value>  
  46.         </init-param>  
  47.         <init-param>  
  48.             <param-name>detail</param-name>  
  49.             <param-value>3</param-value>  
  50.         </init-param>  
  51.         <load-on-startup>0</load-on-startup>  
  52.     </servlet>  
  53.   
  54.     <servlet-mapping>  
  55.         <servlet-name>action</servlet-name>  
  56.         <url-pattern>*.do</url-pattern>  
  57.     </servlet-mapping>  
  58.   
  59.     <!-- 세션 기간 설정 -->  
  60.     <session-config>  
  61.         <session-timeout>30</session-timeout>  
  62.     </session-config>  
  63.   
  64.     <!-- 시작페이지 설정 -->  
  65.     <welcome-file-list>  
  66.         <welcome-file>index.jsp</welcome-file>  
  67.     </welcome-file-list>  
  68.   
  69.     <!-- 존재하지 않는 페이지, 404에러시 처리 페이지 설정 -->  
  70.     <error-page>  
  71.         <error-code>404</error-code>  
  72.         <location>/404.jsp</location>  
  73.     </error-page>  
  74.   
  75.     <!-- 500에러시 처리 페이지 설정 -->  
  76.     <error-page>  
  77.         <error-code>500</error-code>  
  78.         <location>/500.jsp</location>  
  79.     </error-page>  
  80.   
  81.     <!-- NullpointException발생시 처리 페이지 설정 -->  
  82.     <error-page>  
  83.         <exception-type>java.lang.NullPointerException</exception-type>  
  84.         <location>/null.jsp</location>  
  85.     </error-page>  
  86.   
  87.     <!-- 태그 라이브러리 설정 (JSTL"coreTag"을(를) 사용)-->  
  88.     <jsp-config>  
  89.         <taglib>  
  90.             <taglib-url>http://java.sun.com/jsp/jstl/core</taglib-url>  
  91.             <taglib-location>/WEB-INF/tld/c.tld</taglib-location>  
  92.         </taglib>  
  93.     </jsp-config>  
  94. </web-app>

출처 -  http://blog.daum.net/_blog/BlogTypeView.do?blogid=090sk&articleno=5494232#ajax_history_home 







web.xml Listener, Filter의 활용

1. Listener의 이해

1.1 Listener 란

  • 어떠한 이벤트가 발생하면 호출되어 처리하는 객체.

1.2 Listener 사용법

  • 구현할 기능과 관련된 각종 인터페이스만 제공함으로 클래스는 구현해야함.

1.3 Listener 인터페이스 종류

  • ① ServletContextListener
    웹 어플리케이션의 시작과 종료시 자동으로 발생되는 이벤트를 수행하기 위한 메소드를 정의한 인터페이스이다.
    Listener 객체설명
    contextInitialized(ServletContextEvent sce) : void웹 컨테이너가 처음 구동될 때 실행되는 메소드
    contextDestoryed(ServletContextEvent sce) : void웹 컨테이너가 종료될 때 실행되는 메소드
  • ② ServletContextAttributeListener
    컨테이너에 저장된 속성 값들의 변화가 있을 때 수행하기 위한 메소드를 정의한 인터페이스이다.
    Listener 객체설명
    attributeAdded(ServletContextAttributeEvent scae) : void새로운 속성 값이 추가될 때 실행되는 메소드
    attributeRemoved(ServletContextAttributeEvent scae) : void속성 값이 제거될 때 실행되는 메소드
    attributeReplaced(ServletContextAttributeEvent scae) : void속성 값이 변경될 때 실행되는 메소드
  • ③ HttpSessionListener
    HTTP 세션이 활성화 되거나 비활성화 되려할 때 혹은 속성 값들이 추가, 삭제, 변경될 경우 수행하기 위한 인터페이스
    Listener 객체설명
    sessionCreated(HttpSession se) : void세션이 생성되었을 경우 이 메소드가 실행
    sessionDestoryed(HttpSession se) : void세션이 무효화 되었을 경우 이 메소드 실행
  • ④ HttpSessionAttributeListener
    HTTP 세션에 대한 속성 값이 변경되었을 경우 수행하기 위한 인터페이스
    Listener 객체설명
    attributeAdded(HttpSessionBindingEvent e) : void세션에 새로운 속성 값이 추가될 때 실행
    attributeRemoved(HttpSessionBindingEvent e) : void세션의 속성 값이 제거될 실행
    attributeReplaced(HttpSessionBindingEvent e) : void세션의 속성 값이 변경될 때 실행
  • ⑤ HttpSessionActivationListener
    세션에 대한 내용이 새로 생성되어 세션이 활성화 되었을 때 발생하는 이벤트를 수행하기 위한 인터페이스
    Listener 객체설명
    sessionDidActivate(HttpSessionEvent e) : void세션이 활성화 될 때 실행
    sessionWillPassivate(HttpSessionEvent e) : void세션이 비활성화 되려고 할 때 실행
  • ⑥ HttpSessionBindingListener
    클라이언트의 세션 정보에 대한 바인딩이 이루어졌을 경우 감지되는 이벤트를 수행하기 위한 인터페이스
    Listener 객체설명
    valueBound(HttpSessionBindingEvent e) : void세션에 연결될 때 발생하는 이벤트를 실행
    valueUnBound(HttpSessionBindingEvnet e) : void세션으로부터 연결이 해제될 때 발생하는 이벤트를 실행

1.4 Listener 간단예제

  • 웹서버가 시작될때 동작하는 리스너.

① 해당이벤트가 발생했을 경우 수행할 리스너 클래스 작성

com.test.TestListener.java
package com.test;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


public class TestListener implements ServletContextListener {
	
    public TestListener(){};
	
    public void contextInitialized(ServletContextEvent contextEvent) {
        System.out.println("서버가 시작되었습니다!");
    } 
    public void contextDestoryed(ServletContextEvent contextEvent) {}

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("서버가 중지되었습니다");
    }
} 


② web.xml에 리스너 등록

web.xml
<listener>
<listener-class>TestListener</listener-class>
</listener>

2. Filter의 이해

2.1 Filter란

  • 필터는 'HTTP 요청과 응답을 변경할 수 있는 재사용가능한 코드'이다.
    필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(request)과 최종 자원(서블릿/JSP/기타 문서) 사이에 
    위치하여 클라이언트의 요청 정보를 알맞게 변경할 수 있으며, 또한 필터는 최종 자원과 클라이언트로 가는 응답(response)
    사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수 있다.

  • 출처:http://javacan.tistory.com

  • 세션관리,로그파일관리,인코딩관리,데이터 압축 등의 작업을 할수있다.

2.2 Filter Chain 이란


여러 개의 필터가 모여서 하나의 체인을 형성할 때 첫번째 필터가 변경하는 요청 정보는 클라이언트의 요청 정보가 되지만,출처:http://javacan.tistory.com

  • 체인의 두번째 필터가 변경하는 요청 정보는 첫번째 필터를 통해서 변경된 요청 정보가 된다. 
    즉, 요청 정보는 변경에 변경에 변경을 거듭하게 되는 것이다. 응답 정보의 경우도 요청 정보와 비슷한 과정을 거치며
    차이점이 있다면 필터의 적용 순서가 요청 때와는 반대라는 것이다.

2.3 Filter 인터페이스

Filter 객체설명
public void init(FilterConfig filterConfig) throws ServletException필터를 웹 콘테이너내에 생성한 후 초기화할 때 호출
public void doFilter(ServletRequest request, 
ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
체인을 따라 다음에 존재하는 필터로 이동한다. 체인의 가장 마지막에는 클라이언트가 요청한 최종 자원이 위치한다.
public void destroy()필터가 웹 콘테이너에서 삭제될 때 호출

2.4 Filter 간단 예제

com.example.web.LoginCheckFilter.java
 package com.example.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class LoginCheckFilter implements Filter {
 public void init(FilterConfig config) throws ServletException {}
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  HttpServletRequest httpRequest = (HttpServletRequest) request;
  HttpSession session = httpRequest.getSession(false);
  
  boolean login = false;
  
  String id = request.getParameter("id");
  String pw = request.getParameter("pw");
  System.out.println(id+pw);
  
  if(id.equals(pw)) {
   session.setAttribute("MEMBER",id);
  }
  
  if(session != null){
   if(session.getAttribute("MEMBER") != null){
    login = true;
   }
  }
  if(login){
   chain.doFilter(request, response);
  }
  else{
   System.out.println("로그인에 실패!");
   RequestDispatcher dispatcher = request
     .getRequestDispatcher("/loginForm.jsp"); // getRequestDispatcher() 컨텍스트명/*.jsp
   
   dispatcher.forward(request, response); //forward 는 브라우져의 url이 변경되지 않고 화면 이동.(서버쪽에서 화면을 변경한다.)
  }
 }
 public void destroy() {
 }
}

web.xml
<filter>
  <filter-name>LoginCheck</filter-name>
  <filter-class>com.example.web.LoginCheckFilter</filter-class>
 </filter>
  
  <filter-mapping>
  <filter-name>LoginCheck</filter-name>
  <url-pattern>/Login.jsp</url-pattern>
 </filter-mapping>

문서정보



출처 - http://wiki.gurubee.net/pages/viewpage.action?pageId=26740229






 


'Web > WAS' 카테고리의 다른 글

Tomcat 의 logging.properties 및 log 디렉토리 설정  (2) 2012.04.04
tomcat - root가 아닌 tomcat 계정으로 실행  (0) 2012.04.04
mod_jk 사용법  (0) 2012.02.10
Jakarta Project  (0) 2012.02.05
Apache Tomcat  (0) 2012.02.05
Posted by linuxism
,