→ Top Page ←
→ Guestbook ←
→ Read RSS Paper ←
→ Admin ←
 
08/03/06 00:02 | Study - Work
[EJB] Servlet-Web 기본
삼성 SDS 멀티캠퍼스에서 실시하는 『원샷! 웹 역량 강화(실습)』교육(2008/03/03~2008/03/07)을 정리한 내용입니다.

1. Overview
2. 개발환경
3. Basic Technology
4. Servlet
   4.1 Web 기본

   4.2 Servlet 기본
   4.3 Servlet 중요 객체
   4.4 Client State
   4.5 Sservlet Filter
5. JSP
6. EJB


4.1 Web 기본
*HTTP(Hyper Text Transfer Protocol)*
-웹 서버와 웹 클라이언트(Browser) 간에 통신하기 위한 통신 규약
-TCP/IP 기반의 응용 프로토콜
-특징


연결지향(Connect Oriented) : client 컴퓨터에서 server 컴퓨터에게 요청정보를 전송하면 무조건 Server로부터 응답결과가 온다.



무상태(stateless) : Client 와 Server 사이에 한 번의 연결이 이루어지고 나면 곧바로 끊기기 때문에 클라이언트와 웹 서버 사이에 지속적인 상태정보가 유지될 수 없다. (Cookie 나 Session가 같은 별도의 상태유지 기술 필요)
*HTTP 구조*

Http RequestHttp Response
Start lineClinet에서 요청한 요청방식, 요청 자원의 URL및 Query String, 프로토콜 버전프로토콜 버전, 응답할 내용의 상태정보
Message-Header문서 형식, client 기본 정보(버전, ip)응답을 보내는 서버의 HTTP 관련정보
Message-BodyServlet을 호출할 때 추가로 전송되는 Query String요청한 문서 내용

*HTTP 응답 상태 코드*
상태코드의미범위별 의미
200
클라이언트의 요청이 성공적으로 끝남클라이언트 요청 성공
400
요청한 method를 지원하지 않음클라이언트 요청에 대한 방향 재정의, 추가 동작 필요
401
인증오류
403
사용자 허가 모드 오류
404
요청한 파일이 존재하지 않음
405
요청한 method를 지원하지 않음
500
Internal Server Error(실행오류)서버 오류

*HTML Form*
클라이언트는 HTML의 Form Tag를 통해서 사용자 정보를 Servlet 프로그램에 전달할 수 있다. 이렇게 전달된 문자열을 Query 문자열이라고 한다. Form Tag는 브라우저에 다양한 GUI 컴포넌트를 출력하여 사용자로부터 정보를 받고, 이 데이터를 처리할 Servlet 프로그램을 호출한다.

<FORM NAME=”form_name” METHOD=”get|post” ACTIN=”servlet_url”>
사용자에게 제공할 입력 양식
</FORM>
-Name
FORM Tag의 이름, 하나의 HTML 파일에 여러 FORM Tag를 작성할 수 있다.
-METHOD
FORM Tag에 입력한 사용자 정보를 서버 측에 전송할 때의 전송 방식
① Get 방식



브라우저의 URL 검색창을 통해 요청한 Servlet은 DEFAULT로 GET방식이다. FORM Tag없이 URL뒤에 “?” 를 붙이고 Query 문자열을 전송가능.
(ex:http ://localhost:8080/servlet/LoginServlet?id=gurum&pass=”1234”)
전송할 수 있는 데이터의 양이 제한되어 있기 때문에 한계가 있음.
URL상에 입력 정보가 공개되기 때문에 보안상 중요한 데이터는 부적절
② Post 방식
반드시 FORM Tag를 통해서만 전송, 반드시 HTML 문서가 필요


전송할 수 있는 데이터에 제한 없음. 그림 파일 등을 업로드 하는 FORM은 반드시 POST방식
요청 프로토콜 Message-body를 통해 데이터가 전달되므로 노출 되지 않음
-ACTION
사용자가 입력한 정보를 가지고 호출할 Servlet 프로그램의 URL을 기술. Servlet 프로그램은 사용자로부터 전송된 Query 문자열을 적절히 이용하여 동적인 응답결과를 생성

*INPUT / SELECT / TEXTAREA tag*
- INPUT tag
<INPUT TYPE=”text|password|checkbox|radio”
                NAME=”tag_name” VALUE=”default_value”
                SIZE=”column_size”
                MAXLENGTH=”max_length”/>
필수 속성 : TYPE, NAME
TYPE : 기본값은 TEXT


TEXT : 단순한 Text 박스
(ex:<INPUT TYPE="TEXT" NAME="NAME" SIZE="14">)


PASSWORD : 텍스트 박스에 입력 글자를 *로 표현
(ex:<INPUT TYPE="PASSWORD" NAME="PW" SIZE="10">)


CHECKBOX : 사용자가 선택할 수 있는 체크 상자 제공
(ex:<INPUT TYPE="CHECKBOX" NAME="FAVOR" VALUE="영화">영화)


RADIO : 라디오 버튼 제공, 한번에 하나 선택
(ex:<INPUT TYPE="RADIO" NAME="SEX" VALUE=" 여자">)여자


SUBMIT : 사용자가 FORM 입력 정보를 Server로 전달하기 위한 버튼 제공
(ex:<INPUT TYPE="SUBMIT" VALUE="전송"/>)


RESET : FORM을 초기 상태로 만드는 버튼 제공
(ex:<INPUT TYPE="RESET" VALUE="취소"/>)



HIDDEN : 화면에 객체를 보여주지 않고 name/value 쌍을 제공, 사용자의 입력이 필요 없는 경우, 화면에서 화면으로 정보를 전달하는데 유용
(ex:<INPUT TYPE="HIDDEN" NAME="NAME" VALUE="신명진">)
NAME : Servlet 프로그램에서 사용자가 TEXTFIELD에 입력한 정보를 얻기 위해서 필요한 속성.
VALUE : TEXTFIELD에 기본적으로 설정될 문자열
SIZE/MAXSIZE : TEXTFIELD의 길이를 지정하는 속성
- SELECT tag : 선택적으로 고를 수 있는 리스트 상자를 만들어준다.
- TEXTAREA tag : 여러 행을 입력 받을 수 있는 텍스트 상자를 제공한다.

 

Permanentlink | Trackbacks | Comments  


08/03/05 00:18 | Study - Work
[EJB] Basic Technology
삼성 SDS 멀티캠퍼스에서 실시하는 『원샷! 웹 역량 강화(실습)』교육(2008/03/03~2008/03/07)을 정리한 내용입니다.

1. Overview
2. 개발환경
3. Basic Technology
   3.1 JNDI
   3.2 JDBC

4. Servlet
5. JSP
6. EJB


3.1 JNDI(Java Naming and Directory Interface)
*Naming & Directory Service*
-

Web Application 은 전체 J2EE Technology의 일부분을 구성하는 기술이며 이 J2EE가 분산환경을 위한 기술이 된다.
-


분산 환경은 네트워크로 연결된 수많은 컴퓨터에 분산된 여러 자원들이 하나의 시스템을 구성한다는 이야기가 될 것이고 그런 의미에서 네트워크상에서 어떤 하나의 Application이 필요한 자원을 찾고 획득하는 일은 가장 중요한 일 중 하나가 될 것이다.
-

이렇게 분산 컴퓨팅과 엔터프라이즈 컴퓨팅 환경에서의 자원의 획득과 이용의 효율성을 위해 제공되는 서비스가 Naming & Directory Service이다.
-



Naming & Directory Service는 어떤 Server 혹은 Application 에서 분산환경에 서비스하려는 자원을 이 Naming & Directory Service에 이름값과 실제 자원을 연결하여 등록하면 그 자원을 이용하려는 다른 Application에서 Naming & Directory Service에 접근하여 이름값만을 가지고 자원을 연결하여 이용할 수 있게 하는 개념이다.
-ex) DNS 서버
-








분산환경에서 Application을 작성하면서 각각의 자원의 위치에 비 종속적인 프로그램을 작성할 수 있지만, Naming & Directory Service를 제공하는 Server들이 다양하게 존재하므로 각 Vendor에 의해 만들어진 각각의 Naming & Directory Server 에 종속적인 특성을 고려하여 프로그램을 작성해야 한다. 이에 자바에서는 JNDI를 발표하였는데 Naming & Directory Server 를 만드는 Vendor 들이 이 JNDI를 지원해 준다면 Application에서 Naming Server 를 이용하는 Interface가 동일하므로 Naming Server에 비종속적인 코드를 작성할 수 있다. 즉, JNDI가 지원되면 분산환경에서 각각 네트워크상으로 떨어진 수많은 Application이 직접 연결되지 않아도 됨으로 자원의 위치에 상관없이 독립적인 프로그래밍이 가능하다는 이점을 얻어낼 수 있다.

*Java Application (Web Application) 에서 JNDI를 이용하는 Service*
<
-Environment Variable
Application이 수행되면서 필요한 환경변수를 Container에 등록하고 프로그램에서는 JNDI Service를 통해 프로그램 수행 중에 데이터를 얻을 수 있다.
-EJB Bean 호출
Web Application이 EJB Bean을 이용하든, 하나의 EJB Bean이 다른 EJB Bean을 이용하든 모든 EJB Bean의 이용은 JNDI를 통하여 해당 EJB에서 Service하는 객체를 얻어야 하며 그렇게 얻어진 객체의 Remote Method Invocation을 통해 EJB Bean을 이용한다.
-Database Connection Pool
Database를 이용하기 위해 Application에서는 Database와 Connection을 맺어야 하는데 이 Connection을 효율적으로 하기 위해 Connection Pool을 이용한다. 이 Connection Pool을 이용하기 위해 DataSource라는 객체를 JNDI를 통해서 얻는다.
-JMS Service
Java Application 간의 비동기적 Message 송수신을 위해서 JMS Server에서 제공되는 객체를 송신자와 수신자가 각각 이용하는데 이 Queue 혹은 Topic 객ㄱ체를 얻기 위해 JNDI Service가 이용된다.

3.2 JDBC
JDBC는 Database에 비 종속적인 DBMS프로그램이 가능하게 하는 Sun의 interface이다. JDBC Driver는 각 Database Vendor들이 Database핸들링을 위해 만든 Class의 집합으로써, Database에 따라 각각 다른 JDBC Driver가 이용되지만, 각 Vendor들이 SUN의 스펙에 맞도록 JDBC Driver를 만들었으므로 SUN에서 정의한 SQL Interface만 보고 프로그램을 작성하면 된다.
*JDBC 실행 절차*

JDBC Driver 로드
Class.forName(“oracle.jdbd.driver.OracleDriver”);
: 주어진 문자열을 찾아서 로딩한다. 문자열은 이용하는 JDBC Driver의 package와 class 명이다.
Driver NameExample
JDBC-ODBC BridgeClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Oracle OCI DriverClass.forName(“oracle.jdbc.driver.OravleDriver”);
Oracle Thin DriverClass.forName(“oracle.jdbc.driver.OravleDriver”);
MySql DriverClass.forName(“org.gjt.mm.mysql.Driver”);
SyBase DriverClass.forName(“com.sybase.jdbc2.jdbc.SybDriver”);
Informix DriverClass.forName(“com.Informix..jdbc.IfxDriver”);
Database 연결
con=DriverManager.getConnection(“jdbc:oracle:thin://@70.12.220.35:14521:ora8”,”scott”,”tiger”);
로딩된 driver는 DriverManager에 정보가 등록되며 해당 driver를 이용해서 connection을 시도하는 구문이다.
Connection을 위해서 Database의 url, user정보(id, pw)를 넘겨준다.
url은 protocla://Ip:port/databasename 형식으로 작성되며 위에서 dbc:oracleL:thin 이 protocol이 된다.
DriverManager는 주어진 protocol로 동작할 수 있는 driver를 등록되어 있는 driver중에서 찾으며 해당 driver가 동작해서 Database와 connection을 시도한다.
Driver NameURL
JDBC-ODBC Bridgejdbc:odbc:[;=]
Oracle OCI Driverjdbc:oracle:oci7:/@
Oracle Thin Driverjdbc:oracle:thin:@::
MySql Driverjdbc:mysql://:/
SyBase Driverjdbc:Sybase:Tds::
Informix DriverJdb:Informix-sqli:///:INFORMIXSERVER
Statement 객체 생성
Statement stmt = con.createStatement();
Connection이 성공적으로 이루어졌다면 연결된 Database에 전송될 수 있는 SQL문을 지칭하는 Statement 객체를 생성한다.
SQL문 실행
ResultSet re = stmt.executeQuery(“select * from member);
셍성된 Satement객체를 이용하여 SQL문 실행
select 문 : executeQuery() return value : ResultSet 객체
insert/update/delete 문 : executeUpdate() return value : int (Query 문 실행하였을 때 반영된 row개수)
결과이용
rs.next()
결과를 표현하는 ResultSet 객체 안에는 Record가 여러 건 일 수 있으므로 next()메서드를 이용하여 하나씩 받아서 처리.
next(): 넘겨줄 record가 존재하면 true, 존재하지 않으면 false를 return.
rs.getString() : 선택된 Record의 실제 data를 얻어내기 위한 구문. 매개변수로 얻으려는 column명을 써주거나 column의 순서를 써주면 된다.
Ex) rs.getString(“id”) -> 선택된 record의 id column에 있는 data를 얻음
     rs.getInt(4)       -> 선택된 record의 넘어온 값 중에서 4번째 column의 값을 정수형으로 얻으려는 구문.
연결 해제
con.close()
DBMS작업이 끝났으면 Statement 객체와 Connection 객체를 닫아준다.
try-catch-finally 구문에서 finally에서 실행할 것!!

*Connection Pool*
Client 의 요청 때 마다 Connection 작업을 하게 되면 Connection 과정은 일정 시간이 필요한 서버에 부담을 주는 작업이 되며 System 전체적인 Connection에 대한 관리가 힘들어진다. 따라서 DBMS 프로그램에서는 직접 Connection 연결하여 작업하지 않고 Connection Pool을 이용한다.
Connection Pool이란 미리 일정수의 Connection을 만들어 놓고 필요한 Application에 전달하여 이용하는 방법
* DataSource : Connection Pool의 Connection을 관리하는 객체, 필요한 Connection을 획득, 반납

[DB 접속 예제 소스]
Test.java (2.7 KB)

DBBean.java (966 Byte)

 

Permanentlink | Trackbacks | Comments  


[1][2][3][4][5][6][7][8][9] ... [96]
<< PREV | NEXT >>

 

 

 

▒ 맹~ ▒ 's 블로그
To Know You is To Love You

  View Category
분류 전체보기 (191)
Diary (108)
Journey (25)
Study (37)
Infomation (6)
Culture (8)
Etc (7)

  Calender
<<   2009 Nov   >>
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293012345







Get RSS Page XML RSS2.0
Powered By TatterTools
Skin By Leezche from plyfly.net

Total : 296379
Yesterday : 278
Today : 40

Recent Articles
눈을 뜨다!! (11)
▶◀ [근조] 당신이 그.. (3)
Array를 이용한 다중 DB .. (10)
대학원생이신가요? (9)
[2008년 오사카,교토,고.. (1)
[2008년 오사카,교토,고.. (4)
[2008년 오사카,교토,고.. (6)
프로야구 시즌이 돌아.. (6)
[EJB] Servlet-Web 기본
[EJB] Basic Technology
Recent Replies
우왕~ 말로만 듣던... 그..
11/11 - KID
말만 듣고 있어도.... 오..
10/30 - 마틴
새로운 세상이겠네..ㅎ..
10/27 - Missbae
응~ 엄청 겁먹었었는데..
10/26 - 맹
오~~ 언니 고민하시더니..
10/23 - 레나^^
Recent Trackbacks
노무현 전 대통령 서거..
마틴블로그 닷 넷
너도사라~!
jalnaga's Blog
내 도메인의 가치
날자, 허리휜나비!!!
내 도메인은 얼마일까?
+ 。。언제나 맑음 。。+
내 도메인의 가치는 ? ..
▒ UnlimiTCode Blog™ ▒
Favorite Link
+ 。。언제나 맑음 ..
+ 미스터트롤의 개인..
::투덜:: MonOloguE
ACARAN BLOG & GALLERY
heejooya.com▒Happy Now▒..
ICESUN=
jalnaga's Blog
Kbckbc's Blog
Narae's 觀照處 Ver..
The Winner Takes It All
UnlimiTCode Blog™ @ T..
[ Martin Blog ]
▒ UnlimiTCode Home™ ▒..
今天你翔了吗?^_~오..
김영욱의 블로그
날자, 허리휜나비!!!
남현정의 T스토리
미스터트롤의 영혼..
박현정 홈피
시원한 하늬바람
조각구름 BLOG
차의영 교수님