2013년 9월 6일 금요일

[Head First]Servlets & JSP 내용정리-1장

Head First Servlets & JSP 내용정리-1장


Chapter.01 먼저 간략히 알아봅시다.

- HTTP : RFC2616에 정의

HTTP 메소드

  1. GET -
  2. POST - submit
  3. HEAD
  4. TRACE
  5. PUT
  6. DELETE
  7. CONNECT

GET 해부 하기

GET /select/selectBeerTaste.jsp?color=dark&taste=malty HTTP/1.1
--- -------------------------- ----------------------- --------  
ⓐ  ⓑ                         ⓒⓓ                     ⓔ
ⓐ - HTTP Method
ⓑ - Web Resource Path
ⓒ - Resource 와 Parameter 구분자 (?)
ⓓ - Parameter의 구분자는 $name=$value (&)
ⓔ - protocol version


User-Agent: Mozilla/5.0 (Macintonsh; U; PPC OS X Mach-O;eu-US;rv:1.4) Gecko/20030624 Netscape/7.1
Accept : text/xml,application/xml/application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/xmng,....
Accept-Language: en-us,en;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive:300
Connection:keep-alive
------------------------------------------------------------------
요청헤더

POST 해부 하기

POST /select/selectBeerTaste.do HTTP/1.1
--- -------------------------- --------  
ⓐ  ⓑ                          ⓒ
ⓐ - HTTP Method
ⓑ - Web Resource Path
ⓒ - protocol version


User-Agent: Mozilla/5.0 (Macintonsh; U; PPC OS X Mach-O;eu-US;rv:1.4) Gecko/20030624 Netscape/7.1
Accept : text/xml,application/xml/application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/xmng,....
Accept-Language: en-us,en;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive:300
Connection:keep-alive
------------------------------------------------------------------
color=dark&taste=malty : payload (Message body)
요청헤더

HTTP 응답

HTTP/1.1 200 OK
-------- --- --
ⓐ       ⓑ   ⓒ
ⓐ - Web Server Protocol Version
ⓑ - State Code
ⓒ - State Code String
Set-Cookie:JSESSIONID=0AAASDFDEFGG;Path=/testEL
Content-Type:text/html MIME 타입이라고 부름.
Content-Length:397
Date: Wed, 19 Nov 2003 03:25:40 GMT
Server : Apache-Coyote/1.1
Connection : close
------------------------------------------------------------------
HTTP 응답 헤더
<html>
</html>


http:://www.wickedlysmart.com:80/beeradvice/select/beer1.html
  • http : 프로토콜
  • ::// : 프로토콜과 서버 구분자
  • www.wickedlysmart.com : 서버주소
  • : : 서버와 포트 번호 구분
  • 80 : 서비스 포트 번호
  • /beeradvice/select/beer1.html : 리소스 위치
TCP 주요 번호 [ 0 ~ (2^16 -1) ]
  • 21 - FTP
  • 23 - Telnet
  • 25 - SMTP
  • 37 - Time
  • 80 - HTTP
  • 110 - POP3
  • 443 - HTTP3

서블릿 시험하기

  • web.xml - 배포서술자 (DD : Deployment Descriptor)
    • 웝 어플리케이션 하나의 DD 만 존재합니다.^^
    • DD 안에는 다수 서블릿을 정의 할 수 있습니다.
    • <servlet-name>는 <servlet>와 <servlet-mapping>을 연결
    • <servlet-class>:  자바 클래스 이름이 들어 갑니다.
    • <url-pattern> : 클라이언트가 요청을 보낼 이름 입니다.
  • tomcat를 재구동 해야 합니다.
    • $TOMCAT_HOME\bin\shutdown.sh - 중단
    • $TOMCAT_HOME\bin\startup.sh - 시작
JSP는 HTML에 자바를 넣기 위해서 탄생했다고 함.

[Head First]Servlets & JSP 내용정리-요약

Head First Servlets & JSP 내용정리-요약

주요사이트 정리


사전
약어정리(혹은용어)
  • MVC : Model-View-Controller
  • CGI : Common Gateway Interface
  • DD : Deployment Descriptor 배포서술자
  • JSP : Java Server Page
  • URL : Uniform Resource Locator
  • POJO : Plain Old Java Object, 일반적인 자바 객체
  • EL : Express Language, 표현식
  • TLD : Tag Library Descriptor, 태그 라이브러리 서술자
  • JSTL : JSP Standard Tag Library(JSTL1.1), JSP 표준 태그 라이브러리
  • JNDI : Java Naming & Directory Interface
  • trade-off : 성능일지 데이터의 정확성 하나를 선택해야 하는 경우
  • Transfer Object : 전송 객체 , Data Transfer Object , 즉 비지니스 서비스에서 데이터 전송을 위해서 사용하는 직렬화된 자바 객체
  • WAR : WebARchive, jar와 동일 단지 확장자 jar에서 war로 변경된것 뿐
  • jspf : include 포함하는 jsp, f는 fragment
준비물
  • tomcat  - 설치 여부 , 시험 여부 완료 (O)
    • 설치 버전 : jakarta-tomcat-5.0.30.exe
    • 설치 위치 : C:\dev_study\Tomcat5.0
    • 포트번호 : 8080
    • admin 암호 : admin
    • 기본서비스 URL : http://localhost:8080/
    • JVM 64bit용을 사용할 경우 정상적으로 구동 되지 않는다.ㄴ
  • J2SE SDK 1.3 이상 - 설치 여부 (O)
    • 설치 버전 : javac 1.6.0_31
    • 설치 위치 : c:\dev\Java\jdk1.6.0_31
    • 설치 OS 환경 : 32bit용 JDKs
  • servlet 관련 라이브러리
    • $TOMCAT_HOME\common\lib\servlet-api.jar
  • JSTL 1.1 설치 : JSP 표준 태크 라이브러리
    • JSP 2.0 스펙의 일부 아님.
    • WEB-INF/lib에 jstl.jar를 설치 해야 함.
    • tomcat 5와 별도로 설치 (Examples 설치 하면 설치됨.)
    • 톰캣예제의 JSTL의 위치는 webapps/jsp-examples/WEB-INF/lib/jstl.jar


관용구문 정리


자바 SE 공부시작

앞으로 정리하여 보여줄 Java SE 학습 결과 범위
새로운 기술에 대한 정리

  1. Generic



2011년 9월 28일 수요일

Perl 제대로 배우기 - 1장 개요


1장, 개요

#!/usr/bin/perl -w
:: 펄 프로그램이라고 알려줌. 여기서 -w는  Warning 경고 메시지를 출력 하고
print (“Hello, World!!\n”);
:: print 출력 함수 그리고 ()를 사용해도 되고 하지 않아도 됨. \n는 개행 문자 입니다. 문장종료는 세미콜론(;) 입니다.

$name=<STDIN>;
:: $name는 스칼라 변수 , <STDIN> 행 입력 받기
chomp($name);
:: 공백문자를 잘라낸다.(뒤쪽)
if($name eq “cosmoslight”)
:: eq는 두 문자열을 비교 한다. (?? 만약 대소문자 관련없이 비교 하려면은 어떻게) , 반대의 경우 ne
while()
:: 반복 루트
@words = (“xxxx”,”11111”,”22222”);
:: 배열
@words = qw(5555 44444 33333);
:: qw 인용 부호와 “,”를 제거 하여도 위와 동일하게 사용한다.
$words[n]
:: 단일 배열 요소 참조시는 @아니라 $를 사용하며 n 은 0 부터 시작 한다.

if-then-else 형식
if(){
} elsif(){
} else {
}

이름 (key) = 값 형태를 저장하는 해시
%words = qw (
huni ddd33
yuni 123456
cosmoslight 34567
mirageg 1342
);

$words{$keyName} 호출 방식


#!/usr/bin/perl -w

%words = qw {
   huni    xxxddd
   yuni    kkksss
   cosmos  rrrxxx
   mirageg xxdddd
};

print "당신의 이름은?";
$name = <STDIN>;
chomp ($name);

if($name eq "cosmoslight"){
   print "당신은 이창훈?\n";
} else {
   print "안녕, $name\n";
   $inpasswd = $words{$name};  # 암호 가져오기
   print "암호 입력 해보지요?";

   #오류 처리를 위해서 넣어다.     
   if( $inpasswd eq ""){
       $inpasswd = "fuck you";
   }

   $guess = <STDIN>;
   chomp ($guess);

   while($guess ne $inpasswd){
       print "잘못 입력 했어요 다시 입력하세요?";
       $guess = <STDIN>;
       chomp ($guess);
   }
}

정규식
$name =~ /^Cosmoslight\b/i;
:: ^Cosmoslight -> 문자열 시작, \b -> 단어 경계 표시 , i -> 대소문자 구분 없음.

$name =~ s/\W.*//;
:: =~ 정규식 , s -> 스위치 , \W : 비단어 문자 (알파벳,숫자,_ 를 제외한), “.*” 행끝가지의 임의의문자를 의미
s/\W.*//; 비단어 문자를 빈문자열로 변환 한다는 의미

$name =~ tr/A-Z/a-z/;
:: 대문자를 소문자로 변환

서브루틴
sub 함수명{
}
my($para1,$para2)=@_;
:: my - 인수를 두 변수에 저장한다. @_  - 인수들을 저장하는 배열
( $words{$somename} || “groucho”) eq $someguess
:: $words{$somename} || “groucho” -> 해시정보 읽고 기본값은 “groucho” 라는 것이며 그리고 || --> or를 의미 한다.

Perl의 세가지 표준 I/O
  • STDIN
  • STDOUT
  • STDERR


<WORSDLIST> : 파일 핸들
open(WORSDLIST,”wordlist”);
:: wordlist 파일을 열고 WORDSLIST 파일 핸들로 지정한다.
while($name=<WORDSLIST>)
:: WORDLIST 결과는 빈문자열 뿐만 아니라 undef 이 될수 있으면 그런 상황을 검사하는 함수는 defined라는 함수 이다.
open (WORDSLIST,"wordslist") || die "can't open wordslist: $!";
:: 파일 열다가 실패 할 경우 die 함수를 통해서 관련 오류 메시지를 출력하고 종료 한다.  $! --> 에러 메시지
-M WORDSLIST >= 7.0
:: 파일 변경 날짜 7 일 이상인지 여부 확인 합니다.
while (defined ($filename = glob(“*.secret”)))
:: glob(“*.secret”) -> 확장자 .secret 인 파일 목록을 가지고 옵니다.

포맷정의
format STDOUT =
@<<<<<<<<<<< @<<<<<< @<<<<<<
$filename, $name , $word
.
:: format STDOUT = --> 시작 , “.” --> 종료
@<<<< … --> 필드의 수 , 길이 , 유형
write;
:: STDOUT을 STDOUT으로 호출으로 합니다.
최초 페이지
format STDOUT_TOP =
Page @<<
$%

Filename Name Word
=============== ===============  ====================
:: $% -> 출력된 페이지 수

rename ($filename , “$filename.old” ) || die …
:: rename 함수 -> 이름 변경

dbmopen (%last_good,”lastdb”,0666)||
::해시를 DBM 이라는 디스크 파일에 대응시킴.(즉 저장한다.)
dbmclose (%last_good)
::해시를 닫는다.

foreach $name (sort keys(%last_good)){ … }
:: keys 함수 : 인수로 해시이름을 받아서 그 해시의 모든 키의 리스트를 정렬하지 않는 순서로 리턴 한다.
sort 함수 : 리스트를 알파벳 순서로 정렬 한다.
foreach 함수 : 값들의 리스트를 받아서 각각 차례로 $name 할당 하고 {} 블록을 한번씩 실행 한다.

2011년 3월 22일 화요일

오늘 산에 가다

거의 한달만에 요즘 유행하는 둘래길에 갔다. (관악산의 지산인 호암산) 근처이다. 
아주 어려서 부터 다녔던 길이라서 둘래길이라고 하니까 뭐 명칭이 아주 좋다.
한글이다. 둘래길 ,
길의 시작은 삼성산주공아파트 옆 산장 아파트에서 시작했다. 우리동네 근처 아파트 단지명은 모두 산과 관련이 있다.
그러니까 산과 아주 가깝다. 앞로 길하나만 건너면 된다.
근처 아파트 단지명 , 삼성산 뜨란채, 산장, 벽산, 관악산 휴먼시아 등이 있다. 더 기억해 보면 더 있겠지만 동네가 공기하나는 좋다. 그리고 경치도 좋다. 그러나 지하철에 무지 멀다. 시내로 가는 교통이 아주 불편하다.
그렇지만 모든 것에는 장단점이 있듯이 아주 좋은 자연스러운 공원이 있고, 그리고 사람이 많지 않아서 아주 좋다.
그냥 한시간에서 두시간 정도 시간을 내면 아주 깊은 산속에 들어와 있는 기분을 만끽 할 수 있다.


그런곳 이런 복잡한 서울에서 찾기란 힘들다. 그래서 이곳에 거의 30년 넘게 생활해도 다른 지방 보다 정이 드는 것 같다.
이야기가 다른 곳으로 샌것 같다.
그러니까 둘래길은 시작은 산장아파트 입구 -> 삼성산 천주교 성지 근처 약수터 -> 약수암 뒷편 바위 -> 고시촌
-> 다시 집으로 다녀왔다. 시간은 대략 1시간 내외 였다.
아직 날씨가 쌀쌀 해지만 그래도 양지 바른 곳에서 따뜻한 햇살을 느낄 수 있었다.
특히 마이클잭슨의 Invincible을 들으면서 여러가지 생각에 잠길 수 있었다. 그러던 도중 재미있는 생각이 들었는데
앞으로 만들고 싶은 어플에 대한 아이디어, 좀더 구체화 시켜 보고 싶다. 재미 있을 것 같다.

시간이 지나고 다시 오고

정말 오랜만에 물건을 사기위해서 용산전자상가에 갔다.
이전에 기억 속에 용산전자상가는 항상 새로움이 가득하고 신기한 물것들이 아주 많은 곳이라는 생각이 들었던 곳이다.

그러나 2011년 내가 느낀 용산의 모습은 조금씩 낡아 가는 자동차를 모습이다.

사람들도 그냥 힘이 없는 듯이 느껴지고 조금은 시대에 뒷안길로 사라진는 것 같다.
점자 전자 쇼핑이 늘어 나면서 언제 부터 인가 직접 용산에 갔던적인 얼마 만인가?

기억이 나지 않는다. 그러나 그곳에 예전에 용산이 아니라는 생각이 들었따. 더이상 돈 몇 천원 싸게 사기 위해서 이상가 저상가를 뒤질 필요가 없다.

인터넷으로(다나와,에누리) 가격 검색 싸이트에 최저가를 확인 하면되니까. 물론 다른 물건도 마찬가지라고 생각한다.

오늘 새로이 연 사무실(역삼동)에 네트워크 환경 구축을 위해서 스위치 허브,랜선(100M), RJ45-코드(?), 보호캡(100개), 멀티 탭(한국어로는 뭐더라) , 랜툴(정말 한국어로는 랜도구) 구매 했다. 사실 어떤것이 좋은 것이 몰라서 용팔이에게 조금 당했지만 그래도 가격이 저렴하니 그냥 넘어간다.

그리고 간만에 랜선 작업을 했는데. 요즘 스위치 허브는 auto MDI/MDI-x 기능이 있는데 그것은 upLink 포트를 와 direct 연결을 상관없이 전송되는 환경에 따라 자동으로 인식 (다만 랜선을 정상으로 만들어야 한다) 기능이다.

이기능이 좋은 것 같지만 저 같은 구라로 배운 기술에 대한 좌절을 심어 주었다. 특히 랜선 제작할때
1~8번 (1번 - 주황힌띠,2-주황,3-녹색힌띠,4-파랑,5-파랑힌띠,6-녹색,7-갈색띠,8-갈색) 특히 1,2,3,6 제대로 연결해야 잘 인식하는 것을 알게되었다. 요즘 100M이상을 많이 사용하고 또한 주황(띠), 녹색(띠)는 꼬인 횟수가 촘촘해서 데이타를 잘 전송한다고 한다. 만약 FM대로 랜선을 만들지 않으면 랜선 길이가 길어 지면 데이타 누실 발생한다.

오늘 제대로 배웠다. 내가 아는 지식을 작음을 잘 알겠되었고 그리고 많이 알수록 전문가나 다른 사람이야기 주의 깊게 들어야 한다는 생각이 들었다. 특히 어설픈 지식이거나 경험일 경우 어긋난 판단을 할 수 있다는 생각이 들었다. 뭐 3시간이상 고생을 했지만 아주 큰 배움을 얻었다. 아무튼 옛날 보다 훨씬 네트워크 구축이 쉬었지만 그래도 하루 종일 시간이 소요 되었다.
나중에 꼭 좋은 랜도구와 재료를 하나 정도 구매 하고 싶다. 무선랜도 좋지만 그래도 미리 미리 준비 해야 겠다.

그럼 자주 글을 쓰자.