2013년 9월 3일 화요일
2013-09-01 [web-servlet] 로그인 창 서블릿으로 만들기
HTTP 요청을 구분하여 쉽게 다루는 방법
- GenericServlet을 상속받지 말고, HttpServlet을 상속 받아라.
- get 요청을 처리하고 싶으면 doGet()을 재정의.
- post 요청을 처리하고 싶으면 doPost()을 재정의.
- xxx 요청을 처리하고 싶으면 doXxx()을 재정의.
- 상속 및 구현관계
- public interface Servlet {...}
- public abstract class GenericServlet implements Servlet {
init() {...} 구현
destroy() {...} 구현
getServletInfo() {...} 구현
getServletConfig() {...} 구현
service()는 구현하지 않음.
}
- public abstract class HttpServlet extends GenericServlet {
service() {
String method = ...getMethod();
if("get".equals(method)) {
doGet();
} else if("post".equals(method)) {
doPost();
} ...
...
}
doGet() {...}
doPost() {...}
doXxx() {...}
...
}
서버에 자동 요청하는 방법
1) Refresh
- setHeader("Refresh", "1;url=URL");
- <html><head><meta http-equiv="Refresh" content="1;url=URL"></head>...
2) Redirect
- sendRedirect("URL");
2013년 8월 29일 목요일
2013-08-29 [서블릿] 서블릿 등등
서블릿 만들기
- javax.servlet.Servlet 인터페이스 구현
- 이 인터페이스에 선언된 메서드를 서블릿 컨테이너(의 스레드)가 호출한다.
서블릿의 인스턴스 생성 시점
- 클라이언트가 요청할 때
- 서버가 시작될 때 만들어지는 것이 아님!!!
- 한번 만들면 다시 만들지 않음.
서블릿 등록
- 서블릿이 실행되려면 web.xml에 등록되어야 한다.
- 1) 서블릿 선언: <servlet></servlet>
- 2) 서블릿에 URL 부여: <servlet-mapping></servlet-mapping>
서블릿 만들기 2
- 매번 서블릿을 만들 때 마다 구현에 관심없는 메서드들도 만들기 때문에
짜증난다. 예) init(), destroy(), getServletConfig(), getServletInfo()
- 주로 어떤 작업을 수행할 것인지 service() 메서드를 구현하는데 집중할 필요가 있다.
- 대안? 도우미 클래스(BaseServlet)를 정의하여 상속 받는다.
javax.servlet.GenericServlet 클래스
- 서블릿 생성 시 모든 메서드를 구현하는 번거로움을 막기 위해
미리 4개의 메서드(init, destory, getServletConfig, getServletInfo)를 구현한
추상 클래스이다.
- 이전에 우리가 직접 만들었던 BaseServlet과 같은 역할을 한다.
GenericServlet의 용도를 이해하는데 도움이 될 것 같아 BaseServlet을 만들었다.
BaseServlet에 대해 왜 만들었는지 궁금해 하지 말라!
- 클라이언트로 출력하기!
제대로 Unicode를 클라이언트가 원하는 문자집합으로 변환하려면
// 출력스트림을 얻기 전에 변환할 문자집합을 설정한다.
response.setContentType("text/plain;charset=UTF-8");
주석
// 라인 주석
/*
* 멀티라인 주석
*/
/** JavaDoc 주석
- javadoc.exe로 API 문서를 만들 때 사용하는 주석
- 이 주석에 들어있는 내용을 가지고 API 주석을 만든다.
- 개발자가 별도의 문서를 작성할 필요 없이, 소스 코드에 문서를 위한 내용을 포함하게 만든다.
@author jinyoungeom
@애노테이션이름(값)
애노테이션(annotation)
- 컴파일러나 JVM에게 전달하는 주석
- javax.servlet.Servlet 인터페이스 구현
- 이 인터페이스에 선언된 메서드를 서블릿 컨테이너(의 스레드)가 호출한다.
서블릿의 인스턴스 생성 시점
- 클라이언트가 요청할 때
- 서버가 시작될 때 만들어지는 것이 아님!!!
- 한번 만들면 다시 만들지 않음.
서블릿 등록
- 서블릿이 실행되려면 web.xml에 등록되어야 한다.
- 1) 서블릿 선언: <servlet></servlet>
- 2) 서블릿에 URL 부여: <servlet-mapping></servlet-mapping>
서블릿 만들기 2
- 매번 서블릿을 만들 때 마다 구현에 관심없는 메서드들도 만들기 때문에
짜증난다. 예) init(), destroy(), getServletConfig(), getServletInfo()
- 주로 어떤 작업을 수행할 것인지 service() 메서드를 구현하는데 집중할 필요가 있다.
- 대안? 도우미 클래스(BaseServlet)를 정의하여 상속 받는다.
javax.servlet.GenericServlet 클래스
- 서블릿 생성 시 모든 메서드를 구현하는 번거로움을 막기 위해
미리 4개의 메서드(init, destory, getServletConfig, getServletInfo)를 구현한
추상 클래스이다.
- 이전에 우리가 직접 만들었던 BaseServlet과 같은 역할을 한다.
GenericServlet의 용도를 이해하는데 도움이 될 것 같아 BaseServlet을 만들었다.
BaseServlet에 대해 왜 만들었는지 궁금해 하지 말라!
- 클라이언트로 출력하기!
제대로 Unicode를 클라이언트가 원하는 문자집합으로 변환하려면
// 출력스트림을 얻기 전에 변환할 문자집합을 설정한다.
response.setContentType("text/plain;charset=UTF-8");
주석
// 라인 주석
/*
* 멀티라인 주석
*/
/** JavaDoc 주석
- javadoc.exe로 API 문서를 만들 때 사용하는 주석
- 이 주석에 들어있는 내용을 가지고 API 주석을 만든다.
- 개발자가 별도의 문서를 작성할 필요 없이, 소스 코드에 문서를 위한 내용을 포함하게 만든다.
@author jinyoungeom
@애노테이션이름(값)
애노테이션(annotation)
- 컴파일러나 JVM에게 전달하는 주석
Servlet의...
service()메서드
- 클라이언트가 보낸 Data를 읽기 전에, 문자집합을 알려줘야 한다.
반드시 getParameter()를 호출하기 전에 알려줘야 한다. 호출한 후에는 의미없다.
- 단, URL로 데이타를 보내는 경우(GET요청) 서블릿 컨테이너의 매뉴얼에 따라 설정한다.
예) 톰캣인 경우, server.xml 파일의 <Connector> 태그의 다음 속성 값을 설정한다.
<Connector ..... URIEncoding="UTF-8">...</Connector>
다음은 POST 요청시에 사용한다.
request.setCharacterEncoding("UTF-8");
2013년 8월 28일 수요일
2013-08-28 [Servlet] 톰캣을 이용한 웹프로그램 생성
웹 프로그램 구조...
이클립스는 Unicode이기때문에 UTF-8로 바꿔주는 것이필요하다
톰캣은 iso8859-1로 받고 보내기때문에 바꿔주는 코드가 필요하다.
Data를 읽기전에 읽기Data의 문자집합을 알려준다.
Data를 쓰기전에 쓰기Data의 문자집합을 알려준다.
이클립스는 Unicode이기때문에 UTF-8로 바꿔주는 것이필요하다
톰캣은 iso8859-1로 받고 보내기때문에 바꿔주는 코드가 필요하다.
Data를 읽기전에 읽기Data의 문자집합을 알려준다.
Data를 쓰기전에 쓰기Data의 문자집합을 알려준다.
2013년 8월 27일 화요일
2013-08-27 [Servlet] WEB 어플리케이션의 기초, TOMCAT설치하기
1.web이 나오게 된 과정

1) web 이전방식
2) HTML 의 도입
나는 <링크정보> 자바</끝>를 배웁니다.
설명 제어하는 Data = Meta data = "Markup" 이라고 합니다.
그래서 Hyper Text Markup Language ==> HTML이라고 불리는 것입니다.
2. 문서를 주고 받는 규칙 정의
connectionful(stateful)과 stateless(connectionless)
1) connectionful(stateful)
- 인터폴이라고 생각하면 쉽다. full-online으로 계속 연결되어 있어야 한다.
- 리소스(메모리)를 계속 사용해야 되기때문에 연결에 제한이 있고 많은 client처리가 불가
- 요청시 누구의 요청인지 알고 응답이 빠르다.
- ex) FTP, Telnet, chatting
2) stateless(connectionless)
- 114라고 생각하면 쉽다. 매번연결이 필요하다.
- 매번 연결과 끊김이 일어나기 때문에 많은 client의 요청이 처리가능하다.
- 응답속도가 느리다.
- client의 상태관리가 안된다.
3. HTTP
- Hyper-Text Transfer Protocol
HTTP server(web server) 와 HTTP client(web Browser)
4.Web의 발전
1) 문서전송
2) 간단한 Application(게시판 ,방명록)
*Web Application 아키텍처
*webApplication 구동
CGI(Common Gateway Interface)
-> web server와 web Application 사이에 데이터를 주고 받는 규칙
3) Web을 Application의 플랫폼화
PC App -> Web App으로 전환
HTML문서는 UI가 단순한 문제가 있었다.
그래서 아래와 같은 3가지 를 이용해 복잡한 UI를 표현할 수 있게 되었다.
HTML5 -> 문서구조
CSS3 -> 고급UI
JavaScript -> UI제어,서버통신
5.Servlet Container
Web Application에서 Java App과 관리 S/W를 Servlet Container를 통해서 가능하게 되었따.
* Servlet Container와 Application
6. Java EE 버전..
7.Web Application 배치(Deployment)
-> 서버마다 배치폴더가 다르다
-> Tomcat
-> c\javaide\server\apache-tomcat
\bin //톰켓 실행관련
\cont //선점파일
\lib // Tomcat java- libran
\work // 실행중에 임시 생성하는 파일
\webapps // web app 배치폴더
8.Web Application 배치폴더 구조
배치폴더 루트 / 웹어플폴더/ WEB-INF /web.xml // 기타 설정파일들
배치폴더 루트 / 웹어플폴더/ WEB-INF /classes // 자바 클래스 파일
배치폴더 루트 / 웹어플폴더/ WEB-INF /lib /.jar // 자바라이브러리 파일
9.Servlet 만들기
서블릿을 만들려면 Servlet인터페이스(규칙)를 상속받아 반드시 메서드를 구현해야 한다.
호출규칙으로서 다음과 같은 5가지 메서드가 있다.
- init()
- service()
- destroy()
- getServletConfig()
- getServletInfo()
일반적으로 메서드를 항상 구현하는 번거로움이 있기 때문에 자주 쓰이는 service()를 뺀 나머지를 구현해 놓은 추상클래스가 있다. 이 추상클래스를 보통 상속받으면 service()만 구현하면 된다. 이 추상클래스를 GenericServlet 클래스라고 한다.
10. TOMCAT 설치하기
1) 이클립스 환경설정에서 아래와같이 Runtime 환경변수 등록
2) 아래와 같이 설치한 Tomcat 버전을 찾아 설치
3) 아래와 같이 톰켓 폴더지정
4) 아래와같이 Servers에서 New->Server
5) 다운로드한 Tomcat 버전에 맞추어 선택
6) 아래서버를 더블클릭하여 나오는 창에서 HTTP 포트번호를 원하는 포트번호로 지정
2013년 8월 21일 수요일
2013-08-21 [JAVA고급] 각종 내용정리2
*String의 equals메서드
Object클래스의 equals는 주소가 같은지를 비교하고
String클래스의 equals는 내용이 같은지를 비교한다.
--> String 클래스의 equals는 Object클래스의 equals를 오버라이딩한 메서드이다.
*String과 StringBuffer
String은 equals를 재정의하였기때문에 그 내용이 같은지를 비교한다.
StringBuffer는 equal를 재정의하지 않았기때문에 equals가 주소값만 비교한다.
*equals를 오버라이딩 하는 방법
instanceof 보다는 getClass를 이용하여 비교하는 방법을 선호한다.
--> instanceof는 상속한 클래스에 대해서는 비교할 수가 없지만 getClass메서드를 이용하면
상속한 클래스라도 구분이 가능하다.
*toString
Object로부터 상속받은 toString()은 원래 "클래스명@인스턴스고유값"을 리턴한다.
println() 메서드는 해당 객체의 toString() 리턴 값을 출력한다.
*SimpleDateFormat을 이용하여 문자열을 입력받아 Date형 객체에 저장하기
Object클래스의 equals는 주소가 같은지를 비교하고
String클래스의 equals는 내용이 같은지를 비교한다.
--> String 클래스의 equals는 Object클래스의 equals를 오버라이딩한 메서드이다.
*String과 StringBuffer
String은 equals를 재정의하였기때문에 그 내용이 같은지를 비교한다.
StringBuffer는 equal를 재정의하지 않았기때문에 equals가 주소값만 비교한다.
*equals를 오버라이딩 하는 방법
instanceof 보다는 getClass를 이용하여 비교하는 방법을 선호한다.
--> instanceof는 상속한 클래스에 대해서는 비교할 수가 없지만 getClass메서드를 이용하면
상속한 클래스라도 구분이 가능하다.
*toString
Object로부터 상속받은 toString()은 원래 "클래스명@인스턴스고유값"을 리턴한다.
println() 메서드는 해당 객체의 toString() 리턴 값을 출력한다.
*SimpleDateFormat을 이용하여 문자열을 입력받아 Date형 객체에 저장하기
*날짜 형식을 올바르게 입력할 때까지 반복문
*클래스로 선언한 객체명보다 new로 생성한 new 클래스(); 클래스 영향을 더욱 받는다.
C가 B클래스를 상속받을 때
B로 선언한 객체명을 C로 생성한 객체를 가리킬 때는 instanceof는 모두 객체가 가능하다.
(단, X,Y는 각각 B와 C의 인터페이스)
하지만 B로 선언한 객체명을 B로 생성한 객체를 가리킬 때는 instanceof는 A,B,X만 가능하다. 자신을 상속한 클래스에 대해서는 instanceof는 true를 반환하지 않는다.
2013년 8월 20일 화요일
2013-08-20 [JAVA고급] 각종 내용정리
1.Fly Weight 데코레이터 패턴
Fly Weight 데코레이터 패턴
-> 자주 사용되는 객체를 객체 생성에 시간이 오래 걸리는 객체를 공유함에 넣어서 사용한다. 예로 Pooling기법을 사용하여 1)빌린다 2)사용 3)반납
2. interface...
interface형 변수를 선언해서 그 interface를 구현한 클래스에 담을 수 있다.
Interface A = new Class(); <<가능 Class는 interface를 implements한 클래스
3.DAO
데이터 Access 처리로 쓰이는 파일입니다
DAO 만드는 이유 : 재사용성과 유지보수를 좋게 하기 위해서입니다.
(1) DAO(DataAccessObject) 파일을 이용
(2) DAO에서 반복적인 연결을 줄이고자 DBConnectionPool을 이용
6. MVC구조(Architecture)
(1) Desktop Application
(2) Web App
*for의 간단한 표현
*Generic(제네릭)
Fly Weight 데코레이터 패턴
-> 자주 사용되는 객체를 객체 생성에 시간이 오래 걸리는 객체를 공유함에 넣어서 사용한다. 예로 Pooling기법을 사용하여 1)빌린다 2)사용 3)반납
2. interface...
interface형 변수를 선언해서 그 interface를 구현한 클래스에 담을 수 있다.
Interface A = new Class(); <<가능 Class는 interface를 implements한 클래스
3.DAO
데이터 Access 처리로 쓰이는 파일입니다
DAO 만드는 이유 : 재사용성과 유지보수를 좋게 하기 위해서입니다.
4. DB의 사용
(2) DAO에서 반복적인 연결을 줄이고자 DBConnectionPool을 이용
5.equals를 재정의할 일이 생길때 JAVA에서 제공되는 툴을 사용한다
6. MVC구조(Architecture)
(1) Desktop Application
(2) Web App
*Generic(제네릭)
2013년 8월 19일 월요일
2013-08-19 [JAVA고급] java에서 DB 입출력(등등..)
1. Design Pattern: Factory Method
객체 생성이 복잡한 경우 특정 메서드를 통해 얻는 방식.
2. 아래 그림과 같이 VM argument에 등록하여서 mysql,oracle등등 어느 한 DBMS에 구애받지 않도록 만든다.

3. Statememt vs. PreparedStatement
1) 소스 가독성:
SQL문이 복잡할 수록 읽기 어렵다 <==> 간결하다.
2) 바이너리 데이터(이미지, 음악, 동영상 등) 입력:
불가(base64와 같은 문자열 형식으로 인코딩 시 가능) <==> 가능
3) 반복 수행 시 속도:
매번 SQL문을 DBMS 형식에 따라 변환 속도 느리다
<==> 한번만 변환, 그리고 실행, 속도 빠르다.
4.SQL구문
add :
insert into MEMBERS(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE values(?,?,?,?,?,?)
list :
select MNAME,PHONE,EMAIL from MEMBERS order by MNAME
view :
select MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE from MEMBERS where EMAIL='email'
update :
update MEMBERS set MNAME=?, PHONE=?, BLOG=?, AGE=?, REG_DATE=now() where
EMAIL=?");
delete :
delete from MEMBERS where EMAIL='member.getEmail()'
객체 생성이 복잡한 경우 특정 메서드를 통해 얻는 방식.
2. 아래 그림과 같이 VM argument에 등록하여서 mysql,oracle등등 어느 한 DBMS에 구애받지 않도록 만든다.

3. Statememt vs. PreparedStatement
1) 소스 가독성:
SQL문이 복잡할 수록 읽기 어렵다 <==> 간결하다.
2) 바이너리 데이터(이미지, 음악, 동영상 등) 입력:
불가(base64와 같은 문자열 형식으로 인코딩 시 가능) <==> 가능
3) 반복 수행 시 속도:
매번 SQL문을 DBMS 형식에 따라 변환 속도 느리다
<==> 한번만 변환, 그리고 실행, 속도 빠르다.
4.SQL구문
add :
insert into MEMBERS(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE values(?,?,?,?,?,?)
list :
select MNAME,PHONE,EMAIL from MEMBERS order by MNAME
view :
select MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE from MEMBERS where EMAIL='email'
update :
update MEMBERS set MNAME=?, PHONE=?, BLOG=?, AGE=?, REG_DATE=now() where
EMAIL=?");
delete :
delete from MEMBERS where EMAIL='member.getEmail()'
2013년 8월 16일 금요일
2013년 8월 14일 수요일
2013-08-14 [JAVA] MYSQL준비, JAVA문법(추상클래스,인터페이스)
1.MYSQL 준비
(1) MySQL\Connector J 5.1.25폴더의 mysql-connector-java-5.1.25-bin.jar를 이클립스에 복사합니다.
(2) 보기와 같이 프로젝트에서 오른쪽 클릭한 후 속성에 들어가셔서 JAR를 추가합니다.
(3) 아래 그림과 같이 JARs를 추가해줍니다.

2. JAVA문법(추상클래스, 인터페이스)
(1) 추상클래스
- 서브클래스들에게 공통 속성 및 기능을 상속해주기 위한 용도이다.
*Adapter 패턴
기존에 작성된 클래스를 새로운 규칙에 맞추어 사용하고자 할 때 쓰는 설계 기법
(1) MySQL\Connector J 5.1.25폴더의 mysql-connector-java-5.1.25-bin.jar를 이클립스에 복사합니다.
(2) 보기와 같이 프로젝트에서 오른쪽 클릭한 후 속성에 들어가셔서 JAR를 추가합니다.
(3) 아래 그림과 같이 JARs를 추가해줍니다.

2. JAVA문법(추상클래스, 인터페이스)
(1) 추상클래스
- 서브클래스들에게 공통 속성 및 기능을 상속해주기 위한 용도이다.
*Adapter 패턴
기존에 작성된 클래스를 새로운 규칙에 맞추어 사용하고자 할 때 쓰는 설계 기법
(2) 인터페이스
사용 객체와 사용당하는 객체 사이의 호출 규칙
자동차 ==> [타이어] <== 한국타이어, 금호타이어 등등
인터페이스의 메서드는 단지 규칙으로 역할을 하기 때문에 구현하지 않는다.
=> 인터페이스의 모든 메서드는 추상메서드 이다.
=> abstract 생략가능
규칙은 반드시 공개되어야 하기 때문에, public이다.
=> public 은 생략가능
피드 구독하기:
글 (Atom)

















































