escape(), encodeURI(), encodeURIComponent() 차이

비슷하면서도 다른 함수들 입니다.
세가지 함수 모두 ASCII문자로 바꿔주는데, 그럼 각각의 차이점을 알아 보겠습니다.

1. escape() : unescape()

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890 @*-_+./

위에서 열거된 문자가 아니면 모두 변환을 합니다. 1바이트문자는 %XX 형태로 2바이트 문자는 %uXXXX 식으로 변환합니다.

2. encodeURI() : decodeURI()
escape()와 같이 변환을 하지만, 인터넷 주소에서 쓰는 특수 문자 : ; / = ? & 는 변환을 하지 않습니다.

3. encodeURIComponent() : decodeURIComponent()
인터넷 주소에서 쓰는 특수 문자 : ; / = ? & 까지 변환을 합니다. 인터넷 주소를 하나의 변수에 넣을때 쓸 수 있습니다.

★ 덧붙임 : encodeURIComponent() 는 UTF-8 로 인코딩 하는 것과 같음

예제)

1<script type="text/javascript">
2var url = "http://yesyo.com/?retrun=고고";
3document.write('<p><b>URL :</b> ' + url + '</p>');
4document.write('<p><b>escape() :</b> ' + escape(url) + '</p>');
5document.write('<p><b>encodeURI() :</b> ' + encodeURI(url) + '</p>');
6document.write('<p><b>encodeURIComponent() :</b> ' + encodeURIComponent(url) + '</p>');
7</script>

결과 :
URL : http://yesyo.com/?retrun=고고
escape() : http%3A//yesyo.com/%3Fretrun%3D%uACE0%uACE0
encodeURI() : http://yesyo.com/?retrun=%EA%B3%A0%EA%B3%A0
encodeURIComponent() : http%3A%2F%2Fyesyo.com%2F%3Fretrun%3D%EA%B3%A0%EA%B3%A0


출처 : http://yesyo.com/mintbbs/bbs/board.php?bo_table=javascript&wr_id=163&sfl=&stx=&sst=wr_datetime&sod=desc&sop=and&page=1

추가 사항 1.

URL을 통째로 인코딩할 때는 encodeURI(),

URL의 파라메터만 인코딩할 때는 encodeURIComponent()를 쓰면 된다.

escape()/unescape()는 잊어버려라.

추가 사항 2.

자바의 java.net.URLEncoder는 어떨까?

결론은 이녀석은 자바스크립트의 encodeURI()와 동일하다.

주의할 점은 java.net.URLEncoder의 두개의 함수 중의 파라메터가 두개인 녀석(캐릭터 인코딩을 지정해주는)을, 두번째 파라메터를 "UTF-8"로 지정해서 사용해야 한다.

추가 사항 3.

적용 예) CharSet="UTF-8" 인 JSP에서 AJAX(XMLHttpRequest)로 한글 파라미터 전송시,

JSP : &param=encodeURI(encodeURIComponent("한글")); 와 같이 한글 파라미터 처리.

JAVA : URLDecoder.decode(request.getParameter("param"), "UTF-8"); 와 같이 디코딩 처리.

참고 :

http://d.hatena.ne.jp/kskyuny/20090304/1236145944

http://blog.naver.com/akrsg/140118242329

그리고 내 경험!

고생하시는 개발자 분들 도움 되시길~


[출처] http://mtkwn.blog.me/40112707174

오라클용 쿼리에  ROWNUM 를 MYSQL용으로 변환시에 아래 처럼 간단하게 적용하면 된다.

Oracle용 쿼리::::

SELECT A.* FROM ( 
  SELECT ROWNUM NUM,  *
     FROM WCM_CONTENT_SET cs 
  )A WHERE NUM >= ? AND NUM <= ?

 

MYSQL용 쿼리::::

SELECT A.* FROM ( 
  SELECT (@ROWNUM := @ROWNUM + 1) AS NUM, *
   FROM WCM_CONTENT_SET cs, 
(SELECT @ROWNUM := 0) rr 
  
)A WHERE NUM >= ? AND NUM <= ?

자료들이 알차게 많이 있다.
=============================================================


네이버 여성 개발자분 여러 소스들을 잘 해놓으셨다.

=============================================================



웹 개발자는 Markup, Javascript, CSS를 기초부터 다시 시작해야 합니다.
그간 알고 있던 불분명한 근거에 바탕을 둔 지식은 대부분이 쓰레기인것이 많습니다.
그럼, 이제 어떻게 해야 새롭게 정확하고 확실한 지식을 준비 할 수 있을 까요?

요즘엔 시중 서적도 품질이 많이 좋아 졌고, 외국의 유명인의 번역서적도 많아서
제법 공부하기가 쉬워졌습니다.
그러나, 현장에서 바로 써먹을 수 있는 지식과 기술, 그리고  매일매일 새로워 지는 
새로운  기술적 접근들을 책을 통해서만 얻는데는 한계가 있습니다.
그래서,  제가 Web Front-End를 적응해 나가면서 가장 도움이 되었던 방법이자,
지금도 매일매일 새롭게 터져나오는  영문 문서를 읽어야 하는 수고를 덜어 주시는
한국 고수들의 블로그를 소개합니다.

여기 소개되는 블로거들은 이미 유명하신 분들이라서, 많은 분들이 이미 잘 알고 계실거라 생각되지만,
이제 처음 발을 딛는 입문자들에게는 중요한 단서가 될거라 생각됩니다.


 

http://xguru.net 
http://twitter.com/xguru
KTH의 에반젤리스트로 활동 중 이신데 인터넷 분야의 다방면에 새로운 지식과 기술
특히, 모바일환경에서의 웹에 대한 활동이 많습니다.


http://firejune.com
http://twitter.com/firejune
디자인적인 요소를 많이 다루시다가 최근에는 거의 javascript와 관련된 블로그 활동이 많고,
외국의 유명 개발자의 새로운 활동을 소개하는것에 이분 만큼 빠른분은 없습니다.
처음 웹을 재발견 할 당시 이분의 블로그를 첫글 부터 일독 하면서 많이 배웠습니다.


http://ajaxian.kr
http://twitter.com/andrwj
"javascript가 만만한게 아니구나!"라고 느낄 무렵 이분의 블로그를 접했습니다.
제가 아는한 국내에서는 이분 만큼 Javascript의 구석구석까지 알고 계신분은 별로 없을것 같습니다.


http://hyeonseok.com
http://twitter.com/hyeonseok
Opera 재단에 근무 하셨던것 같고,
웹표준과 웹접근성에 대한 활동이 가장 많은것 같습니다.
최근 jQuery 강의용 PDF문서를 만드셨는데,
깔끔하고 군더더기 없는 문서를 보며 그 능력을 부러워하고 있습니다.


http://naradesign.net
http://twitter.com/naradesign
NHN에 근무 하시고 계시며, HTML 마크업 요소와 CSS를 이용해서 
얼마나 다양한 View를 만들 수 있는지 그리고 내가 어떻게 해야하는지를
이분의 블로그를 통해 알았습니다.



http://blog.outsider.ne.kr/
http://twitter.com/Outsideris
웹에서 최신 트렌드를 계략적인 소개를 하는 블로거들은 많습니다.
하지만, 기술자로서  필요한 접근을 명확하게  잘 소개하는 블로거는 많지 않습니다.
최근 제가 가장 좋아하는 블로거입니다.


http://blog.creation.net
http://twitter.com/channyun
다음에서 일하시고 계시며, mozilla firefox에 대한 일도 하시는 분인데,
기술적인 내용보다는 트렌드에 대한 이야기를 많이 하시는 편입니다.


http://frends.kr/
Front-End 개발자들이 모여 활동하는 단체입니다.
앞서 소개해 드린 블로거 중 많은 분들이 여기에서 활동하고 계십니다.
웬만한 해외 유명 사이트 보다 좋은 글들이 많습니다.


http://www.clearboth.org
앞서 소개한 frends.kr 과 비슷하게 여러명이 함께 활동하는 단체입니다.
frends.kr는 개발자,  javascript 같은 단어를 먼저 떠올리게 한다면,
clearboth.org는 퍼블리셔, css 같은 단어를 먼저 떠올리게 하는 느낌이 있습니다. 

여기에 소개하지 못한 더 많은 웹 고수 블로거 들이 계시겠지만,
저에게 영향을 주었거나, 주고 계신 분들을 소개해 봤습니다.

소개 당하신 블로거님들께는 사전에 양해를 구하지 않았으니,
제가 본 시각이 마음에 안들지도 모른다는 불안감이 들긴 합니다.

끝으로, 댓가없이 많은 정보와 지식을 제공해 주시는 블로거님들께 감사의 말씀 전하고 싶습니다.



oracle
((날짜 함수))



[ SYSDATE ]
sysdate
-현재 시스템의 날짜 데이터를 반환
select to_char(sysdate, 'yyyymmddhh24mmss') from dual

[ ADD_MONTHS ]
add_months(date, integer)
-지정한 날짜에서 해당 월에 일정한 정수 (혹은 마이너스 정수)값을 더한 날짜를 반환
select to_char(add_months(sysdate, -2), 'yyy-mm-dd') from dual

[ LAST_DAY ]
last_day(date)
-해당 월의 마지막 날짜를 반환한다


[ MONTHS_BETWEEN ]
months_between(date_1, date_2)
-date1과 date2의 사이의 기간을 월로 나타내 준다.


((변환 함수))


[ TO_CHAR ]
to_char(number, "format")
-number형 데이타 타입을 문자열로 변환


[ NVL ]
nv(ex1, ex2)
-ex1값이 null이 아니라면 ex1값의, null이라면 ex2 값을 반환

SimpleDateFormat sb = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
sql문에서 add_day = TO_DATE('"+sb.format(new Date())+"','MM-DD-YYYY HH24:MI:SS')
또는 add_day = sysdate


mssql
((날짜 함수))

[ GETDATE ]
-getdate는 현재 시간을 표시해 준다


[ DATEADD ]
-dateadd함수는 날자에 지정한 만큼을 더한다
dateadd(날짜형식, 더할 값, 날짜)


[ DATEDIFF ]
-datediff는 두날짜 사이의 날짜 형식에 지정된 부분을 돌려준다.
datediff(날짜형식, 시작날짜, 끝날짜)


[ DATENAME ]
-datename는 지정날짜의 날자형식의 이름을 돌려준다.
datename(날짜형식, 날짜)


[ DATEPART ]
-datepart는 날짜에서 지정한 날짜형식부분만 추출해줍니다.
datepart(날짜형식, 날짜) : 주일은 일요일부터 1로 시작해서 토요일날 7로 끝나게 된다


((변환 함수))

[ CONVERT ]
-문자열 형태로 변환(varchar,datetime,number)
convert(varchar, 컬럼명)


mysql
((날짜 함수))


[ NOW() ]
[ CURRENT_TIMESTAMP ]
[ CURRENT_TIMESTAMP() ]
[ LOCALTIME ]
[ LOCALTIME() ]
[ LOCALTIMESTAMP ]
[ LOCALTIMESTAMP() ]
-현재 시간을 리턴합니다


[ SYSDATE() ]
-'YYYY-MM-DD HH:MM:SS' 또는 'YYYYMMDDHHMMSS' 형식으로 현재 날짜나 시간을 리턴한다
- SYSDATE()는 실행 시점의 시간을 표시하므로 NOW()와 차이점이 있다


[ CURDATE() ]
[ CURRENT_DATE ]
[ CURRENT_DATE() ]
-'YYYY-MM-DD' 또는 'YYYYMMDD' 형식으로 현재 날짜를 리턴합니다.


[ CURTIME() ]
[ CURRENT_TIME ]
[ CURRENT_TIME() ]
-'HH:MM:SS' 또는 'HHMMSS.uuuuuu' 형식으로 현재 시간을 리턴합니다.


[ DATE_FORMAT(date,format) ]
-date로 지정된 날짜른 format에 의해 표시합니다.

기호 설명
%a Sun, ..., Sat와 같은 요일의 약어 표시
%b Jan, ..., Dec와 같은 달이름 약어 표시
%c 1 ~ 12 사이의 월 표시
%D 1st, 2nd, ... 와 같은 형식의 달의 날짜 표시
%d 00, ..., 31 형식의 달의 날짜 표시
%e 0, ..., 31 형식의 달의 날짜 표시
%f 마이크로초 표시
%H 24시간 형식의 시간 표시(00, ..., 23)
%h, %I 12시간 형식의 시간 표시(01, ..., 12 )
%i 분 표시(00, ..., 59)
%j 년의 날짜 표시(001, ..., 366)
%k 24시간 표시(0, ..., 23)
%l 12시간 표시(1, ..., 12)
%M 달 이름 표시(Jenuary, ..., December) 3
%m 달 순서 표시(00, ..., 12)
%p AM, PM 표시
%r 12시간제 표시(HH:MM:SS AM or PM)
%S, %s 초 표시(00, ..., 59)
%T 24시간제 표시(HH:MM:SS)
%U 일요일을 시작으로 년의 몇번째 주인가를 00, ..., 53으로 표시한다.
%u 월요일을 시작으로 년의 몇번째 주인가를 00, ..., 53으로 표시한다.
%V %X와 함께 쓰여 일요일을 시작으로 년의 몇번째 주인가를 01, ..., 53으로 표시한다.
%v %x와 함께 쓰여 월요일을 시작으로 년의 몇번째 주인가를 01, ..., 53으로 표시한다.
%W 요일명 표시(Sunday, ..., Saturday)
%w 요일의 순서를 표시(0=Sunday, ..., 6=Saturday)
%X %V와 함께 쓰이며 일요일을 시작하는 주를 기준으로 YYYY 형태의 년도를 표시한다.
%x %v와 함께 쓰이며 월요일을 시작하는 주를 기준으로 YYYY 형태의 년도를 표시한다.
%Y YYYY 형식으로 년도를 표시한다.
%y YY 형식으로 년도를 표시한다.
%% % 문자를 표시한다.


[ DATEDIFF(expr1,expr2) ]
-expr1과 expr2 사이의 일 수를 리턴합니다.


[ TIMEDIFF(expr1,expr2) ]
-expr1과 expr2 사이의 시간을 time 형식으로 리턴합니다.


mysql
new date();

오라클의 sysdate 와 같은?


 [출처] http://blog.naver.com/tei2434/130108256625

indexOf는 문자열을 포함하는지 여부를 확인하여

있으면 위치를 int형으로 반환하고,

없으면 -1을 반환합니다.

   String[] sArry = new String[]{"a","b","c"};

   for(int i = 0 ; i < sArry.length ; i++){

      if(sArry[i].indexOf("a") == -1) 

      // sArry[i]에 a라는 값이 존재하지 않는다면

   }

 

startsWith는 문자열로 시작하는 지의 여부를

boolean형으로 반환합니다.

   String a = "aaa";
   System.out.println( a.startsWith("a") );

라고 하면 아마도 true가 리턴..(a로 시작이 되지 않는다면 false가 리턴.)

'프로그래밍 > JAVA' 카테고리의 다른 글

전자정부 프레임워크 3.2 공통 콤포넌트  (2) 2016.11.21
자바 정규식 표현 정리  (0) 2012.08.31
HashMap, HashTable의 비교  (0) 2012.08.13

1. HashMap 

        1) Map interface를 implements 한 클래스로 중복 허용 안함.

        2) key, value 쌍으로 이루어지며 null 허용

        3) 가장 처음 넣은 데이터가 index 0 (FIFO : First in First out)

 

import  java.util.HashMap;

import  java.util.Iterator;

 

HashMap  hashmap = new HashMap();

 

hashmap.put("a", "2");

hashmap.put("b", "3");

 

//방법1

Iterator  iter =  hashmap.keySet().iterator();

while( iter.hasNext()) {

        String  key = (String) iter.next();

        Object value = hashmap.get(key);

}

 

//방법2

java.util.Set  keySet = hashmap.keySet();

Object[] hashKeys = keyset.toArray();

 

for int i = 0; i < hashKeys.length; i++) {

         String key = (String)hashKeys[i];

         Object value = hashmap.get(key);

}

 

 

 

 

2. HashTable

         1) Map interface를 implements 한 클래스로 중복 허용 안함.

         2) key, value 쌍으로 이루어지며 null 허용 안함.

         3) 가장 마지막에 넣은 데이터가 index 0 (FILO : Fitst in Last out)

 

import  java.util.Hashtable;

 

Hashtable  hashTable  =  new Hashtable();

 

hashTable.put("a", "2");

hashTable.put("c". "5");

 

//방법1

Iterator  iter =  hashTable.keySet().iterator();

while( iter.hasNext()) {

        String  key = (String) iter.next();

        Object value = hashTable.get(key);

}

 

//방법2

java.util.Set  keySet = hashTable.keySet();

Object[] hashKeys = keyset.toArray();

 

for int i = 0; i < hashKeys.length; i++) {

         String key = (String)hashKeys[i];

         Object value = hashTable.get(key);

}

'프로그래밍 > JAVA' 카테고리의 다른 글

전자정부 프레임워크 3.2 공통 콤포넌트  (2) 2016.11.21
자바 정규식 표현 정리  (0) 2012.08.31
indexOf와 startwith 의 차이  (0) 2012.08.13



Insert title here



	
//name 속성으로 가져오기 힘들거나 어려울때 id값으로 가져오는 방법으로 //id는 유일무이 해야 가능하다.

톰켓 6.0 버젼


여러 방법이 있을 수 있겠지만, 손쉬운 방법으로는 conf/server.xml 중


대략 96줄에 있는 <Host> 태그의 appBase를 변경해주거나,


<Host> 태그 내에 <Context> 태그를 추가해주면 된다


말은 쉬우나, 따라하는 것은 쉽지 않기 때문에 예를 들어보면,


우선 톰켓이 기본적으로 보고 있는 루트 컨텍스트는 webapps/ROOT 이다


96:  <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


appBase는 ${catalina-home} 밑의 상대경로를 인자로 받으며,

기본적으로 보안과 context의 통일적인 적용을 이유로 컨텍스트의 루트는 ROOT 디렉토리 밑이 된다.

따라서, 톰켓이 설치가 되면 웹루트는 ${catalina-home}/webapps/ROOT 가 되는 것


보다 쉬운 이해를 위해 이를 3가지 별로 변경을 해본다


1. webapp 자체를 웹루트 디렉토리로 만들고 싶을 때,


    단지, <Host> 태그 내에 아래와 같은 컨텍스트를 추가하면 됩니다.

    <Context path="" docBase="." reloadable="true"/>


   사실 컨텍스트는 더 많은 옵션이 있으나 여기는 최소한의 사항만 적었습니다. 

   실서버에 적용할 때는 log 부분도 신경을 써주셔야 합니다. 더 자세한 사항은 웹을 검색해 보시기 바랍니다.


2. webapp/test/ROOT를 웹루트 디렉토리로 만들고 싶을 때,


96:  <Host name="localhost"  appBase="webapps/test"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


3. d:/env/home/my 를 웹루트 디렉토리로 만들고 싶을 때,


96:  <Host name="localhost"  appBase="d:/env/home/my"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


    <Context path="" docBase="." reloadable="true"/>

    </Host>


     또는, 


96:  <Host name="localhost"  appBase="d:/env/home/"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


    <Context path="" docBase="my" reloadable="true"/>

    </Host>


두설정의 차이는  Context 를 빼먹으면 ROOT를 자동으로 웹루트로 쓴다


톰켓 5.0부터 추가적인 <Context>는 server.xml에 추가하지 않고,

각 웹어플리케이션 디렉토리 별로 META-INF 밑에 context.xml을 추가하게 된다.


웹루트를 appBase와 같이 하려면 이의 설정을 server.xml에서 설정해도 상관없지만

webapps를 루트로 쓰는 것은 특별한 경우가 아니면 지양하는 게 좋으며,

꼭 필요하다면 apache의 redirect를 쓰는 방법 등으로 해결가능




ex)

* -  여기서 DocBase를 잡는 다는 것은

자신이 원하는 위치의 폴더를 작업 공간으로 잡는 것을 말한다.

 

1. 만약 C:\안에  Happy라는 폴더를 작업공간으로 만들고 싶을 경우

 -  자신의 tomcat이 설치되어 있는 폴더 안에 conf\Catalina\localhost 에 Happy.xml 파일을 만들어 준다.

(여기서 xml 파일은 자신이 만들고자 하는 폴더 이름과 같게 한다.)

- localhost 폴더 안에 있는 xml 파일 중 하나를 복사하여 Happy.xml 파일에 붙여 넣기 한다.

- Happy.xml파일을 열고

  <Context path="path로 적을 것" docBase="작업공간 위치"

         privileged="true" antiResourceLocking="false" antiJARLocking="false">

     이 부분만 고쳐주면 된다.

예) <Context path="/Happy" docBase="C:\Happy"

         privileged="true" antiResourceLocking="false" antiJARLocking="false">

 \- 수정이 끝난 후 tomcat을 재시작 한다.

- Happy폴더 안에 HTML 파일을 아무거나 넣는다.

- 재시작 후 Internet Explorer를 열고 주소창에  

   http://localhost:지신의 포드번호/Happy/HTML파일명.html 을 입력하여

   그 파일의 내용이 보인다면 성공한 것이다.

[출처] Tomcat DocBase 잡는 법|작성자 하얀아이


html 이나 jsp 파일의 인코딩그리고 DB에서도 인코딩을 모두 셋팅 해주었지만

파일의 인코딩이 깨질경우 WAS에서 불러올 때 부터 인코딩을 설정해주는 방법



catalina.bat 를 편집으로 열어서 대략 110번째 줄 마지막에

-Dfile.encoding=utf8 입력



set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" 

-Dfile.encoding=utf8 


utf8은 하나의 인코딩 설정이므로 자신 프로젝트에 맞는 인코딩 형식을 써준다




 - 1개의 행을 실행 할때 

insert into 테이블명 (컬럼1, 컬럼2,...) values(값1, 값2,...)

on duplicate key update 업데이트 할 컬럼명1 = 값1, 컬럼명2 = 값2....;

 - 복수개의 행을 실행 할때 

insert into 테이블명 (컬럼1, 컬럼2,...) values (값1, 값2,...), (값1, 값2,...), (값1, 값2,...)....

on duplicate key update 업데이트 할 컬럼명 = values('value');


TCP : 한쪽 노드에서 다른 쪽 노드로 파일을 보내는 녀석// 여러개로 잘라서 보낼 수도 있다.

IP : 한 호스트에서 목적지 호스트 까지 패킷을 옮기고 이동하기 위한 베이스 프로토콜

(웹에서만 사용하는 프로토콜)

HTTP 는 TCP/IP를 기반으로 하는 프로토콜



웹 서버(Web Server)

 - 클라이언트의 요청을 받아 HTML이나 오브젝트를 HTTP 프로토콜을 이용해 전송하는 것.

   사용자가 클라이언트로 요청을 보내오면 그 명령에 대한 처리를 실행하고 다시 사용자에게 답변을 보내준다.

 - 사용자가 요청한 것들 중에 웹 서버 자체적으로 처리할 수 없는 것들을 톰캣과 같은 컨테이너나 PHP 모듈과

   같이 처리할 수 있는 곳으로 넘겨 처리 결과를 받아와서 사용자에게 넘겨주는 역할도 수행한다.

 - 웹 서버만 구축된 서버는 웹 페이지, 이미지 등 정적인 페이지를 생성하지만,

   JSP 컨테이너가 탑재되어 있는 WAS는 JSP 페이지를 컴파일 해 동적인 페이지를 생성한다.

 - 웹 서버는 웹 문서를, WAS는 JSP 페이지 등을 양분하여 서버 부담을 줄이는 것이 가능하다.

 - Apache, IIS(Internet Information Server), WebtoB 등



웹 어플리케이션 서버(Web Application Server / WAS)

  : 웹과 기업의 기간 시스템 사이에 위치하면서, 웹 기반 분산 시스템 개발을 쉡게 도와주고

    안정적인 트랜잭션 처리를 보장 해주는 일종의 미들웨어 소프트 웨어 서버

    3계층 웹 컴퓨팅 환경에서 트랜잭션 처리 및 관리와 다른 기종 시스템 간의 애플리케이션 연동등을 주된 기능으로함


 -  웹 서버 + 웹 컨테이너.

 -  웹상에서 사용하는 컴포넌트들을 올려놓고 사용하게 되는 서버

 - EJB 와 같은 빈들이 올라가게 되며, 서버에 따라 웹에 필요한 많은 기능들을 포함하고 있다.

 - J2EE 스펙을 구현한 서버(JSP / Servlet Container와 EJB Container 로서의 기능)

 - 가장 많이 사용하는 WAS는 BEA사의 Web Logic, IBM사의 Web Sphere, T-max사의 Jeus, Tomcat, Redhot사의 JBoss 등이 있다.)

 - Tomcat은 JSP / Servlet Container의 기능을 구현했으나 EJB Container로서의 기능은 없다.

    따라서 Tomcat은 Was가 아니라는 사람들도 있다.



컨테이너(Containner)

 - JSP와 서블릿을 이용하는 웹 응용 프로그램은 자바 언어를 이용해서 작성할 수 있는데,

   JSP와 서블릿을 실행시킬 수 있는 소프트웨어를 웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고 한다.

 - Servlet 컨테이너, JSP 컨테이너, EJB 컨테이너 등의 종류가 있으며, 대표적인 웹 컨테이너로는

   자카르타 톰캣(JSP), RESIN, Web Logic, WebtoB 등이 있다.

 - 웹 서버에서 JSP를 요청하면 톰캣에서는 JSP 파일을 서블릿으로 변환하여 컴파일을 수행하고,

   서블릿의 수행결과를 웹 서버에서 전달하게 된다. 

 

웹 서버와 WAS의 차이점

 - 웹 서버와 WAS를 구별 짓는 것은 동적 서버 콘텐츠를 수행하는가? 만약 수행한다면 WAS로 보면 된다.

 - 웹 서버 : 정적인 HTML이나 이미지를 제공하는 서버.

   WAS : 동적인 처리를 담당하는 서버. 


웹 서버와 WAS의 일반적인 구성

 - 사용자가 브라우저에서 요청을 하게 되면 다음과 같이 웹 서버와 WAS 서버를 거쳐 응답이 돌아오게 된다.

   사용자 요청(웹 브라우저) -> 웹 서버 -> WAS(동적 처리) -> 웹 서버 -> 사용자 응답 메세지(웹 브라우저)

+ Recent posts