'JSP'에 해당되는 글 15건

  1. 2013.01.09 MVC패턴과 모델 1,2 2
  2. 2012.10.05 JSP 수업 DB부분
  3. 2012.09.26 DB정리!!!
  4. 2012.09.25 JSP 수업.
  5. 2012.09.13 네번째 수업.
  6. 2012.09.11 jsp 세번째수업
  7. 2012.09.07 두번째 수업 (추가정리).
  8. 2012.09.07 두번째 수업.
  9. 2012.09.03 첫번째 수업.
  10. 2012.08.16 웹 어플리케이션
posted by changhozz 2013. 1. 9. 02:59

MVC 패턴.
- MVC이란 Model, View, Controller의 약자로 정말 많이 들어봤지만, 자세히는 모르던 개념.
정리하고가자.

우선 JSP 기반 웹 어플리케이션의 구조에는 MVC1패턴과 MVC2패턴 구조가 있다.
JSP에서 모든 로직과 출력을 처리하느냐, 
아니면 JSP에서는 출력만 처리하느냐에 따라서 모델 1구조와 모델 2 구조로 구분된다.
우선 모델 1 구조에 대해서 알아보자.

1). 모델 1 구조.

- JSP로 구현한 기존 웹 어플리케이션은 모델 1 구조로 웹 브라우저의 요청을 JSP 페이지가 받아서 처리하는 구조이다.


- JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관련 코드가 뒤섞여 있는 구조이다. 즉, 내가 만들었던 허접한 쇼핑몰 hoshop또한 모델 1 구조였던것이다.
즉, HoShop과 같이 웹 브라우저의 요청이 곧바로 JSP에 전달된다.
웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을
처리하고 그 결과를 클라이언트에 출력해준다.
JSP 페이지에서 웹 브라우저가 요청한 것들을 처리한다는 것은 JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여줄 출력 관련 코드가 섞인다는 것을 의미한다.
프로그래밍 수업시간에 다뤘던것처럼 하나의 JSP 페이지에서 서비스 클래스를 통해서 원하는 작업을
수행하고 그 결과를 출력하는 경우가 많았는데, 이것이 모델 1 구조의 전형적인 예이다.

- 이러한 구조는 JSP 페이지 안에서 모든 정보를 표현(View)하고 저장(Model)하고 처리(Control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어진다.

모델 1 구조 정리

- 정의 : 모든 클라이언트 요청과 응답을 JSP가 담당하는 구조이다.
- 장점 : 단순한 페이지 작성으로 쉽게 구현 가능하다. 중소형 프로젝트에 적합하다.
- 단점 : 웹 애플리케이션이 복잡해지면 유지보수 문제가 발생된다.


그럼 다음으로 모델 2 구조를 살펴보자.

2). 모델 2 구조.

모델 2 구조는 모델 1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 된다.
서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP 페이지로 포워딩한다.
포워딩을 통해서 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다.
즉, 서블릿이 비즈니스 로직 부분을 처리하게 되는 것 이다.
모델 2 구조의 특징은 웹 브라우저의 모든 요청이 단일 진입점,
즉 하나의 서블릿에서 처리된다는 점이다.
하나의 서블릿이 웹 브라우저의 모든 요청을 받기 때문에,
서블릿은 웹 브라우저의 요청을 구분할 수 있는 방법을 필요로 하며,
서블릿은 웹 브라우저의 요청을 처리한 후 웹 브라우저에 보여줄 JSP를 선택하게 된다.
모델 2 구조의 이러한 특징 때문에 MVC(Model - View - Controller)패턴에 기반을 두어
웹 어플리케이션을 구현할 때는 모델 2 구조를 주로 사용한다. 
현재 우리 GROUPWARE 또한 모델 2 구조를 사용하고 있다.

 

- 모델 1은 컨트롤러가 모델이나 뷰를 포함한 MV 형태를 띄고 있고, 모델 2는 완전한 MVC 형태를 적용하고 있다고 볼 수 있다.

모델 2 구조 정리

-  정의 : 클라이언트의 요청처리와 응답처리, 비즈니스 로직 처리하는 부분을 모듈화시킨 구조이다.
-  장점 : 처리작업의 분리로 인해 유지보수와 확장이 용이하다.
-  단점 : 구조 설계를 위한 시간이 많이 소요되므로 개발 기간이 증가한다.


모델 2 를 설명하면서 MVC패턴이란 무엇인지까지 설명이 되버린것같다.
그래도 다시한번 MVC패턴이란 무엇인가를 알아보자.

 3). MVC 패턴

모델(Model) : 페이지의 이동간에 파라미터나 값들을 넘겨줄때 
이러한 값들을 담은 인스턴스를 의미한다.

뷰(View) : 비즈니스 영역에 대한 프레젠테이션 뷰(즉, 사용자가 보게 될 결과 화면)를 담당한다.

컨트롤러(Controller) : 사용자의 입력 및 흐름 제어를 담당한다.

사용자는 원하는 기능을 처리하기 위한 모든 요청을 단일 컨트롤러에 보낸다.
모델은 비즈니스와 관련된 상태 정보 및 관련 기능을 제공하는데,
컨트롤러는 이 모델을 통해서 사용자의 요청을 처리한다.
모델을 사용하여 알맞은 비즈니스 로직을 수행한 후 컨트롤러는 사용자에게 보여줄 뷰를 선택하며,
선택된 뷰는 사용자에게 알맞은 결과 화면을 보여준다. 
뷰가 사용자에게 결과 화면을 보여줄 때에는 결과 정보가 필요한데,
컨트롤러가 이 정보를 뷰에 전달해 준다.


MVC 패턴의 핵심은 다음과 같다.
-비즈니스 로직을 처리하는 모델과 결과 화면을 보여주는 뷰가 분리되어 있다.
-어플리케이션의 흐름 제어나 사용자의 처리 요청은 컨트롤러에 집중된다.

즉, 모델은 오직 비즈니스와 관련된 부분을 처리하면 될 뿐 사용자에게 보여줄 화면이나 흐름 제어에 
대해서는 처리할 필요가 없다.
반대로 뷰는 사용자에게 알맞은 화면을 보여주는 역할만 수행하면 될 뿐, 비즈니스 로직이나 흐름 제어 등을 신경 쓸 필요가 없다.
이렇게 모델과 뷰가 분리되어 있기 때문에 모델의 내부 로직이 변경된다 하더라도 뷰는 영향을 받지 않으며, 뷰와 모델이 결합되어 있지 않기 때문에 뷰를 어렵지 않게 변경할 수 있다.

또한, 컨트롤러는 사용자의 요청에 대해서 알맞은 모델을 사용하고 사용자에게 보여줄 뷰를 선택하기만 하면 된다. 
만약 컨트롤러나 모델에 상관없이 새로운 뷰를 추가해 주면 된다. 즉
, MVC 패턴을 사용함으로써 유지 보수 작업이 간단해지고 어플리케이션을 쉽게 확장할 수 있게 되는 것이다.

정리를하자면, 모델 2 구조에서 서블릿은 MVC 패턴의 컨트롤러 역할을 한다.

서블릿은 웹 브라우저의 요청과 웹 어플리케이션의 전체적인 흐름을 제어하게 된다.
또한 모델 2 구조에서 JSP는 뷰의 역할을 담당한다. 비즈니스 로직과 관련된 코드가 없는 점을
제외하면 일반 JSP와 거의 동일한 형태를 취한다는 것이다.




'JSP > JSP 정리' 카테고리의 다른 글

DB정리!!!  (0) 2012.09.26
JSP 수업.  (0) 2012.09.25
웹 어플리케이션  (0) 2012.08.16
Chpater 1. 웹 프로그래밍 기초.  (0) 2012.08.16
웹 서버란  (0) 2012.08.16
posted by changhozz 2012. 10. 5. 20:25

JSP에서 JDBC 프로그래밍하기.

JDBC( Java DataBase Connectivity)는 자바에서 데이터베이스와 관련된
작업을 처리할 수 있도록 도와주는 API이다.

JDBC의 구조는

자바어플리케이션    ㅡ> JDBC API  ㅡ> JDBC드라이버  ㅡ> 데이터베이스 
(우린 JSP일테고)

이런식이다.

각각의 DBMS는 자신에게 알맞은 JDBC 드라이버(클래스 형태로 존재하면 일반적으로 Jar파일로 제공됨)를 제공하고 있으며, JDBC API는 JDBC 드라이버를 거쳐 데이터베이스와 통신을 한다.

나같은 경우는 mysql-connector-java-5.1.22.zip파일을 받았는데
압축을 풀게되면 mysql-connector-java-5.1.22-bin.jar 파일이 있다.
이 jar파일을 원하는프로젝트/WEB-INF/lib 디렉터리에 복붙하면된다.

------------------------------------------------------------------------------------

JDBC 프로그래밍의 코딩 스타일

JDBC 프로그램의 일바너인 실행 순서 ㅡ>

1.JDBC 드라이버로딩
2.데이터페이스 커넥션 구함
3.쿼리 실행을 위한 Statement 객체 생성
4.쿼리 실행
5.쿼리 실행 결과 사용
6 Statement 종료
7.데이터베이스 커넥션 종료

 

 

// 1. JDBC 드라이버 로딩

Class.forName("com.mysql.jdbc.Driver");

Connection conn = null; Statement stmt = null; ResultSet rs = null;

    try {

        // 2. 데이터베이스 커넥션 생성

     conn = DriverManager.getConnection(""jdbc:mysql://localhost:3306/chap12", "user", "pass");

        // 3. Statement 생성

        stmt = conn.createStatement();

        // 4. 쿼리 실행

        rs = stmt.executeQuery("select * from MEMBER order by MEMBERID");

        // 5. 쿼리 실행 결과 출력

        while(rs.next()) {

             String name = rs.getString(1);

        }

    } catch(SQLException ex) {

        ex.printStackTrace();

    } finally {

        // 6. 사용한 Statement 종료

        if (rs != null) try { rs.close(); } catch(SQLException ex) {}

        if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}

        // 7. 커넥션 종료

        if (conn != null) try { conn.close(); } catch(SQLException ex) {}

    }

 

 

 

DBMS와의 통신을 위한 JDBC 드라이버.

여기서 Class.forName("여기안에는 JDBC드라이버 클래스의 완전한 이름"); 이들어간다.
나같은 경우는 MySQL을 사용하므로 MySQL에 대한 JDBC 드라이버에 해당하는 클래스를 입력하면된다. 그것이 바로 com.mysql.jdbc.Driver 이다.

---------------------------------------------------------------------------------------------

데이터베이스 식별을 위한 JDBC URL

데이터베이스를 구분할 때에도 URL과 비슷한 형식을 취하는 JDBC URL을 사용한다.
MySQL JDBC 드라이버는 다음과 같은 JDBC URL을 사용한다.

jdbc:mysql://HOST[:PORT]/DBNAME[?param=value&param1=value2&...]
여기서 [HOST]는 MySQL 서버의 호스트 주소를 나타내며, [DBNAME]은 데이터베이스 이름을 나타낸다. [PORT]는 MySQL 서버가 사용하는 포트 번호를 나타낸다. JDBC URL뒤에 몇 가지 설정 정보를
추가할 수 있으며, 표현 방식은 파라미터와 동일하다.

ex)
jdbc:mysql://locallhost:3303/test(DB명임)?useUnicode=true&characterEncoding=euckr

MySQL JDBC 드라이버가 MySQL 서버와 데이터를 주고 받을 때 사용되는 캐릭터 셋을
올바르게 지정하지 않을 경우 한글이나 한자와 같은 글자가 잘못된 값으로 데이터베이스에
저장될 수 있다. 따라서 MySQL에서 한글 데이터를 올바르게 하기 위해서는 위에와 같이
추가 파라미터를 이용해서 캐릭터 셋을 알맞게 지정해 주어야한다.

---------------------------------------------------------------------------------------------

데이터베이스 커넥션

데이터베이스 프로그래밍을 하기 위해서는 먼저 데이터베이스와 연결된 커넥션을 구해야한다.
java.sql.Connection 클래스가 데이터베이스 커넥션을 나타내며, 커낵션은 java.sql.DriverManager
클래스가 제공하는 getConnection() 메서드를 사용해서 구할 수 있다.
DriverManager 클래스는 다음과 같은 두 개의 getConnection()메서드를 제공하고 있다.

DriverManager.getConnection(String jdbcURL)
DriverManager.getConnection(String jdbc URL, String user, String password)

JDBC URL과 데이터베이스 사용자 계정/아이디를 올바르게 지정했다면, DriverManager.getConnection() 메서드는 Connection 객체를 리턴한다.
리턴받은 Connection 객체를 사용해서 필요한 작업을 시작할 수 있는 것 이다.

*여기서 주의할 점*
Connection 객체를 다 사용한 뒤에는 close() 메서드를 호출하여 Connection 객체가 사용한 시스템
자원을 반환해 주어야 한다. 그렇지 않을 경우 시스템 자원이 불필요하게 소모되어 커넥션을 구할 수 없는 상황이 발생할 수도 있다.
Connection을 줄때 try문으로 묶은뒤 finally에서 close()를 사용하여 닫아주면된다.

--------------------------------------------------------------------------------------

Statement를 사용한 쿼리 실행

Connection 객체를 생성한 후에는 Connection으로부터 Statement를 생성한 뒤에 쿼리를 실행할 수 있다. Statement는 다음과 같이 Connection.createStatement() 메서드를 사용하여 생성할 수 있다.

Statement stmt = conn.createStatement();
여기서 conn은 Connection의 객체임.

위와 같이 Statement 클래스를 생성한 다음에는 다음의 두 메서드를 사용해서 쿼리를 실행 할 수 있다.

(리턴값 : ResultSet) executeQuery(String query) : SELECT 쿼리를 실행한다.     
(리턴값 :int)  executeUpdate(String query) : INSERT , UPDATE, DELETE 쿼리를 실행한다. 

executeUpdate()메서드는 리턴값이 int인 이유는 변경된 (또는 삽입된) 레코드의 개수를 리턴하기 때문

 

 

'JSP > JSP 수업' 카테고리의 다른 글

네번째 수업.  (0) 2012.09.13
jsp 세번째수업  (0) 2012.09.11
두번째 수업 (추가정리).  (0) 2012.09.07
두번째 수업.  (0) 2012.09.07
첫번째 수업.  (0) 2012.09.03
posted by changhozz 2012. 9. 26. 22:06

cmd에서>mysql -u root -p
root라는 계정으로 들어감. 패스워드설정해놨으므로 -p 입력.
(-u ㅡ> 이것은 계정을 지정한단 뜻.)
이러면 root라는 계정이 지정된 것이다.
여기서 이제 grant 쿼리를 이용하여 계정 추가 및 권한 설정을 한다.
mysql> grant select, insert, update, delete, create, drop on chap12.* to 'jspexam'@'localhost'
identified by 'jspex';

이것은 localhost에서 접속하는 jspexam 계정에 chap12 데이터베이스의 모든 것에 대해
select, insert, update, delete, create, drop 쿼리를 실행할 수 있는 권한을 주며,
이때 암호는 'jspex'를 사용한것이다.

이제 모든 서버에 연결할수있도록 권한을 준다.

mysql> grant select, insert, update, delete, create, drop on chap12.* to 'jspexam'@'%'
identified by 'jspex';
(달라진건 @ 뒤가 %로 바뀐것뿐.)

이제 MySQL 클라이언트인 mysql을 실행해서 chap12 데이터베이스를 사용할 수 있다.
cmd에서>mysql -u jspexam -p chap12

들어온상태에서 테이블 목록을 볼수있다.
mysql> show tables;
(지금은 테이블을 만들지 않았으므로 empty가 뜨게된다.)


---------------------------------------------------------
테이블 생성 쿼리.
create table TABLENAME(
 COL_NAME1   COL_TYPE1(LEN1),
 COL_NAME2   COL_TYPE2(LEN2),
 COL_NAMEn   COL_TYPE3(LENn)
);

TABLENAME : 테이블을 식별할 때 사용할 이름
COL_NAME : 각 칼럼의 이름
COL_TYPE : 각 칼럼에 저장될 값의 타입
LEN : 저장될 값의 최대 길이.

ex)
create table MEMBER(
 MEMBERID   VARCHAR(10),
 PASSWORD   VARCHAR(10),
 NAME       VARCHAR(20),
 EMAIL    VARCHAR(80)
);

주요키 칼럼을 표시할 때에는 칼럼 타입 뒤에 'PRIMARY KEY'라는 문장을 추가하며,
필수 값에 대해서는 'NOT NULL'을 추가한다.
예를 들어, MEMEBERID 칼럼이 주요키이고, PASSWORD,NAME칼럼이 필수 요소라면
ex)
create table MEMBER(
 MEMBERID   VARCHAR(10) NOT NULL PRIMARY KEY,
 PASSWORD   VARCHAR(10) NOT NULL,
 NAME       VARCHAR(20) NOT NULL,
 EMAIL    VARCHAR(80)
);


여기서 테이블이란
-데이터가 저장되는 가상의 장소
-테이블은 1개 이상의 칼럼으로 구성
--각 칼럼은 타입을 가지며, 제양(값의 길이, 가질 수 있는 값 등)을 갖는다.
--이런 테이블의 구성을 스키마(schema)라고 함.

여기서 칼럼이란
-표의 세로 열을 말한다.

여기서 레코드란.
- 하나의 테이블은 여러 개의 레코드로 구성.

여기서 주요키(PRIMARY KEY)란
-각각의 레코드를 구별하기 위해 사용되는 것
-각 레코드가 서로 다른 값을 갖는 칼럼
-주요키 값을 이용해서 빠른 검색 가능.

인덱스란
-지정한 칼럼에 맞춰 데이터의 정렬 순서를 미리 계산
-주요키로 인덱스의 종류
-인덱스로 사용되는 칼럼은 중복된 값을 가질 수도 있음.

이제 테이블을 생성했으면 데이터를 삽입한다.

---데이터 삽입 쿼리----
INSERT 쿼리!!!

사용법,
insert into [테이블이름]([칼럼1], [칼럼2], ..., [칼럼n])
values([값1],[값2],..,[값n])

ex)
mysql> insert into MEMBER (MEMBERID, PASSWORD, NAME) values ('changhozz', '1234',
 '김창호');

이렇게 칼럼 목록을 표시한상태라면 전체 칼럼에 대해서 모두 값을 지정해줄필요가없다.
EMAIL은 지정해주지않았으니 NULL값이 들어가있는 상태다.
만약 EMAIL이 NOT NULL이라고 명시했다면 NULL을 값으로 갖지않고 아예 EMAIL에 값이 없게
되는것이다.

하여튼
칼럼 목록을 표시하지않고 값을 지정해줄때애네는 전체 칼럼에 대해서 값을 지정해주어야한다.

ex)
insert into MEMBER values('changhozz', '1234', '김창호', 'changhozz@nate.com');
이런식으로...

만약 값에 작은따옴표가 있다면 두번 입력해주면된다.

예를 들어 김창호's  라면
김창호''s 이런식으로!!

!!!!*****앞에서 MEMBERID,PASSWORD,NAME을 NOT NULL로 지정해주었기때문에,
값을 무조건 넣어된다. 반면 EMAIL은 NOT NULL을 지정하지 않았기 때문에
값을 안넣어도 상관이없다.
그래서 EMAIL을 제외하고 insert를 해주어 EMAIL값은 NULL이 되버렸다.
그다음 다시 insert를 이용하여 EMAIL에만 값을 넣어주려했는데 안된다...
왜냐면 insert는 말그대로 삽입이다. 이거 하나만 넣을수가없는것이다.
아직 update가 나오지않아 발생한일..

----------------------------------------
데이터 조회 쿼리.  (조회 및 조건)
SELECT 쿼리!!!!
사용법,
select [칼럼1], [칼럼2],..,[칼럼n] from [테이블이름]

ex)
select MEMBERID, NAME from MEMBER;

만약 전체 칼럼을 모두 읽어오려면
ex)select * from MEMBER;

where절!!!!!!!!
조건에 맞는 레코드 검색

select * from MEMBER where NAME='김창호';

이것은,, MEMBER라는 테이블중에서 NAME이 김창호인 데이터만 불러오는것이다.!!

또한 and나 or을 이용하여 다양한 조건 지정이 가능하다.
select * from MEMBER where NAME = '김창호' and EMAIL = 'changhozz@nate.com';
하게되면 MEMBER라는 테이블중에서 NAME이 김창호고 EMAIL이 changhozz@nate.com
데이터만 불러오는것이다.!!!!


같지 않음을 표현할 때에는 '<>'연산자를 사용한다.
예를 들어, EMAIL 칼럼의 값이 공백 ('')이 아닌 레코드를 검색하고 싶다면
다음과 같은 쿼리를 사용하면된다.
사용법,
select * from MEMBER where EMAIL <>'';

또한 칼럼의 값이 NULL 이거나 NULL이 아닌 레코드를 구하고 싶은 경우도 있는데,
이런 경우에는 다음과 같이 NULL과 관련된 전용 쿼리를 사용할 수도 있다.
사용법,
select * from MEMBER where EMAIL is NULL;
select * from MEMBER where EMAIL is NOT NULL;

또한 부등호 기호를 사용할 수도 있다.
예를들어, 숫자 칼럼에서 값의 범위가 1부터 100사이에 있는 레코드를 읽어오고 싶다고 해보자,
이 경우 다음과 같이 '<','>','<=','>=' 등의 연산자를 사용하면 된다.

where SALARY >= 1000 and SALARY <= 2000;

마지막으로 LIKE 조건!!!!!!

LIKE 조건을 사용하면 특정 문장이 포함된 것을 찾을수있다.
예를들어 NAME 값이 '김'으로 시작하는 레코드를 찾고 싶다면 다음과 같이
LIKE 조건을 사용 할 수 있다.
where NAME like '김%';

 

------------------------------------------------------------
데이터 쿼리 조회 - 정렬
ORDER BY 절!!!!!!
사용법,
select .. from [테이블이름] where [조건절] order by [칼럼1] asc, [칼럼2] desc,...

여기서 [칼럼]은 정렬하고 싶은 칼럼의 이름을 나타내며, 칼럼 이름 뒤에 'asc'나
'desc'를 붙일 수 있다. 'asc'를 붙히면 오름차순으로 정렬되며 'desc'를 붙이면
내림차순으로 정렬된다.

ex)
select * from MEMBER order by NAME asc, MEMBERID asc;

위 쿼리는 NAME 칼럼을 기준으로 먼저 오름차순 정렬이되고,
정렬된 상태에서 MEMBERID 칼럼에 대해서 오름차순으로 정렬한다.
이때 주의사항!
일단 NAME 칼럼으로 정렬된 상태가 되면, NAME 칼럼이 같은 값을 갖는 것들에
대해서만 MEMBERID 칼럼으로 정렬이 이루어진다는 점이다.
-------------------------------------------------------------------
데이터 쿼리 조회 - 집합.
집합 관련된 쿼리에는 sum(), max(), min(), count() 등의 함수가 존재한다.
말그대로 sum은 총합, max는 최댓값, min은 최솟값, count는 개수를 구할 때 사용됨.

사용법,
select max(SALARY), min(SALARY), sum(SALARY) from....
 
만약 특정 조건에 해당하는 레코드에 대해서만 집합 관련 함수를 실행하고 싶다면
where 조건문을 붙히면된다.
예를들어, NAME 칼럼의 값이 '김'으로 시작하는 레코드의 개수를 구하고 싶다면
다음과 같은 쿼리를 실행하면 된다.
사용법,
select count(*) from MEMBER where NAME like '김%';


--------------------------------------------------------------------
데이터 수정 쿼리

수정 쿼리 ㅡ> UPDATE!!!!!!!!!

사용법,
update [테이블이름] set [칼럼1]=[값1], [칼럼2]=[값2], ..where[조건절];

만약 where절을 사용하지않고
update MEMBER set NAME='김창호';
라고한다면, 모든 레코드의 NAME 칼럼의 값을 '김창호'로 변경하게되니
WHERE사용을 주의하자!!!!

ex)
mysql> update MEMBER set EMAIL='changhozz@nate.com' where MEMBERID = 'changhozz';

이것은,
MEMBER 테이블에서 칼럼 EMAIL에 값으로 changhozz@nate.com을 넣겠다.
근데 조건이 MEMBERID가 changhozz인 것만 넣겠다.
이런뜻!.


--------------------------------------------------------
데이터 삭제 쿼리

삭제 쿼리 ㅡ> DELETE!!!!!!!!!

사용법,
delete from [테이블이름] where [조건절]

이것또한 조건 where을 입력하지 않으면 전체 레코드를 삭제해버린다!!!
ㅡ> delete from MEMBER
이렇게하면 MEMBER테이블 내용 다사라짐!!
where을 주의하자!!

이런식으로 사용하자.
mysql> delete from MEMBER where MEMBERID = 'changhohh';

MEMBER 테이블에서 MEMBERID가 changhohh 인것만 삭제한다!!라는뜻!.


-----------------------------------------------------------
조인.

-조인(Join)은 두개 이상의 테이블로부터 관련 있는 데이터를 읽어올 때 사용된다.
조인의 기본 형식은 다음과 같다.

select A.칼럼1, A.칼럼2, B.칼럼3, B.칼럼4 from [테이블1] as A, [테이블2] as B
where A.[칼럽x] = B.[칼럼y]


예를 들기위해
create table MEMBER_ETC(
 MEMBERID    VARCHAR(10) NOT NULL PRIMARY KEY,
 BIRTHDAY    CHAR(8)
);

테이블생성후,
값으로
changhozz 19890105 와 tkdwnsdlzz 19880911와 jungwoogi 19881027을 넣었다.
그 다음
mysql> select * from MEMBER as A, MEMBER_ETC as B where A.MEMBERID = B.MEMBERID;

를 입력하게되면
MEMBER에 있는 MEMBERID와 MEMBER_ETC에 있는 MEMBERID가 같은경우에
테이블을 일렬로 나열하여 전부 보여주었다.
공통된 changhozz와 tkdwnsdlzz의 값들이 아이디 비번 이름 이메일 아이디 생일 순으로
쭉 나열되었다.

 

'JSP > JSP 정리' 카테고리의 다른 글

MVC패턴과 모델 1,2  (2) 2013.01.09
JSP 수업.  (0) 2012.09.25
웹 어플리케이션  (0) 2012.08.16
Chpater 1. 웹 프로그래밍 기초.  (0) 2012.08.16
웹 서버란  (0) 2012.08.16
posted by changhozz 2012. 9. 25. 22:11

8장 - 에러 처리.

1.page 디렉티브에서 지정.
에러페이지 지정방법.
<%@ page erroPage = "error.jsp">

에러 페이지 작성방법.
<%@ page isErroPage = "true" %>
IE에서 예외가 올바르게 보여지려면 에러 페이지가 출력한 응답 데이터 크기가
513바이트보다 커야함.
만약에 513바이트보다 작다면 IE에서 기본적으로 제공하는 에러페이지가 나타남.

2.web.xml 파일에서 예외 타입 별 에러 페이지 지정.

<error-page>
<exception-type>예외클래스명</exception-type>
<location>에러페이지의 URI</location>
</error-page>

3.web.xml 파일에서 응답 상태 코드별 에러 페이지 지정.

<error-page>
   <error-page>에러코드</error-page>
   <location>에러페이지의 URI</location>
</error-page>

에러페이지의 우선순위는 번호 그대로,
page 디렉티브 ㅡ> 에외 타입별 ㅡ> 에러 코드별이다.
(아무것도 해당되지 않을 경우 웹 컨테이너가 제공하는 기본
에러 페이지를 보여줌.)

---------------------------------------------------------

9장 - 클라이언트와의 대화 1: 쿠키

쿠키 ㅡ> 웹 브라우저가 보관하고 있는 데이터로서
웹 서버에 요청을 보낼 때 함께 전송.

쿠키의 생성은 웹서버에서 일어나지만, 쿠키의 저장소는 웹 브라우저이다.

쿠키 생성법.
<%
Cookie cookie = new Cookie("cookieName", "cookieValue");
response.addCookie(cookie);
%>
cookie 이름은 cookieName이고 값은  cookieValue이며,
cookie객체를 더하여 보낸것이다.

쿠키를 읽으려면,
Cookie [] cookies = request.getCookies();
이런식,


* 쿠키는 값으로 한글과 같은 문자를 가질 수 없다.
따라서 인코딩을 하여 보낸후, 디코딩하여 받아야한다.

값 설정시 : URLEncoder.encode("값". "euc-kr")
인코딩을 해준후 인코딩 값을 쿠키의 값으로 넣어준다.
new Cookie("name", URLEncoder.encode("값","euc-kr"));

값 조회시 : URLDecoder.decode("값","euc-kr")
String value = URLDecoder.decode(cookie.getValue(),"euc-kr");

 

-쿠키의 도메인과 경로.

도메인 지정시 , 해당 도메인에 쿠키를 전달한다.
-Cookie.setDomain()으로 쿠키 설정.
-도메인 형식
 만약 .madvirus.net으로 지정해다면
지정한 도메인이 들어간 www.madvirus.net 과 javacan.madvirus.net 모두에
쿠키를 전달한다. 도메인이 벗어난 쿠키는 저장하지 않는다.

만약 경로를 지정해주었다면,
설정한 경로 및 그 하위 경로에 대해서 쿠키를 전달한다.
Cookie.setPath()로 경로 설정함.

-쿠키 유효 시간 지정.
유효시간 미 지정시, 웹 브라우저 닫을 때 쿠키도 함께 살제.
쿠키를 삭제하는 메서드는 존재하지않는다.
따라서 유효시간을 0이나 음수를 주어 삭제시킨다.
Cookie.setMaxAge()를 이용하여... (초단위임.)

 

---------------------------------------------------------------------

10장 클라이언트와의 대화 2: 세션.

세션또한 데이터를 보관하여 쿠키와 같아 보이지만,
세션은 웹서버에서 생성되고, 저장또한 웹 서버에 저장된다.
(세션은 브라우저당 하나지만, 쿠키는 여러개일수있음.)

세션 사용법,
<%@ page sessing = "true"%>
<%
    session.setAttribute("userInfo", userInfo);
%>
기본 값이 true이므로 false로 하지 않는 이상 항상 세션 사용.

 

-세션 종료/ 타임아웃.
session.invalidate()을 이용해서 세션 종료.
세션이 종료되면 기존에 생성된 세션이 삭제되고,
이후 접근 시 새로운 세션이 생성 됨.

또한 유효 시간을 설정하여 마지막 세션 사용 이후 유효 시간이 지나면
자동 종료될수 있도록 web.xml 파일에서 지정해줄수 있음.

<session-config>
    <session-timeout>
      30 (분단위임)
     </sessing-timeout>
</session-config>
또는 session 기본객체의 setMaxInactiveInterval()메서드를 이용하여 지정가능.
(초단위임.)

------------------------------------------------------------------------

11장 <jsp:useBean> 액션 태그

자바빈(JavaBeans)이란 웹 프로그래밍에서 데이트의 표현을 목적으로 사용하는것을 말함.

collection 개념으로써 페이지상에서 들고다닐수있는, 말그대로 콩 조각이 모인 완두콩을 뜻한다.
collection을 이용하여 클래스를 만든 후, 객체를 사용하여 필요한 값에 접근한다.
일반적으로 setter, getter를 이용하여 값을 읽고 쓴다.

여기서 <jsp:useBean> 태그는 JSP에서 자바빈 객체를 생성할 때 사용된다.
사용법,
<jsp:useBean id ="[빈이름]" class="[자바빈클래스이름]" scope="[범위]" />

id - jsp 페이지에서 자바빈 객체에 접근할 때 사용할 이름.
class - 패키지 이름을 포함한 자자빈 클래스의 완전한 이름.
scope - 자바빈 객체가 저장될 영역을 지정. page,request,session,application 중 하나를
값으로 갖는다. 기본값은 page임.

ex)
<jsp:useBean id = "info" class="chap11.member.MemberInfo" scope="request" />
<%= info.getName()%>

-  <jsp:setProperty> 액션 태그
1.<jsp:setProperty name = "id" property="이름" value="값" />
이런식으로 객체의 값을 설정할수도 있음.
name ㅡ> 자바빈 객체의 이름
property ㅡ> 값을 설정할 프로퍼티
value  ㅡ> 프로퍼티의 값.

2.<jsp:setProperty name="id" property="이름" param="파라미터 이름" />
 param ㅡ> 프로퍼티의 값으로 사용할 파라미터 이름.

3.<jsp:setProperty name = "id" property="*" />
 프로퍼티와 동일한 이름의 파라미터를 이용해서 값을 설정
폼에 입력한 값을 자바 객체에 저장할 때 유용하게 사용.

 -  <jsp:getProperty> 액션 태그
프로퍼티의 값을 출력하기 위해 사용.
사용법,
<jsp:getProperty name = "자바빈" property="프로퍼티" />
그러나 EL(Expression Language)의 사용으로 거의 사용 X

'JSP > JSP 정리' 카테고리의 다른 글

MVC패턴과 모델 1,2  (2) 2013.01.09
DB정리!!!  (0) 2012.09.26
웹 어플리케이션  (0) 2012.08.16
Chpater 1. 웹 프로그래밍 기초.  (0) 2012.08.16
웹 서버란  (0) 2012.08.16
posted by changhozz 2012. 9. 13. 21:21

6장 기본객체와 영역.

우선 JSP의 기본 객체로는
request, response, pageContext, session, application, out, config,
page, exception 등이 있는데,

여기서 exception 객체는 에러페이지에서만 사용가능하다.
나머지 객체들은 일반 jsp페이지에서 사용가능.

request객체의 실제타입에는 javax.servlet.http.HttpServletRequest 와
javax.servlet.ServletRequest 있는데 이 둘은 버전에 따라 사용되며,
현재는 전자를 쓴다.


-------------------------out 기본 객체-------------------------

write() 메서드는 스트림출력을 할때 사용되고,
print() 메서드는 단순 콘솔출력을 할때 사용된다.

JSP페이지가 생성하는 모든 내용은 out 기본 객체를 통해서 전송된다.
JSP 페이지 내에서 사용되는 비스크립트 요소들(일반적인 HTML 코드 내지 텍스트)은
out 기본 객체에 그대로 전달되며, 값을 출력하는 표현식의 결과값 역시out  기본객체에 전달된다.

ex) out.println("<html>");
     out.println("<head>");
    또는
   out.println("안녕하세요");

-----------------------------pageContext 기본객체-----------------------------

pageContext가 제공하는 기본 객체 접근 메서드

 

메서드 

리턴타입 

설명 

getRequest() 

ServletRequest 

request 기본 객체를 구한다. 

getResponse() 

ServletResponse 

response 기본 객체를 구한다. 

getSession() 

HttpSession 

session 기본 객체를 구한다. 

getServletContext() 

ServletContext 

application 기본 객체를 구한다. 

getServletConfif() 

ServletConfig 

config 기본 객체를 구한다. 

getOut() 

JspWriter 

out 기본 객체를 구한다. 

getException() 

Exception 

exception 기본 객체를 구한다. 

getPage() 

Object 

page 기본 객체를 구한다. 

마찬가지로 getException() 메서드는 JSP페이지가 에러 페이지인 경우에만 의미가 있다.

 

-------------------------application 기본객체-----------------------------

application 기본 객체는  웹 어플리케이션과 관련된 기본 객체로써,
특정 웹 어플리케이션에 포함된 모든 JSP페이지는 하나의 application 기본 객체를 공유하게된다.

즉 제일 큰 덩어리를 뜻한다.

WEB-INF\web.xml 파일에서 웹 어플리케이션 전체에서 사용할 수 있는 초기화 파라미터를
<context-param> 태그를 사용하여 추가할 수 있다.

application 기본 객체의 웹 어플리케이션 초기화 파라미터 관련 메서드

 

메서드 

리턴 타입 

설 명 

getInitParameter(String name) 

String 

이름이 name인 웹 어플리케이션 초기화 파라미터의 값을 읽어 온다. 존재하지 않을 경우 null을 리턴한다. 

getInitParameterNames() 

Enumeration 

웹 어플리케이션 초기화 파라미터의 이름 목록을 리턴한다. 


--------------------JSP 기본 객체와 영역----------------------

PAGE 영역 : 하나의 JSP 페이지를 처리할 때 사용되는 영역
REQUEST영역: 하나의 HTTP 요청을 처리할 때 사용되는 영역(form.jsp 와 result.jsp처럼 요청을 하는
관계를 합쳐서 REQUEST 영역이라 함.)
SESSION 영역: 하나의 웹 브라우저와 관련된 영역(브라우저하나당 SESSION영역도 하나.)
APPLICATION 영역 : 하나의 웹 어플리케이션과 관련된 영역.(JSP의 모임.)

--------------------------기본 객체의 속성(Attribute)사용하기-----------------------

 

메서드 

리턴타입 

설명 

setAttribute(String name,
                 Object value) 

void 

이름이 name인 송성의 값을
value로 지정한다. 

getAttribute(String name) 

Object 

이름이 name인 속성의 값을 구한다. 지정한 이름의 속성이 존재하지 않을 경우 null을 리턴한다. 

removeAttribute(String name) 

void 

이름이 name인 속성을 삭제한다. 

getAttributeNames() 

java.util.Enumeration 

속성의 이름 목록을 구한다.
(pageContext 기본 객체는 이메서드를 제공하지 않는다.) 

형변환 autoBoxing unBoxing 주의!!

 

7장 페이지 모듈화와 요청 흐름 제어

-----<jsp:include> 액션 태그를 이용한 페이지 모듈화----

<jsp:include> 액션 태그는 지정한 페이지를 태그가 위치한 부분에 포함시킬 때 사용된다.

----include 디렉티브를 이용한 중복된 코드 삽입----

include 디렉티브도 <jsp:include>와 마찬가지로 지정한 페이지를 현재 위치에 포함시켜
주는 기능을 제공한다. 하지만, <jsp:include>완느 달리 include 디렉티브는 포함되는 방식에서 큰 차이를 보인다. <jsp:include>는 다른 JSP로 흐름을 이동시켜 그 결과물을 현재 위치에 포함시키는 방식인 반면, include 디렉티브는 다른 파일의 내용을 현재 위치에 삽입한 후에 JSP파일을 자바 파일로
변환하고 컴파일 하는 방식이다.

ex)   <%@ include file = "포함할파일"%>

'JSP > JSP 수업' 카테고리의 다른 글

JSP 수업 DB부분  (0) 2012.10.05
jsp 세번째수업  (0) 2012.09.11
두번째 수업 (추가정리).  (0) 2012.09.07
두번째 수업.  (0) 2012.09.07
첫번째 수업.  (0) 2012.09.03
posted by changhozz 2012. 9. 11. 21:42

파라미터 request될때 String으로 넘어온다.

if esle문 말고 switch 문으로 해라.

 

5장 필수 이해 요소


서블릿에 요청 전달하는 것은 순수 자바를 말함.

java ㅡ> 실행코드방식
jsp ㅡ> 스크립트방식

was(톰캣)가 실행 될때 자바가 실행됨.

톰캣 ㅡ>

jsp란 확장자가 있으면 자바 코드가 없어도 class파일을 떨군다.

 

출력 버퍼 ------

jsp가 생성한 응답 결과를 임시로 저장

출력 결과를 버퍼에 저장하고 버퍼가 꽉 차게되면 내뱉는다.
버퍼가 꽉 안찼어도 로딩이 다 됐다면 내뱉는다.

오토플러시가 투르 일때!!
팔스면 꽉찼을때 오류 띄움.


buffer 속성  보통 8kb로 설정함.8kb 성능이좋음.

버퍼 ㅡ> 잠시 거쳐가는 임시 저장소. 컨트롤 해줌.


--------------------------------------------------
웹 어플리케이션디렉터리 구성
src ㅡ> 자바만 들어감 (자바소스 저장됨.)
webcontent ㅡ> META_INF
           ㅡ> WEB_INF      web.xmlㅡ>설정파일
                   ㅡ>lib 
      ㅡ>classes               
 web  ㅡ> 패키지관리를 잘해라. 지금 부터 연습. 패키기 구조 잡기.

원랜 bin폴더에 떨궈지는데
빌드패스를 classes로 바꿔라.!!!!!!!!!!!

빌드가 (컴파일이)다시 필요한 파일들을 classes에 모아둬야함.
java파일이나 server.xml이나 설정파일등.

앤트빌드 ㅡ> 수동으로 컴파일.


---------------------------------------------------------
war    ㅡ> 웹 어플리케이션 archieve

우리는 servel.xml 설정으로 해줘서 webapps를 통하지않고
바로 접근하게 한다.

 

----------------------------------------------------
목요일 (기본객체 읽어오기.)
메서드  같은거 보고오기.

 

----------------------------------------------------------------------------------------

1) JSP의 처리과정
웹 컨테이너는 JSP에 해당하는 서블릿이 존재하지 않을 경우
JSP페이지를 컴파일 하여 서블릿을 생성한 후, 생성된 서블릿을
사용하여 클라이언트의 요청을 처리한다.
JSP에 해당하는 서블릿이 존재하는 경우엔 곧바로 서블릿을
사용하여 클라이언트의 요청을 처리한다.

즉, JSP 페이지를 요청할 때에는 JSP를 직접적으로 실행하는 것이
아니라, JSP를 자바 소스 코드로 변환을 한ㄷ 뒤 컴파일 해서 생성된
서블릿을 실행하는것 이다. 여기서 JSP 페이지를 자바 코드로
변경하는 단계를 "변환 단계"라고 하며, 자바 코드를 서블릿 클래스로
변경한는 단계를 "컴파일 단계"라고 한다.

2) 출력 버퍼와 응답
JSP페이지가 생성하는 출력 내용을 곧바로 웹 브라우저에 전송하지 않고
버퍼에 저장했다가 한꺼번에 전송함으로써 생기는 장점은 다음과 같다.
-데이터 전송 성능이 향상된다.
-곧바로 웹 브라우저로 전송되지 않기 때문에, JSP 실행 도중에 버퍼를 비우고
새로운 내용을 보여줄 수 있다.
-버퍼가 다 차기 전까지는 헤더를 변경할 수 있다.

버퍼 설정.
<%@ page buffer = "8kb"%>
보통 8kb로 설정한다고함.(가장 높은 성능을 보임.)

"none" 일경우엔 내용을 바로 웹 브라우저에 전송.
page디렉티브 속성중 autoFlush는 true, false를 속성값으로 갖는다.
true : 버퍼가 다 찼을 경우 버퍼를 플러시하고 계속해서 작업을 진행
false: 버퍼가 다 찼을 경우 예외를 발생시키고 작업을 중지.

3) 웹 어플리케이션 디렉터리 구성과 URL 매핑

WEB-INF = 웹 어플리케이션 설정 정보를 담고 있는 web.xml 파일이 위치한다.
WEB-INF\classes = 웹 어플리케이션에서 사용하는 클래스 파일이 위치한다.
WEB-INF\lib = 웹 어플리케이션에서 사용하는 jar파일이 위치한다.

4) 웹 어플리케이션의 배포
개발된 웹 어플리케이션을 실 서버에 배포하는 방법은 크게 다음의 두 가지가 있다.
-대상 디렉터리에 직접 복사
-war 파일로 묶어서 배포

'JSP > JSP 수업' 카테고리의 다른 글

JSP 수업 DB부분  (0) 2012.10.05
네번째 수업.  (0) 2012.09.13
두번째 수업 (추가정리).  (0) 2012.09.07
두번째 수업.  (0) 2012.09.07
첫번째 수업.  (0) 2012.09.03
posted by changhozz 2012. 9. 7. 19:36

일반적인 JSP 코드는 JSP페이지에 대한 정보를 입력하는 설정 부분과 실제로 HTML 문서를
생성하는 생성 부분으로 나눌 수 있다.
JSP의 설정 부분에는 JSP 페이지에 대한 정보가 위치하며, 일반적으로 다음과 같은 정보를 입력한다.

●JSP페이지가 생성하는 문서의 타입.
●JSP페이지에서 사용할 커스텀 태그
●JSP페이지에서 사용할 자바 클래스 지정 (import)

<%@page...%>   ㅡ> page 디렉티브라고 함.

<%@ page import = "java.util.Calendar, java.util.Date"%> 이런식으로 한번에 속성값을 써도 됨.(콤마)

page 디렉티브 속성중  trimDirectiveWhitespaces는
디렉티브나 스크립트로 인해 발생한 공백 문자가 응답 결과에 포함되지 않게 해준다.
즉 jsp페이지를 작성한후 소스보기를 하면 자바내용이 안보이게 되는데
이부분은 원래 공백으로 나타나게된다.
이 공백을 없애 준다는것.
사용법 ㅡ>
<%@ page trimDirectiveWhitespaces = "true" %>

 

JSP가 제공하는 디렉티브

 

디렉티브 

설명 

page 

JSP 페이지에 대한 정보를 지정한다. JSP가 생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등 JSP페이지에서 필요로 하는 정보를 입력한다.

taglib 

JSP페이지에서 사용할 태그 라이브러리를 지정한다. 

include 

JSP페이지의 특정 영역에 다른 문서를 포함시킨다. 

 

 

--------------------------------심화--------------------------------------

*액션태그 - JSP 페이지에서 자바 코드 등의 스크립트 언어를 사용하지 않고도 다른 페이지의
서블릿이나 자바빈의 객체에 접근 할 수 있도록 태그를 이용해 구현된 기능을 말함.

액션태그 중의 하나인 <jsp:include>는
특정한 페이지의 실행 결과를 현재 위치에 포함시킬 때 사용 된다.

ex) <jsp:include page="header.jsp" flush="true" />

커스텀태그  = JSP코드에서 중복되는 것들을 모듈화 하거나 또는 스크립트 코드를
사용할 때의 소스 코드의 복잡함을 없애기 위해서 사용된다.

JSTL(JavaServer Pages  Standard Tag Library) - 커스텀 태그 중에서 자주 사용되는 것들을
별도로 표준화한 태그 라이브러리.

 

--------------------------------------------------------------------

 

 

 

 

 

'JSP > JSP 수업' 카테고리의 다른 글

JSP 수업 DB부분  (0) 2012.10.05
네번째 수업.  (0) 2012.09.13
jsp 세번째수업  (0) 2012.09.11
두번째 수업.  (0) 2012.09.07
첫번째 수업.  (0) 2012.09.03
posted by changhozz 2012. 9. 7. 14:34

-JSP의 구성요소.-

1).디렉티브
▶사용법  <%@ 디렉티브이름 속성1="값1"; 속성2="값2" %>
ex )  <%@ page contentType="text/html"%>
text/html 말고도 여러 가지가 있는데 이것을 MIME타입이라고 한다.
▶제공 디렉티브 
-page : JSP페이지에  대한 정보를 지정.
(문서의 타입, 출력 버퍼의 크기, 에러 페이지 등 정보 지정).
--page의 주요 속성
---contentType : JSP가 생성할 문서의 타입을 지정
---import  : JSP 페이지에서  사용할 자바 클래스를 지정
---session  : JSP페이지가 세션을 사용할 지의 여부를 지정.
---info : JSP 페이지에 대한 설명을 입력한다.
---errorPage  :  에러가 발생할 때 보여줄 페이지를 지정.
---isErrorPage : 에러 페이지인지의 여부를 지정.
-taglib : 사용할 태그 라이브러리를 지정.
-include : 다른 문서를 포함.
모두 한번에 정의 할 수 있음.
<%@ page…%>
<%@ taglib…%>
<%@ include…%>

2).스크립트 요소
▶표현식 (값을 출력) - 리턴타입이 있는 경우엔 표현식을 써야함.
사용법  <%= 출력할 값 %>
<%= author %> 와 ${author} 는 같다.
▶스크립트릿 (자바 코드를 실행)
사용법  <% 자바코드 %>
▶선언부 (자바 메서드 정의) 
사용법  <%!  메서드   %>

3).기본객체(=내장객체)
별도 선언없이(iterator처럼 new 연산자 없이) 사용할 수 있음.
▶주요 기본 객체
★ request   -  요청 정보를 구할 때 사용 (요청시 보이진 않지만 , 헤더 부분도 딸려감.)
주요 기능
-클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
-서버와 관련된 정보 읽기 기능
-클라이언트가 전송한 요청 파라미터 읽기 기능
-클라이언트가 전송한 요청 헤더 읽기 기능
-클라이언트가 전송한 쿠키 읽기 기능.
-속성처리 기능
response  -  응답과  관련된 설정 (헤더, 쿠키 등) 시 사용.
out  -  직접 응답을 출력할 때 사용.
session -  세션관리에 사용. (기록 같은걸로 보면 됨.)
★ response  -   웹 브라우저에 전송하는 응답 정보 설정
주요 기능
-헤더 정보 입력
- 리다이렉트 처리
방법 ㅡ>  response.sendRedirect (String location)

4)파라미터를 전송하는 방식
▶GET 방식 - 쿼리문자열로 전송
ex) ?이름1=값1&이름2=값2       ㅡ> 보안상의 문제가있음.

▶POST방식 - 요청 몸체 데이터로 전송  (헤더 바디안에 기술.)

▶파라미터 값의 인코딩/디코딩
웹 브라우저에서 '김창호'란 파라미터 값을 넘기게되면 웹브라우저는 '김창호'를 인코딩하여
웹 서버로 넘기게되면 웹 서버는 다시 인코딩된 '김창호'(%E3%F12% 이런식으로 인코딩됨.)를
다시 디코딩해야한다.
-방법.
<%
request.setCharacterEncoding("euc-kr");
String name = request.getParameter("name");
%>

 

 

'JSP > JSP 수업' 카테고리의 다른 글

JSP 수업 DB부분  (0) 2012.10.05
네번째 수업.  (0) 2012.09.13
jsp 세번째수업  (0) 2012.09.11
두번째 수업 (추가정리).  (0) 2012.09.07
첫번째 수업.  (0) 2012.09.03
posted by changhozz 2012. 9. 3. 03:27

주요내용 , JSP란 무엇인가.

             리눅스 설정.

실행코드방식 -  컴파일, (요청이 많을시 실행코드방식이 더 빠르다.)

스크립트 방식- 바로 번역 후 실행  (요청이 적을시 스크립트 방식이 더 빠르다.)

JSP란 동적인 웹 애플리케이션을 만들 수 있는 방법을 제공하며, 서블릿을 기반으로 웹 애플리케이션을 만드는 작업을 간단하게 처리할 수 있도록 해 주는 스크립트 언어이다. JSP를 스크립트 언어라고 하는 이유는 JSP로 작성된 코드가 실행 시에 서블릿 파일로 자동 변환되어 컴파일 된 후 실행되기 때문이다. 그래서 JSP를 서버 측 스크립트 언어라고 한다.

JSP를 한 문장으로 정의하자면, HTML 내에 자바 코드를 삽입하여,

웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다.

JSP의 동작 구조를보자면, 웹  브라우저에서 JSP  페이지를 웹 서버로  요청하게되면,
웹 서버는 JSP에 대한요청을 웹 컨테이너로 넘기게 된다. 이러한 요청을 받은 웹 컨테이너는
해당 JSP페이를 찾아서 서블릿(.java파일 생성)으로 변환하는 과정을 거친 후 컴파일(.class파일 생성)을 하게 된다.  컴파일된 서블릿(.class)은 최종적으로웹 브라우저에 응답되어져 사용자는 응답 결과를 보게된다.
  이러한 과정은 JSP페이지가 최초로 요청되었을때 단 한번만 실행된다.
 이후 같은 페이지에 대한 요청이 있으면 변환된 서블릿 파일로 서비스를 처리한다.

 

Web 1.0  =  Text ㅡ> HTML ㅡ> Homepage 형식으로 운영자에 의한 일방적인 소통이다.

Web 2.0 = 대화형 소통으로 사용자 또한 운영자와 주고받을 수 있다.

Web 3.0  = 컴퓨터가 인공지능이 가능하여,  연관된 관계를 설정할 수 있다.
               시멘틱 ㅡ> 삼단논법처럼 관계와 관계를 통하여 추론하는것. ex) 온톨로지

--------------------------------------------------------------------------------------------

리눅스 -

cygwin을 설치하여, 리눅스 명령어에 대하여 배움.

ls -la   ㅡ> 현재 경로에 있는 파일 및 폴더 목록을 보여줌.

cd 원하는경로  ㅡ> 원하는 경로로 이동

cd . . ㅡ> 상위 경로로 이동.

cp ./파일명 ./경로      ㅡ> 원하는 경로에 파일을 복사함.

mv ./파일명 ./경로   ㅡ> 원하는 경로로 파일을 이동함.

mkdir   ㅡ> 디렉토리 설정

vim에서  i ㅡ>  편집모드

esc ㅡ> 명령모드

:wq  ㅡ> 저장후 종료

:q!  ㅡ>  저장후 강제종료

:q  ㅡ> 강제종료

 

과제 : 금일 수업 한 내용을 vim으로 homework란 폴더를 만 든후, 금일날짜.txt에 저장하는 것. 

 

▣ JSP(Java Server Page)

JSP 는 동적인 웹 애플리케이션을 만들 수 있는 방법을 제공하며, 서블릿을 기반으로 웹 애플리케이션을 만드는 작업을 간단하게 처리할 수 있도록 해 주는 스크립트 언어이다. JSP를 스크립트 언어라고 하는 이유는 JSP로 작성된 코드가 실행 시에 서블릿 파일로 자동 변환되어 컴파일 된 후 실행되기 때문이다. 그래서 JSP를 서버 측 스크립트 언어(Server Side Script Language)라고 한다.

□ JSP(Java Server Page)
◇ 서블릿 기반의 동적 웹 애플리케이션을 구현하기 위한 언어
◇ 웹 + 자바 프로그래밍 + 스크립트

JSP를 한 마디로 정의하면, JSP는 자바 기반의 동적 웹 애플리케이션을 구현하기 위한 스크립트 언어이다.

▣ JSP의 등장

서 블릿은 앞서 이야기했다시피 완전한 하나의 자바 애플리케이션이다. 따라서 정적인 HTML 코드도 프로그램적으로 서블릿 코드에 삽입되어야 하기 때문에 디자인과 프로그램 코드의 분리가 어려우며, 다른 웹 프로그래밍 언어에 비해 복잡하고 번거롭다. 이러한 단점을 해결하고 프로그래머에게 편의성을 제공하고자 JSP가 나오게 되었다.

□ JSP의 등장
◇ 서블릿은 디자인과 프로그램 코드의 분리가 어렵고, 다른 웹 프로그래밍 언어에 비해 복잡하고 번거롭다.
◇ 프로그래머에게 편의성을 제공하기 위해 JSP가 등장했다.

JSP는 실행 시에 서블릿 코드로 자동 변환되어 컴파일된 후 실행된다. 결국 JSP도 서블릿이라는 이야기이다.

▣ 왜 서블릿 대신에 JSP를 사용하는가?

JSP와 서블릿이 동일하다면, JSP도 결국 서블릿인데 왜 JSP를 더 많이 사용할까?

JSP 를 사용함으로써 얻을 수 있는 장점 중 하나는 디자인과 자바 프로그램 코드의 분리가 가능하다는 것이다. 이는 디자인과 프로그래밍이라는 관점에서 작업을 서로 분리하여 수행할 수 있다는 엄청난 장점을 지닌다. 또한 서블릿은 실행 전에 .class 파일로 컴파일을 직접 해야 하지만 JSP는 코드만 작성해 놓으면 실행 시에 자동으로 변환과 컴파일이 이루어지기 때문에 서블릿에 비해 편리하다는 장점을 갖는다.

□ 서블릿에 비해 JSP를 사용하는 이유
◇ 컴파일이 자동 수행되기 때문에 편리하다.
◇ 디자인과 자바 프로그램 코드의 분리가 가능하다.

JSP가 편리하다고 하여 서블릿을 쓰지 않는 것은 아니다. 개발자의 취향에 따라 차이가 있겠지만 필자는 HTML과 간단한 자바 코드는 JSP로 작성하고, 비즈니스 로직은 서블릿을 이용해서 적절히 보완적으로 사용하는 것을 선호한다.

 

'JSP > JSP 수업' 카테고리의 다른 글

JSP 수업 DB부분  (0) 2012.10.05
네번째 수업.  (0) 2012.09.13
jsp 세번째수업  (0) 2012.09.11
두번째 수업 (추가정리).  (0) 2012.09.07
두번째 수업.  (0) 2012.09.07
posted by changhozz 2012. 8. 16. 18:13

어플리케이션의 동작원리

-. 어플리케이션이란 을 기반으로 실행되는 프로그램을 말한다.

-. 프로그래밍(Web Programming)을 한다는 것은 어플리케이션을 구현한다는 것을 의미한다.

어플리케이션의 동작 순서

① 사용자가 브라우저의 주소 란에 특정 사이트의 주소를 입력하게 되면 브라우저가 해당 서버에

홈페이지를 요청하는 것이 된다.

② 해당 서버에는 브라우저의 요청이 있을 경우 이를 받아들여 요청한 페이지를 응답할 책임을 지고 있다.

요청한 페이지는 서버에서 바로 공급되지 못하고 어플리케이션 서버(WAS : Web Application Server)에서

다양한 로직이나 데이터 베이스와의 연동을 통해서 완성되어야만 공급된다.

어플리케이션 서버(WAS)는 서버가 클라이언트에게 제공할 페이지를 완성하기 위해서 이에 필요한 로직이나

데이터베이스와의 연동과 데이터 처리를 담당한다.

④ 로직이나 데이터베이스 작업 처리 결과를 서버에게 보낸다.

서버는 이 결과를 클라이언트 측 브라우저에 응답하게 된다.

 

---------------------------------------------------------------------------------------------------------

어플리케이션(WAS : Web Application Server)이란 ? (스피어, 로직, 아이플리넷, 제우스..)

을 기반으로 실행되는 프로그램

프로그래밍이란?(JSP, PHP, APS)

클라이언트 요청하게 되면 서버가 이를 처리한 후 결과를클라이언트에게 응답.. 동적으로 변화하는 데이터를 처리하는 역할.

이 둘의 관계는 프로그래밍을 통한 어플리케이션의 구현

<< 어플리케이션의 구조>>

1. 브라우저가 서버에 어떠한 페이지를 요청하게 되면

2. 해당 서버는 브라우저의 요청을 받아서 요청된 페이지의 로직 및 데이터베이스와의 연동을 위해 어플리케이션 서버에 이들의 처리를 요청

3. 어플리케이션 서버는 데이터베이스와의 연동이 필요하면 데이터베이스와 데이터의 처리를 수행한다.

4. 로직 및 데이터베이스 작업의 처리결과를 서버에 돌려보낸다.

5. 서버는 결과를 다시 브라우저에 응답하게 된다!!

<< 어플리케이션의 구성요소 >>

- 브라우저 : 에서 클라이언트이며, 사용자의 작업창이라 할 수 있다. 즉 사용자에게 보여지는 화면(유저 인터페이스 :UI)

- 서버 : 브라우저의 요청을 받아들이는 곳으로 작업의 결과를 브라우저에게 응답을 하는 곳이다. 브라우저의 요청을 받아서 알맞은 결과를 브라우저에 전송한다. 만약 프로그램 처리가 필요하다면 어플리케이션 서버를 사용하거나 프로그램을 직접 호출하여 결과를 생성한다.

요청된 페이지의 로직 및 데이터베이스와의 연동을 위해 어플리케이션 서버에 이들의 처리를 요청하는 작업을 수행한다.

- 어플리케이션 서버(WAS) : 요청된 페이지의 로직 및 데이터베이스와 연동을 처리하는 부분.. 게시판의 글 목록, 고르인 처리와 같은 기능을 처리하고 그 결과를 서버에 전달한다.! ex) 로직, 스피어, 제우스...

- 데이터베이스 : 데이터의 저장소로 에서 발생한 데이터는 모두 이곳에 저장된다.(사이트의 정보를 저장) ex) 게시판의 글, 회원정보 등

<< 어플리케이션 서버 방식>>
CGI방식과 비교하면 쉽게 이해할 수 있다. CGI방식과 어플리케이션 서버방식을 비교해서 설명해 보자.
두 서버방식의 기본 구조는 같지만

서버가 어떤 방식으로 사용하는가의 차이가 있다.

(1)CGI 방식(실행코드 방식) :
- 서버가 어플리케이션 프로그램을 직접 호출하는 구조
즉, 한 요청에 대해 한 프로세스가 생성 되어 요청을 처리한뒤 종료된다.
따라서 시스템에 많은 부하를 가져온다.

* 프로세스 : 메모리 할당을 받은 프로그램으로 실행중인 프로그램을 의미한다.

(2) 어플리케이션 서버 방식(스크립트 코드 방식) :
서버가 어플리케이션 서버에게 처리를 넘겨주고 어플리케이션 서버가 어플리케이션 프로그램을 처리한다.
한 클라이언트 당 1개의 프로세스만을 할당 하고 사용자의 요청을 쓰레드 방식으로 처리.

* 쓰레드 : 프로세스 내의 명령을 블록으로 프로세스 내에 존재.
쓰레드는 메모리를 따로 할당받지 않는다.
하나의 프로세스를 여러개의 쓰레드로 나누어 동시에 처리하는 것을 다중 쓰레디ㅇ이라 한다.
메모리를 점유하지 않으면서 프로그램 수행 속도를 향상시킨다.


<< 어플리케이션의 구현 방식>>
- 클라이언트 사이드 스크립트(Client Side Script) : 클라이언트 쪽에서 처리
ex) JavaScript, VBScript

- 서버 사이드 스크립트(Server Side Script) : 서버에서 처리
ex) ASP, JSP : PHP

1) 실행코드방식 :

미리 컴파일된 실행 프로그램을 사용자의 요청에 따라 실행.
2) 스크립트 코드 방식 :

사용자의 요청이 있을 때 스크립트 코드를 번역해서 번역된 코드를 실행.
스크립트 코드 방식을 사용하는 스크립트 언어를 사용하는 것이 쉽고 빨르게 어플리케이션을 구현할수 있다.


 

'JSP > JSP 정리' 카테고리의 다른 글

DB정리!!!  (0) 2012.09.26
JSP 수업.  (0) 2012.09.25
Chpater 1. 웹 프로그래밍 기초.  (0) 2012.08.16
웹 서버란  (0) 2012.08.16
JSP란 무엇인가.  (0) 2012.08.16