PC

블로그 이미지

DAVID

'2016/04'에 해당되는 글 19건

제목 날짜
  • 160415: 24회차 2016.04.15
  • 160414: 23회차 2016.04.14
  • 160412: 22회차 2016.04.12
  • 160408: 20회차1 2016.04.08
  • 160407: 19회차1 2016.04.07
  • 160406: 18회차3 2016.04.06
  • 160405: 17회차3 2016.04.05
  • 160404: 16회차4 2016.04.04
  • 160401: 15회차5 2016.04.01

160415: 24회차

Programming 2016. 4. 15. 13:24

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


어제 하던 거


<link href = "" rel "">

href 의 ../css/style.css 같은 경우 ..가 root 밖으로 나오는 것이라서 같은 폴더 내에 위치하면 안 써줘도 된다.

근데 보통 따로 만드니까 저렇게 많이 쓰나 봄


그리고 밑에 가져다가 쓸 떄는 <ㅁㅁㅁ class = "title"> 같이 가져다 씀


<jsp: include page = " "/>

/menu/top.jsp 

처음에 /는 root , 메뉴는 folder, top.jsp는 page... 

인클루드는 루트 경로 다 써주지 않아도 되어서 좀 편함맨임


이게 모델 1 스타일임

모든 페이지에 top bottom을 포함시키는 고인돌같은 것...

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

style.css에 이런 게 들어있습니다.


.title{

  font-size: 28px;

  text-align: center;

  border-style: solid;   /* 실선 */

  border-width: 1px;     /* 선 두께 */

  border-color: #AAAAAA; /* 선 색깔 */

  color: #000000;        /* 글자 색깔 */

  width: 30%;            /* 화면의 30% */ 

  padding: 10px;         /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */

  

  /* padding: 50px 10px;  50px: 위 아래, 10px: 좌우 */

  /* padding-top: 30px;  상단만 간격을 30px 지정   */

  

  margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/

}

 

/* 내용 */

.content{

  font-size: 24px;

  text-align: center;

  width: 100%;

  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */

  margin: 0 auto; /* 가운데 정렬 */

}

 

/* 하단 메뉴 */

.bottom{

margin: 20px auto;

  text-align: center;

  width: 100%;

  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */

}

 

 

/* 테이블에 CSS 적용 */

TABLE{

  margin: 0 auto;            /* 테이블 가운데 정렬 */

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

  border-collapse: collapse; /* 컬럼의 외곽선을 하나로 결합 */

 

}

 

TH{

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  color: #FFFFFF;            /* 글자 색 */ 

  background-color: #668db4; /* 배경 색 */

  padding: 5px;              /* 셀 내부 간격 */

}

 

 

td{

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  color: #000000;            /* 글자 색 */ 

  background-color: #FFFFFF; /* 배경 색 */

  padding: 5px;              /* 셀 내부 간격 */  

}

 

 

.input{

  padding: 0px;

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  border-top-style: none;

  border-right-style: none;

  border-left-style: none; 

}

 

.textarea{

  padding: 0px;

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  border-top-style: none;

  border-right-style: none;

  border-left-style: none; 

}

 

A:link {     /* A 태그의 링크 속성 */

  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */

  color: black;              /* 글자색깔 검정 */

}

 

A:hover{     /* A 태그에 마우스가 올라 갔을 경우 */

  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */

  background-color: #E6F7FF; /* 배경 색 변경*/

  color: black;              /* 문자열 색깔 */ 

}

 

A:visited{     /* A 태그의 링크를 방문한 경우 */

  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */

  color: black;              /* 글자색깔 검정 */

}


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


팀 짜는 것 얘기중... ★

으으 프로젝트! :<



------------------오후에는 list에 페이징 + 답변하기 처리 들어감! :>

수정 / 삭제시 password 검증도 들어감!



----------------------------------------------2시54분ㄷ임


dynamic web project 만들었음 - jsp_bbs


[14][BBS] 게시판, DBMS SQL, 사용 Query
[01] 게시판 

- Eclipse Setting 
          type: Dynamic Web Project 
          name: jsp_bbs 
       Package: bbs
                  utility 


   


------------------------------------------------------------------------------ 
1. 게시판 테이블 구조 
 
DROP TABLE bbs PURGE; 
 
CREATE TABLE bbs ( 
  bbsno   NUMBER(7)     NOT NULL,  -- 글 일련 번호, -9999999 ~ +9999999 
  wname   VARCHAR(20)   NOT NULL,  -- 글쓴이 
  title   VARCHAR(100)  NOT NULL,  -- 제목(*) 
  content VARCHAR(4000) NOT NULL,  -- 글 내용 
  passwd  VARCHAR(15)   NOT NULL,  -- 비밀 번호 
  viewcnt NUMBER(5)     DEFAULT 0, -- 조회수, 기본값 사용 
  wdate   DATE          NOT NULL,  -- 등록 날짜, sysdate 
  grpno   NUMBER(7)     DEFAULT 0, -- 부모글 번호 
  indent  NUMBER(2)     DEFAULT 0, -- 답변여부,답변의 깊이
  ansnum  NUMBER(5)     DEFAULT 0, -- 답변 순서 
  PRIMARY KEY (bbsno)  
); 
 
//오 grpno indent ansnum은 답변을 나타낼 때 필요한 것임ㅇㅇ
 
 
2. 글 추가(C: Create) 
 
- MAX(bbsno): bbsno 컬럼에서 최대값을 추출 
SELECT MAX(bbsno) as max FROM bbs; 
 
 MAX 
 ---- 
 NULL <- 값이 없는 경우 
 
 
SELECT MAX(bbsno)+1 as max FROM bbs; 
 
 MAX 
 ---- 
 NULL <- 사칙연산이 의미가 없음. 
 
  
- NVL(): null 값을 0으로 변경 가능함. 
SELECT NVL(MAX(bbsno), 0) as max FROM bbs; 
 
 MAX 
 --- 
   0 
   
 
- 새로운 번호의 생성   
SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs; 
 
BBSNO 
 ----- 
     1 
 
     
- 서브쿼리를 이용한 레코드 추가 
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate)  
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs), 
'왕눈이', '제목', '내용', '123', sysdate);                 
 
 
         
3. 전체 글 목록(S:Total Select List), 최신글 먼저 출력 
   - ASC: 오름 차순, DESC: 내림 차순 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
ORDER BY bbsno DESC; 
 
 BBSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE                 GRPNO INDENT ANSNUM 
 ----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------ 
     1 왕눈이   제목    내용      123          0 2013-10-31 20:46:18.0     0      0      0 
 
 
      
4. 조회수 증가 
UPDATE bbs 
SET viewcnt = viewcnt + 1 
WHERE bbsno=1; 
 
 
 
5. 1건의 글 보기(R:Read, PK 사용) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE bbsno = 1; 
 
 PDSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE                 GRPNO INDENT ANSNUM FILENAME FILESIZE 
 ----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------ -------- -------- 
     1 왕눈이   제목    내용      123          0 2013-10-21 21:07:30.0     0      0      0 file.txt        0 
 
 
 
 
6. 글 수정(U:Update), PK는 레코드를 구분하는 고유 기능을 가지고 있음으로 
   수정하는 것은 권장하지 않음. 
    
-- PK 수정, PK는 중복 충돌이 발생 할 수 있음으로 변경을 권장하지 않음.  
   
-- 일반 컬럼의 변경, 일반적인 UPDATE임    
UPDATE bbs 
SET wname='왕눈이', title='비오는날', content='개구리 연못' 
WHERE bbsno = 1; 
 
 PDSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE                 GRPNO INDENT ANSNUM  
 ----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------  
     1 아로미   제목2   내용2     123          0 2013-10-21 21:07:30.0     0      0      0 
 
     
-- 패스워드 검사 
SELECT COUNT(bbsno) as cnt 
FROM bbs 
WHERE bbsno=1 AND passwd='123'; 
 
 CNT 
 --- 
   1 
      
      
 
7. 글 삭제(D:Delete)
-- 모든 레코드 삭제
DELETE FROM bbs; 
 
-- 1번 레코드만 삭제
DELETE FROM bbs WHERE bbsno=1; 
 
 
 
8. 답변 
 
1) 모든 레코드 삭제 
DELETE FROM bbs; 
 
 BBSNO  TITLE    GRPNO INDENT ANSNUM 
 -----   -----    ----- ------ ------ 
     1  부모글1     1      0      0 
 
      
 BBSNO  TITLE    GRPNO INDENT ANSNUM 
 -----  -----    ----- ------ ------ 
     2  부모글2      2      0      0 
     1  부모글1      1      0      0 
 
      
 BBSNO  TITLE            GRPNO INDENT ANSNUM 
 -----  -----            ----- ------ ------ 
     4  부모글4            4      0      0    
     3  부모글3            3      0      0      
     2  부모글2            2      0      0 
     1  부모글1            1      0      0 
       
 
4) 부모글(일반적인 글) 등록 
 
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate, 
grpno)  
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs), 
'왕눈이', '부모글3', '내용', '123', sysdate,
(SELECT NVL(MAX(grpno), 0) + 1 as grpno FROM bbs)
);                 
 
         
SELECT bbsno, title, grpno, indent, ansnum 
FROM bbs  
ORDER BY grpno DESC, ansnum ASC; 
  
     
5) 답변처리
--read(부모의 title,grpno,indent,ansnum) : 첫번째
select bbsno, title, grpno, indent, ansnum
from bbs
where bbsno=2 --부모의 글
 
 BBSNO TITLE   GRPNO INDENT ANSNUM
 ----- ----- - ---- ------ ------
     2 부모글1       2      0      0
     
--답변등록(부모의grpno,부모+1 -> indent,ansnum): 세번째
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate, 
grpno,indent,ansnum)  
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs), 
'아로미', '부모글1 답변글2', '내용', '123', sysdate,2,1,1);
 
     
--부모글의 2차이상의 답변인 경우 ansnum(답변의 순서) 재정렬 :두번째
UPDATE bbs 
SET ansnum = ansnum + 1 
WHERE grpno=2 AND ansnum > 0; 
 
 
--------------------------------------------------------------------      
 
  
9. 검색 글 목록(S:Search List), title 컬럼에 '제목'이란  
   단어가 들어가 있는 레코드 검색 
    
  
기타)  
- WHERE title LIKE '%독도%': 독도라는 문자열이 발견되면 전부 해당(*)  
- WHERE title LIKE '독도%' : 독도로 시작하는 문자열 검색 
- WHERE title LIKE '%독도' : 독도로 끝나는 문자열 검색 
- WHERE title LIKE '독도'  : 독도와 일치하는 문자열 검색 
- WHERE title = '독도'     : 독도와 일치하는 문자열 검색, LIKE '독도' 동일 
- WHERE title = '__독도'   : 한국독도, 동해독도와 같은 패턴의 문자열 검색 
 
 
1) 성명 검색 글 목록(S:Search List) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE wname LIKE '%왕눈이%' 
ORDER BY bbsno DESC;  
 
 
2) 제목 검색 글 목록(S:Search List) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE title LIKE '%독도%' 
ORDER BY bbsno DESC;  
 
 
 
3) 내용 검색 글 목록(S:Search List) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE content LIKE '%독도%' 
ORDER BY bbsno DESC;  
 
 
 
4) 파이프 기호를 통한 SQL 결합 
SELECT ('A' || 'B' || 'C' || 'D') as "grade" 
FROM dual; 
 
 grade 
 ----- 
 ABCD 
  
 
SELECT ('등록자: ' || wname) as "wname"  
FROM bbs; 
 
 wname 
 --------- 
 등록자: 홍길동 
 등록자: 홍길동 
 등록자: 홍길동 
 등록자: 홍길동 
 


----------------------------------------------파워복붙


[15][BBS] Design Pattern, DBOpen.java, DBClose.java, DTO: BbsDTO.java
01] 설계 

1. Design Pattern 
   list.jsp -> BbsDAO.java -> DBOpen.java, DBClose.java -> Oracle/MySQL DBMS 
                                                         안끊어주면 안됨!!
   
       


'ㅅ')crud는 dao가 함 :>


   

   




----------------------------------------------또 파워복붙



[02] DTO(Data Transfer Object, VO: Value Object) 생성 

   - DTO(Data Transfer Object, Value Object, Bean, Domain) 
     . 하나의 레코드를 객체로 저장합니다. 레코드가 10개이면 DTO(VO)객체도  
       10개가 생성됩니다. 
     . 필드들은 접근 제한자를 전부 private으로 지정합니다. 
     . oracle의 char, varchar, varchar2, date는 String으로 선언합니다. 
     . number(5)는 int로 선언합니다. 
     . number(5, 1)은 float 또는 double로 선언합니다. 정수 4자리, 소수점 이하 1자리
       number(전체 자리수, 소수점 이하 자리수)  - 요럴 때 정수 자리수는 맞춰줘야 함 !!! 소수점은 ㄱㅊ


     . 멤버 변수(필드)의 접근 메소드는 public으로 선언합니다. 
     . 필드의 주석은 '/** */'의 형태로 DOC 주석을 지정합니다. 

//이예~ 자바독'ㅅ'


     . SELECT된 레코드가 많은 경우 오라클은 SubQuery, MySQL은 limit등을 

       이용해서 레코드를 분할해서 가져옵니다.(Paging) 
//어 홈페이지 호스팅을 할 때 mysql이 더 편하댕 'ㅅ' - oracle이 지원을 안함 (가격창렬)      

   - DTO 생성 과정 

     1) 멤버 변수(필드) 선언, 멤버 변수(필드) 주석 처리 

     2) getter, setter 선언 



복붙복붙



이클립스 패키지도 잘 만들어줌 짱짱맨


public class BbsDTO { 

  /** 번호 */ 

  private int bbsno; 

  /** 글쓴이 */ 

이런 식으로 doc 주석을 쓰면 나중에 javadoc같은걸로 뽑으면 이쁩니다



----------------------------------------------------------------------------------복붙해서 끗'ㅅ'




이렇게 만들고




이렇게 씁니다.




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

전송 완료하고 close 하기!



jsp_bbs.zip










5. 수업

진도: 

hw: 


6. 할것


금요일이니까 크롬 초기화하고 갈 것

'Programming' 카테고리의 다른 글

160419: 26회차  (2) 2016.04.19
160418: 25회차  (0) 2016.04.18
160414: 23회차  (0) 2016.04.14
160412: 22회차  (0) 2016.04.12
160408: 20회차  (1) 2016.04.08
Posted by DAVID

160414: 23회차

Programming 2016. 4. 14. 18:20

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


notice 변경


select nvl(max(no),0)+1 from notice

↑nvl문


sysdate



oracle은 comma 관리를 잘 해야 한다.


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


4시 37분부터 수업 시작이쉰것



[12][메모장] 등록, 조회, 수정, 삭제, Action Tag(useBean, setProperty, getProperty) 변환

[01] 등록 

http 프로토콜을 이용해서 요청한다.

웹 컴포넌츠- jsp

자바빈 - 디애이오 디티오 부이오친구들



[02] Action Tag 

1.  <jsp:useBean  id="" class=""  scope=""/>

   - id와 scope 속성에 맞는 기존의 존재하는 객체를 먼저찾고 찾지 못했을
   경우에 새로운 객체를 생성한다.

//기존에 이름이 같은 애가 있으면 코드 이상해지는거십니다

   - id : 빈을 유일하게 구분하는 속성
   - class : 빈의 패키지를 포함한 이름
   - scope : application, session, request,page   
     자바빈즈의 유효범위(생명력이 다하는 때까지)를 나타내며, 기본값은 page


  application : 응용프로그램 모든 페이지에서 자바빈즈 객체 사용
  session      : 세션이 유효한 페이지까지 자바빈즈 이용가능   

//브라우저가 서버가 연결되어진 상태  
  request     : request 객체가 영향을 미치는 모든 JSP페이지 까지 자바빈즈
                  사용가능
  page        : 현재의 jsp페이지 내에서만 사용가능, 기본값으로 지정하지
                  않으면 이옵션 적용
페이지가 젤 작은 유효범위
애플리케이션이 제일 큰 유효범위



2. <jsp:useBean>  
   <jsp:setProperty name=""  property="" />

  - parameter의 값을 bean의 필드에 저장
 
  - name:bean name
  - property : 빈 필드명

조기다가 * 넣으면 모든 setter를 다 사용 가능 :>


3. <jsp:getProperty name=""  property="" />
  
 -  bean의 필드에서 값을 가져옴


얘는 표현식 없이 getter 안쓰고 바로 출력 가능 :> - 이긴 한데 *을 못쓰니까 그게 그거야... -.-

길이상으로 그게 그거여서 그냥 <%=dto.getPop() %> 같이 쓰는 게 짧음


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

[13] CSS의 사용, Action TAG를 이용한 Template 페이지의 제작 실습

[01] CSS(Cascading Style Sheet)의 사용 


인클루드 액션태그!


     - HTML은 구조 및 데이터 출력의 목적을 갖으며 CSS는 출력되는 HTML을
       시각적인 효과를 적용하는 기능을 함.

 

     - HTML에서 시각적인 부분을 CSS로 분리하면 유지보수성이 향상된
       웹사이트 개발가능. - 디자인 쪽은 따로 분리하는 것이 좋음...
       . HTML이 간결해짐.


 

     - SELECTOR{속성:값}의 형태, SELECTOR(태그 선택자)는
       어느 태그에 CSS를 적용할지를 지정
 
       예)
          BODY{         <-- BODY 태그에 적용
              font-size: 20px;
          }
 
          OL LI{        <-- OL태그안의 LI 태그
              font-size: 20px;
          }
 
          *{            <-- 모든 태그
              font-size: 20px;
          }
 
          #menu LI{     <-- id가 menu인 태그안의 LI 태그
              font-size: 20px;
          }

          .title{       <-- class 속성으로 사용
              text-align: center;
          }
 

- 주석: /* */

 
     - 태그에 class 속성과 style 속성이 있으면 style속성이 우선 적용 됩니다.
      <td width="500" class="td_left" style="height:250px" >
         <%=content%>
       </td>


- 스타일 속성 - 클래스 속성은 보통 생각하는 거랑 반대임


 

1. 태그에 직접 스타일을 주는 경우
  - 태그 발생시마다 스타일을 적용하여 주어야 함으로 반복 코드가 많이 발생되.

    <DIV style='font-size: 24px'></DIV>




2. <HEAD>태그안에 스타일을 주는 경우
   - 태그안에 직접 명시한 것보다 우수하나 다른 파일에서는 CSS 가져다 사용이 어려움.
  

    <style type="text/css"> 

    *{ 
      font-family: gulim; 
      font-size: 24px; 
    } 
    </style> 





3. CSS 파일에 스타일을 주는 경우(권장)
   - CSS를 독립 파일로 만들어두어 프로젝트에 경로 설정만으로 재사용이 가능.
   - CSS 파일의 사용: <link href="../css/style.css" rel="Stylesheet" type="text/css">
                            //얘네를 빠트리면 인식이 안된다 ! href + rel + type

>>>>> /WebContent/css/style.css 

/* 제목 */
.title{
  font-size: 28px;
  text-align: center;
  border-style: solid;   /* 실선 */
  border-width: 1px;     /* 선 두께 */
  border-color: #AAAAAA; /* 선 색깔 */
  color: #000000;        /* 글자 색깔 */
  width: 30%;            /* 화면의 30% */ 
  padding: 10px;         /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */
  
  /* padding: 50px 10px;  50px: 위 아래, 10px: 좌우 */
  /* padding-top: 30px;  상단만 간격을 30px 지정   */
  
  margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/
}
 
/* 내용 */
.content{
  font-size: 24px;
  text-align: center;
  width: 100%;
  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */
  margin: 0 auto; /* 가운데 정렬 */
}
 
/* 하단 메뉴 */
.bottom{
margin: 20px auto;
  text-align: center;
  width: 100%;
  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */
}
 
 
/* 테이블에 CSS 적용 */
TABLE{
  margin: 0 auto;            /* 테이블 가운데 정렬 */
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
  border-collapse: collapse; /* 컬럼의 외곽선을 하나로 결합 */
 
}
 
TH{ //th만의 배경색 지정 가능
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  color: #FFFFFF;            /* 글자 색 */ 
  background-color: #668db4; /* 배경 색 */
  padding: 5px;              /* 셀 내부 간격 */
}
 
 
td{
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  color: #000000;            /* 글자 색 */ 
  background-color: #FFFFFF; /* 배경 색 */
  padding: 5px;              /* 셀 내부 간격 */  
}
 
 
.input{
  padding: 0px;
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  border-top-style: none;
  border-right-style: none;
  border-left-style: none; 
}
 
.textarea{
  padding: 0px;
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  border-top-style: none;
  border-right-style: none;
  border-left-style: none; 
}
 
A:link {     /* A 태그의 링크 속성 */
  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
  color: black;              /* 글자색깔 검정 */
}
                                             
A:hover{     /* A 태그에 마우스가 올라 갔을 경우 */
  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
  background-color: #E6F7FF; /* 배경 색 변경*/
  color: black;              /* 문자열 색깔 */ 
}
 
A:visited{     /* A 태그의 링크를 방문한 경우 */
  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
  color: black;              /* 글자색깔 검정 */
}

memo -> webcontent -> css 폴더 -> style.css


좀 졸았음.
http://lectureblue.pe.kr/reqtiles/read.jsp?bbsno=82&nowPage=2&col=&word=&code=7
다시 읽을 것


이건 css_test.jsp


<%@ page contentType="text/html; charset=UTF-8" %> 

<% request.setCharacterEncoding("utf-8"); %> 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

<title></title> 

<style type="text/css"> 

*{ 

  font-family: gulim; 

  font-size: 24px; 

} 

 

#idcss{

  color: #FF0000;             /* 빨간색 */

  background-color: #FFFF00;  /* 노란색 */

  font-size: 50px;

  text-align: center;

  width: 35%;

  margin: 0 auto;

}

</style> 

<!-- <link href="./style.css" rel="Stylesheet" type="text/css"> -->

</head> 

<body> 

  <DIV class='title'>게시판 version 2.0</DIV>

  

  <DIV class='content'>내용</DIV>

  

  <TABLE class='table'>

    <TR>

      <TH>번호</TH>

      <TH>제목</TH>

      <TH>내용</TH>

    </TR>

    <TR>

      <TD align='center'>1</TD>

      <TD align='center'>월요일</TD>

      <TD>첫눈</TD>

    </TR>

    <TR>

      <TD align='center'>2</TD>

      <TD align='center'>화요일</TD>

      <TD>메모장 제작</TD>

    </TR>

    <TR>

      <TD align='center'>3</TD>

      <TD align='center'>수요일</TD>

      <TD>메모장 테스트</TD>

    </TR>

  </TABLE>

 

  <DIV class='content'>

    <A href='http://www.kma.go.kr'>기 상 청</A><br>

  </DIV>  

  

  <DIV id='idcss'>

    <br>

    고유한 CSS 적용

    <br><br>

  </DIV>

  <DIV class='bottom'>하단 메뉴</DIV>

</body> 

</html> 

 


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


[02] Action TAG를 이용한 Mneu 페이지의 제작 실습

     - <%@ include file="./ssi.jsp" %>
@ 들어가는 스크립틀릿은 지시자!
       ssi.jsp의 JSP 소스가 그대로 복사되어 원본 파일에 추가됨.    

차이점: 한꺼번에 파싱 - 한꺼번에  컴파일한다



     - <jsp:include page="/menu/top.jsp" flush="false"/>
이건 액션 태그

       top.jsp가 처리가 되고 나서 HTML로 변경된 결과가 포함.
flush를 true로 놓으면 오류가 많이 남 (기존 값 인정하고 뭐시기)
false로 놓으면 기존에 가던 거 취소하고 그냥 자기 자신을 보냄 - false가 나음
그래서 기본값이 false임
차이점: 각자 파싱 - 각자 컴파일한다 

 
     - menu는 jsp:include Action 태그를 사용해야 페이지간 간섭을
       피할 수 있습니다. 
       include file을 사용하면 같은 변수가 2번이상 선언될 경우 소스 충돌로
       에러 발생.

     - menu Layout(스마트폰 편리)


       ──────────────────────
                        상단 주메뉴                 
                          top.jsp                   
       ──────────────────────
                                                    
                                                    
                            내 용                  
                                                         
                                                        
        ─────────────────────       
                         하단 메뉴                   
                         bottom.jsp                  
        ─────────────────────
 


이런 애들은 include action tag로 만들면 항상 위 아래 보여줌

// 중복되어지는 것들은 파일로 한번에 컴파일해서 실행! :>

// 항상 보이는 것들은 각각 파일로 따로 만들어서 실행

















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

Include 지시자와 Include action태그의 차이점을

http://khquasar.egloos.com/673282

★ Include 지시자

JSP 페이지내부에 다른 파일을 포함하고자 할 때 사용하며 포함된 파일의 내용이 지시자로 지정된 위치에 놓이게 한다.

즉, 해당 JSP page로 복사된 형태로 들어가 같이 번역(서블릿 파일로 변환)되고 컴파일되어 하나의 JSP 파일을 생성한다

★ Include action

JSP 페이지 수행시점에 해당 URL을 실행시켜서 결과를 포함시킨다.

Include 지시자와는 달리 실행시점에 동적/정적인 개념이 포함된다.


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


include 에는 크게 2가지가 있습니다. 잘 아시는 <%@ include file="" %> 과 조금은 낯선 <jsp:include page="" flush="true"/> 입니다. 일단 3개의 파일을 먼저 보겠습니다. 

  



ok.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String ab="파일 ok.jsp 입니다.";

%><%=ab%>

<br>

<%@ include file="okD.jsp" %>

<br>

<jsp:include page="okA.jsp" flush="true"/>



  


unix 계열에서 돌아갈 경우 소스입니다. 한글 때문에 한번더 꽈줍니다. 


okD.jsp

<%

String abc="파일 okD.jsp 입니다.";

%><%=new String(abc.getBytes("8859_1"),"euc-kr")%>

<br><%=new String("HTML 텍스트입니다.".getBytes("8859_1"),"euc-kr")%>

<br>



  


환경(jsp엔진)에 따라 아래처럼 인코딩을 없애줘도 됩니다. 재수가 좋은 경우죠 


(okD.jsp)

<%

String abc="파일 okD.jsp 입니다.";

%><%=abc%>

<br>HTML 텍스트입니다.

<br>



  


page Directive로 charset을 정해주어야 한글이 깨지지 않습니다. 

okA.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String abc="파일 okA.jsp 입니다.";

%><%=abc%>

<br>

<br>



  


파일 3개를 저장하시고, 브라우저에서 http://localhost:8080/ok.jsp 로 실행해보십시오. 물론 기본디렉토리에 위치시켜야죠. 이거 질문하는 분들 장난아니게 많습니다. tomcat 의 경우 server.xml 을 변경하지 않고 bin/startup.bat (startup.sh) 를 실행하셨다면 webapps/ROOT/ 가 기본디렉토리입니다. resin 의 경우는 doc 디렉토리가 기본 디렉토리겠죠. apache 랑 연동했을 경우 apache의 DocumentRoot 를 톰캣의 c:/jakarta-tomcat/webapps/ROOT 로 맞춰주시는 것이 헷갈리지 않을 겁니다. 

  


include Directive 는 <%@ ... %> 로 싸여있습니다. @은 Directive 라는 의미죠. 포함하는 문서에 정적으로 컴파일 됩니다. 포함하는 파일(ok.jsp)에서 사용한 변수를 따로 선언하지 않고 바로 사용할 수 있습니다. 물론 여기(okD.jsp)에서 선언된 변수도 포함하는 파일(ok.jsp)에서 따로 선언하지 않고 사용할 수 있습니다. 대신 이 파일(okD.jsp)을 변경할 경우 포함하는 파일(ok.jsp)의 시스템 날짜를 변경해서 재컴파일을 유도해야 이 파일(okD.jsp)의 변경사항이 적용되는 것을 볼 수 있습니다. 

  


include Action은 xml 형식으로 <jsp:include page=... flush="true" /> 를 사용합니다. flush="true" 는 그냥 쓰십시오 false로 바꾼다거나 빼먹거나 하면 안됩니다. 묻지 마십시오. 다칩니다. (==O%TT; 퍽!) 

  


include Action은 동적이라고 합니다. 처음엔 저도 이해가 안 갔습니다. 하지만 쓰면서 이 넘이 얼마나 독립적인지 아주 잘 알게 되었고, 왠만한 경우 저는 directive 보다는 action 을 사용합니다. 이 넘은 포함하는 파일과 상관없이 실행이 됩니다. directive 의 경우 ok.jsp와 okD.jsp 의 소스가 합져져서 하나로 컴파일되어 동작하는 것과 같지만 action 의 경우 ok.jsp 컴파일하고 okA.jsp 따로 컴파일되어서 ok.jsp가 okA.jsp를 호출해서 사용하고 다시 ok.jsp가 동작하는 구조라고 생각하시면 될 것입니다. (죄송합니다만 제가 경험상 체득한 것이라 검증이 필요한 부분입니다.) 

  


include Action 에는 page directive가 있습니다. include directive 에는 Page directive 가 없습니다. 만일 okD.jsp 에 <%@ page contentType="text/html;charset=euc-kr"%> 를 넣는다면 contentType="text/html;charset=euc-kr" 가 두개가 되기 때문에 Page directive: can't have multiple occurrences of contentType 라고 Exception 메시지를 보실 수 있습니다. import 속성이 틀리다면 contentType="text/html;charset=euc-kr" 만 삭제해주시면 될 것입니다. (이것도 자주 질문 하시는 것 중의 하나입니다.) 

  


파일을 변경해보겠습니다. (ok.jsp) 는 

ok.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String ab="파일 ok.jsp 입니다.";

%><%=ab%>

<br>HTML 텍스트입니다.

<br>

<br>

<%@ include file="okD.jsp" %>

<br>

<jsp:include page="okA.jsp" flush="true">

  <jsp:param name="ab" value="<%=ab%>"/>

</jsp:include>



  



okD.jsp

<%

String abc="파일 okD.jsp 입니다."+"###"+ab;

%><%=new String(abc.getBytes("8859_1"),"euc-kr")%>

<br><%=new String("HTML 텍스트입니다.".getBytes("8859_1"),"euc-kr")%>

<br>



  



okA.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String ab =request.getParameter("ab");

String abc="파일 okA.jsp 입니다."+"###"+ab;

%><%=abc%>

<br>

<br>



  


이해가 가실라나요? 변수전달방법입니다. Action 에 대해서 좀더 살펴봐야 할 것이 있습니다. 


출처: http://egloos.zum.com/khquasar/v/673282





지시자와 액션태그(2)

01087129057 | 2009.05.23 12:04목록크게

댓글쓰기

선도부 : 자..이번에는 include에 대해서 배워볼까.

            일단 include는 그냥 include와 include액션태그로 나눠서 생각할수있어.

           

            먼저 네가 메인으로 나가는 페이지를 하나 만들었다고 생각하자

            메인페이지의 상단과 하단부분에 각각 다른내용이 들어가겟지?

            이것을 하나의 페이지에 전부 표현한다면 페이지의 길이가 많이 길어지고

            수정하기도 어려을거야.

 

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

                                             상단

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

                                             중단

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

                                             하단

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

 

            만약 중단 부분만 메인페이지로 정하고 상단과 하단을 다른 페이지로 작성후

            중단페이지가 상단페이지와 하단페이지를 끌어와서 하나의 페이지로 보여주는거지

            보여지는건 하나의 페이지지만 실제로는 3개의 페이지가 합쳐져서 보여지는거지

 

현뚝 : 확실히 그렇게 작성한다면 나중에 소스 수정하기도 편하겠네요.

 

선도부 : 3개의 페이지가 하나로 묶여서 합쳐진 하나의 페이지로 컴파일이 되는거야.

            일단 예제를 보도록할까?

 

예제1 )------------------------------------------------------------

<h1>Directive Example4</h1>
<%@ page contentType="text/html;charset=euc-kr"%>
<%@ include file = "DirectiveTop.jsp"%>
include 지시자의 body부분입니다.
<%@ include file = "DirectiveBottom.jsp" %>

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

이게 중단인 메인페이지 부분이야.

<%@ include file = "DirectiveTop.jsp"%>

<%@ include file = "DirectiveBottom.jsp" %>

에서 메인페이지의 상단과 하단부분을 가져와서 쓰고있지?

그렇다면 상단과 하단의 내용을 보도록 하자.

예제1-1) -------------------------------------------------------

<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
include지시자의 top부분입니다.
<hr>
</html>

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

 

예제 1-2 ) -------------------------------------------------------

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.util.*" %>
<%
Date date = new Date();
%>
<hr>
include지시자의 Botton부분입니다.<p>
<%=date.toLocaleString() %>

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

 

1-1은 상단

1-2는 하단부분이야.

1-2경우 시간을 표현해주기 위해 java.util.*을 임포트시키고

Date date = new Date(); 로 객체를 만들어

<%=date.toLocaleString() %>로 시간을 표현해주고 있어.

 

결과 ) -----------------------------------------------------------

 

Directive Example4

include지시자의 top부분입니다.

include 지시자의 body부분입니다.

include지시자의 Botton부분입니다.

2007. 4. 9 오후 4:55:04

 

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

 

같이 나오게 되겠지?

보여지는 페이지는 한개의 페이지지만 다른2군데에서 가져와 쓰고 있지.

근데 그냥 include지시자의 경우 단순히 소스만 가져와서 쓰는거야.

하지만 include액션지시자의 경우 다른페이지의 결과를 포함해서 가져오는거야.

한마디로

include지시자 : 소스의 내용을 텍스트로

include액션태그 : 포함시킬 페이지의 처리결과를 포함
이라는 거지

 

액션태그의 양식은

<jsp:include page ="원하는 페이지경로" flush="true" />

로 사용해

 

예제1 )-----------------------------------------------------------------

<h1>Action Example1</h1>
<FORM METHOD=POST ACTION="includeTag.jsp">
이름 : <INPUT TYPE="text" NAME="name"><p>
<INPUT TYPE="submit" VALUE="보내기">
</FORM>

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

html문서로 name의 값을 입력받고 'includeTag.jsp'로 보내고 있군

 

예제 1-2) --------------------------------------------------------------

<html>
<h1>ActionTag Example1</h1>
<%@ page contentType="text/html;charset=euc-kr" %>
<%
 request.setCharacterEncoding("euc-kr");
 
String name= "japan football";
%>
<body>
<jsp:include page="includeTagTop1.jsp"/>
include action의 body입니다.<p>
<hr>
</body>
</html>

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

includeTag.jsp부분으로 중간에

 String name= "japan football"; 

로 선언된 부분이 있긴 하지만 이미 앞의 html부분에서 입력받은 값으로 처리되어

왔기때문에 실제로 이부분은 사용되지 않아.

 

그렇다면 <jsp:include page="includeTagTop1.jsp"/> 하는 top부분을 볼까

 

예제 1-3 ) ------------------------------------------------------

<%@ page contentType="text/html; charset=EUC-KR" %>
<% 
 request.setCharacterEncoding("euc-kr");
%>
<%
 String name = request.getParameter("name");
%>
include ActionTag의 Top부분입니다.<p>
<b><%=name%>Fighting!!</b>
<hr>

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

 

 String name = request.getParameter("name");

이부분은 앞의 html에서 넘겨받은 값을 말하고 있어.

 

그리고 그것을 아래 <b><%=name%>Fighting!!</b>로 보여주고있네.

결과를 본다면

결과 ) -----------------------------------------------------------

Action Tag1 Example1

include ActionTag의 Top부분입니다.

명숙이Fighting!!

include ActionTag의 Body입니다.

 

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

이렇게 나오게 되지.

중요한것은 includeTagTop1.jsp를 include시키면서 그 값이 그대로 따라와서

includeTag1.jsp로 와서 출력이 되는거지.

출처: http://m.blog.daum.net/eduiso/169

--------------------------------------------------------------------------------------------------------
 
1. 페이지를 분할하지 않은 통합 소스

    



memo -> webcontent -> menu에 top이랑 bottom .jsp만들고

memo -> webcontent에다가 index.jsp만든다.


근데 index를


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1>기본 페이지 입니다.</h1>


</body>

</html>


이런 식으로 만들고 memo 자체에서 run on server하면


http://localhost:8000/memo/


기본 페이지가 생겨서 이제 404 안뜬당...


잠시 잠....


----------------------------------------5시 42분----------------


top.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



<%

String root = request.getContextPath();

%>


<html>

<head>

<style type="text/css">

ul#menu li {

display: inline; //가로로 보여주기

}


ul#menu li a {

background-color: black;

color: white;

pading: 10px 20px;

text-decoration: none;

border-radius: 4px 4px 0 0;

}


ul#menu li a:hover { //올려놨을 때 색깔

background-color: orange;

}

</style>

</head>

<body>

<!-- 상단 메뉴 -->

<div style="background-color: #EEEEEE;">

<table style="width: 100%">

<tr>

<td><img src="<%=root%>/menu/images/main-03.jpg" width='100%'

height='40%'></td>

</tr>


<tr>

<td>

<ul id="menu">

<li><a href="<%=root%>/index.jsp">홈</a></li>

<li><a href="<%=root%>/memov3/list.jsp">메모목록</a></li>

<li><a href="<%=root%>/memov3/createForm.jsp">메모등록</a></li>

<li><a href="">메뉴1</a></li>

<li><a href="">메뉴2</a></li>

<li><a href="">메뉴3</a></li>

<li><a href="">메뉴4</a></li>

</ul>

</td>

</tr>


</table>

</div>

<!-- 상단 메뉴 끝 -->



bottom.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">




<!-- 하단 메뉴 시작 -->

<div

style="width: 100%; background-color: #EEEEEE; text-align: center; margin-top: 2em;">

2016 SOLDESK JSP Developer</div>

<!-- 하단 메뉴 끝 -->



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

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page = "/menu/top.jsp" ></jsp:include>
<br><br><br><br><br><br><br>

<h1>기본 페이지 입니다.</h1>
<br><br><br><br><br><br><br>
<jsp:include page = "/menu/bottom.jsp" ></jsp:include>


</body>
</html>



memov3의 list.jsp 수정


<title>Insert title here</title>

<link href="../css/style.css" rel = "stylesheet">
 
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type="text/javascript">
function read(memono){
var url = "./read.jsp";
url = url + "?memono=" + memono;
location.href = url; //자바스크립트에서 -get 방식- 링크 보내기
}

</script>

</head>
<body>

<jsp:include page = "/menu/top.jsp" />



<DIV class = 'title'>
메모 목록</DIV>

<Table>
<TR>
<TH>번호</TH>
<TH>제목</TH>
<TH>날짜</TH>
<TH>조회수</TH>
</TR>

<%
if (list.size()==0) {
%>
<TR>
<TD colspan='4'>등록된 메모가 없습니다.</TD>
</TR>
<%
} // end if
else {
for(int i = 0; i<list.size(); i++){
MemoVO vo = list.get(i);
//list 안에서 rs.next로 MemoVO 에다가 저장해줬었음 (희미한 기억)
%>
<TR>
<TD><%=vo.getMemono()%></TD>
<TD><a href = "javascript:read('<%=vo.getMemono()%>')"><%=vo.getTitle() %></a></TD>
<TD><%=vo.getWdate()%></TD>
<TD><%=vo.getViewcnt()%></TD>

</TR>

<%
} //end for
} //end else
%>
</Table>

<DIV class = 'bottom'>
<input type="button" value='등록'
onclick="location.href='./createForm.jsp'">
</DIV>


<jsp:include page = "/menu/bottom.jsp"/>




</body>
</html>















5. 수업

진도: 

hw: 


6. 할것


파일보관함에 editplus 도우미 있음

배포는 안함


ocjp랑 ocp 월요일까지 생각할 것 ★- 생각 다 하면 별 지우기 :>

'Programming' 카테고리의 다른 글

160418: 25회차  (0) 2016.04.18
160415: 24회차  (0) 2016.04.15
160412: 22회차  (0) 2016.04.12
160408: 20회차  (1) 2016.04.08
160407: 19회차  (1) 2016.04.07
Posted by DAVID

160412: 22회차

Programming 2016. 4. 12. 17:44

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


jsp import문 쓸 때 실수하는 것 조심할 것 


<tr>

<th>전화: </th>

<td><input type = "text" name = "phone" value="<%= dto.getPhone()%>"></td>

</tr>

createForm의 이름을 변경한 updateForm에 내용을 입력받을 수 있게 변경하고 있음! :>


"Java, Jsp, MVC"

01234567890

indexOf("Java") 하면

자바라는 글자를 찾은 맨 처음 위치인 0을 반환해줌


만약에 없는 글자를 찾으면 -1를 반환함


<label><input type="checkbox" value="java" name="skill"

<%if(dto.getSkillstr().indexOf("java") != -1) {%>

checked <%} %>> JAVA </label> 

dto의getSkillstr()의인덱스가 -1을 반환하지 않으면 - 값이 있는거니까 java에 checked를 한다.

//아니면 넘어간다.


<th>취미:</th>

<td><select name="hobby">

<option>취미를 선택해라</option>

<option value = "기술 서적 읽기">기술 서적 읽기

<option value = "게임">게임

<option value = "영화감상">영화감상

<option value = "보드타기">보드타기

</select>

<script>

document.frm.hobby.value = '<%=dto.getHobby()%>';

</script>

</td>


다큐먼트.폼네임 그거했음...


--------------------------------------오늘 불미스런 사건이 있어서 진도 별로 못 나갔습니다.

저는 에비동과

에비야키와

블랙치즈케이크 만드는 법을 공부했읍니다


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


그리고 delete 할 때 드디어

confirm을 썼따~!!!


씬난당 :D



function del(no){

/*

var url = "delete.jsp";

url += "?no=" + no;

location.href = url;

이래도 되는데 그냥 한번 물어봐야 할 거 같으니까 처리 프로세스를 만듭니다

*/

var url = "delete.jsp";

url += "?no=" + no;

if(confirm("정말로 삭제하시겠습니까?")){

//컨펌은 o - true / x - false 리턴해줌.

location.href = url;

}

else{

}

}


</script>


아나 url에 자꾸

url += "?no" = + no;

이렇게 쓰거나


url = "?no=" + no;


이렇게씀 ㅡㅡ


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


Java Bean 친구들

1. 디애이오

2. 디티오는부이오

3. 서비수(얘는 아직 멀라여)


와 재미있는 알아서하기다 ! :D


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

다이나믹 왭 프로잭트 - 어드래쓰

전에 쓰던 어드레스디애이오 디티오 태스트 대려다가스기뢔슙니다


기찬다


--------------------------------------밥먹었음! :>


이제 오늘은 그냥 가져다가 고치는 일만 하고 있습니다

수업만 잘 들을 것



address.zip


이거 끝내씀미다




5. 수업

진도: 

hw: 


6. 할것


졸릴 때 A4에 쓸 것

오늘은 float 그릴 것 


 http://kssong.tistory.com/26 보다 말았는데 그냥 브로그 보면 될 둣...


'Programming' 카테고리의 다른 글

160415: 24회차  (0) 2016.04.15
160414: 23회차  (0) 2016.04.14
160408: 20회차  (1) 2016.04.08
160407: 19회차  (1) 2016.04.07
160406: 18회차  (3) 2016.04.06
Posted by DAVID

160408: 20회차

Programming 2016. 4. 8. 12:25

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것

11 :>


VO = DTO 가튼것



요고 하고 있음.

파일명은 약간 다르긴 한데 -.-


ssi.jsp랑 ssi_dbclose.jsp 부분으로 나눠서 DBMS 관련 코드가 있으쉰것





READ.jsp 파일 고치고 있음


<%@ page language="java" contentType="text/html; charset=UTF-8" 

 pageEncoding="UTF-8"%>

<%@ include file ="./ssi.jsp" %>


<%

int memono = Integer.parseInt(request.getParameter("memono"));

sql = "update memo ";

sql += "set viewcnt = viewcnt + 1 ";

sql += "where memono = ? ";

pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);

pstmt.executeUpdate();

// 조회수 증가하시는것

sql = "select * ";

sql += "From memo Where memono = ? ";


pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);


rs = pstmt.executeQuery();

String content = null;

String wdate = null;


if (rs.next()) {

content = rs.getString("content");

//얘만 가져온 이유는 변환하려고!

//뭐냐면 엔터나오면 라인스킵해주려고 :>

content = content.replaceAll("\r\n", "<br>");


wdate = rs.getString("wdate").substring(0, 10);

// substring(beginIndex, endIndex);

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" 

content="text/html; charset=UTF-8">


<title>Insert title here</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>



<script type = "text/javascript">

function updateM(){

var url = "updateForm.jsp";

url += "?memono=<%=memono%>";

location.href = url;

//혼파망...-_-);

}


function deleteM(){

var url = "deleteForm.jsp";

url += "?memono=<%=memono%>";

location.href = url;

}


</script>


</head>

<body>

<DIV

style='font-size: 24px; text-align: center; 

text-decoration: underline; margin-top: 10px; 

margin-bottom: 20px;'>

조회</DIV>


<table align="center" border="1px" cellpadding="10px" 

cellspacing="0px">

<TR>

<TH>제목</TH>

<TD><%=rs.getString("title")%></TD>

</TR>

<TR>

<TH>내용</TH>

<TD><%=content%></TD>

</TR>

<TR>

<TH>조회수</TH>

<TD><%=rs.getString("viewcnt")%></TD>

</TR>

<TR>

<TH>등록일</TH>

<TD><%=rs.getString("wdate")%></TD>

</TR>

</table>


<DIV style='text-align: center; margin-top: 20px'>

<input type='button' value='등록'

onclick="location.href='./createForm.jsp'">

<input type='button' value='목록' 

onclick="location.href='./list.jsp'">

<input type='button' value='수정' 

onclick="updateM()">

<!-- on으롷 시작하는 함수는 그냥 자바스크립트 취급이라서

< % % > 안써도 됨

-->

 

<input type='button' value='삭제' 

onclick="deleteM()"> 

 

</DIV>







</body>

</html>

<%

}

%> 

//이 부분은 왜 이따구인가 ? -> 안 닫아줘서 

<%@ include file ="./ssi_dbclose.jsp" %>


2. 일반적인 JSP 개발 패턴(JSP Model 1)

   
  

jsp가 자바빈을 사용하는거지 html이 직접 쓸 수느 ㄴ없음


웹부라오저 -> JSP -> 자바빈 -> 디비

디비 -> 자바빈 -> 쪠쎼피 -> 웹브라우저


3. 3 계층( 3 Tier)의 구성도

   
  

이런 시스템이군

HTML은 그냥 별로 하는 게 없는 새기입니다


일은 웹서버에서 다하네여 불쌍한것



4. DTO(VO)객체의 사용
    - DTO: Data Transfer Object, JSP와 자바 빈즈간 데이터를 전달하는 기능을 합니다.

//DB써버까지 사용자한테 받은 데이타를 전달해줌! :>

//데이타-트랜스퍼-오부젝트


//그러니까 부라우저부터 DB까지 전달 담당입니다.

//ㅇㅇ 데이타를 갖고다니는애

//택배아저씨 같은 ...ㅇ ㅏ내 기타 왜 안와 ㅠㅠㅠㅠㅠㅠㅠㅠ 택배맨 

//EMS양반....ㅠㅠㅠㅠㅠㅠ우체국국제배송 ㅠㅠㅠㅠㅠㅠㅠㅠ


    - VO: Value Object, DTO와 같은 역활을 하며 명칭만 다릅니다.
//ㅇㅇ어쨌든 얘랑 비슷한 앤데영

//그냥 이름이 다름맨임

//근데 써준게 더 있어보임 + 파일에다가 저런 식으로 DTO VO라고 써줘야합니다★


    - JSP 환경이 콤포넌트 기반의 개발이 되도록 지원하는 역활을 합니다.
  


    


비즈니스 로-직 을 갖고 있는 애 = 퍼시스턴스 계층 (-_-?)

찍어줍니다인애 - 프리젠테이션 계층

면접맨이려면 이런 것도 물어본댕


굿굿



5. VO(DTO) class의 제작 
   - VO(Value Object): 값 객체, 하나의 레코드 저장 

//한 사람 정보! 한 사람 것! 한사람의 한개의. 정보!!

// ㅇㅇ 그러니까 레코드 1개! :>

// 데이타가 10개 - 디티오가 10개


   - DTO(Data Transfer Object): VO와 같은 목적
   - DTO, VO는 자바 디자인 패턴에 등장하는 용어들임으로 암기합니다.
// 예~ 디자인 뺴턴~~~~~~~ 

// >.< 책은 샀는데... 시험 끝나면 공부하개스빈다 ...

1) 작성 규칙
   - 테이블의 컬럼명이 변수로 1:1 매칭이 되도록 합니다.
// 어 이거 이름이 같아야 먹어줍니다.


   - 테이블에는 없지만 필요에 따라 추가적인 변수 선언이 가능합니다.

// 빼놓으면 안되는데 더 늘어나는건 괜찮습니다.



2) 변수 선언
   - 변수는 다른 클래스에 로직이 분산되지 않도록 private으로 선언합니다(캡슐화).
   private int memono;


3) setter의 선언
   - 
메소명을 구성시 set으로 시작하며 변수명의 첫자를 대문자로 연결합니다.
   public void setMemono(int memono){ 

     ...
   }  


4) getter의 선언
   
- 메소명을 구성시 get으로 시작하며 변수명의 첫자를 대문자로 연결합니다.
   public int getMemono(){
     ...
   }



어 구래서 




이렇게 

자바리소스 -> 메모패키지 -> MemoVO 클래스 만들고 난 담에

sql문 복사해서


변수명들 생성해줬음!

wdate는 String으로 만들면 됩니다.



그리고 Getter&Setter 자동생성해줌 :>

이클립스 짱짱맨



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


DAO = 데이타 액세스 오부젝트

얘도 우리의친구 디자인패턴임 ㅋㅋㅋㅋㅋ


디자인패턴 - 코드를 이부게 디자인하는패턴인데 뭔 패턴 뭔 패턴 해서 종류가 졸마늠



  - ANSI SQL92, 99에 기준하여 각 데이터베이스상에서 SQL을 사용할 수 있습니다. 

  - DQL(Data Query Language), 데이터 질의어, 데이터 검색, 출력과 관련된 쿼리 
    . SELECT..FROM..WHERE  //얘는 있는걸 갖다가 검색해서 쓸 때 쓰는것
    씰렉트(뭐를) 패쓰워드 푸롬(위치) 멤바테이블 웨어(조건) 10개만(다갖다써도됨)


  - DML(Data Manapulation Language), 데이터 조작어, 데이터 입력, 수정, 삭제와 관련된 쿼리 
    . INSERT, UPDATE, DELETE // 얘는 데이타 입력 수정 삭제 할 떄 쓰는 거임 -_-)

    인써트도 어쩌구저쩌구가 있는데 나중에 하것지 인서트 인투 어쩌구

업데이트 셋 어쩌구 저저구


  - DDL(Data Definition Language), 데이터 정의어, 테이블 생성 및 삭제, 테이블 구조 수정과 관련된 쿼리 
    . CREATE TABLE, DROP TABLE, ALTER TABLE // 아까 쟤네 어디다가 넣냐고 -> 공간 확보! :> 테이블 형태로 만들어져서 다 테이블임


크리에이트 테이블 - 생성맨

드롭 테이블 - 이건 delete 기능임

알터 테이블 - column이 부족할 때 추가 추가



  - TCL(Transaction Control Language), 트랜잭션 제어 언어, 안정적인 데이터 처리를 위한 데이터 처리와 관련된 명령어 
    . COMMIT, ROLLBACK, SAVEPOINT // 트랜잭션 :>! - 응? 계좌이체?

A라는 계좌에서 B라는 계좌로 돈을 이체시킴!

1) A에서 돈을 뺸다

2) 그 돈을 B라는 계좌로 넣는다


원자성... 어 아톰...뭔데 -_-);; Atomic?  

이힣ㅎㅎㅎ



  - DCL(Data Control Language)데이터 제어 언어, 권한 부여와 관련된 쿼리 
    . GRANT, REVOKE  // ㅋㅋㅋㅋㅋㅋㅋ임 아니네 이건 DBMS가 해준댕 :D 굿



잉 OCP OCJP 볼라면 계정이 있어야한대 _-_) 흐흥


오라클 - 네이버 계정으로 만들었음 

비번은 어.. .아마 잊을듯 -_-)



이거 다시 복습 :>





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


Memo의

DBCLOSE

DBOPEN

MEMODAO

MEMOVO

CONSTANT


그리고 test.memo의 MEMOTEST 를 쓰고 있는뎅


//Constant.java


package memo;


public class Constant {


public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

public static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

public static final String USER = "soldesk";

public static final String PASSWORD = "1234";



}

 


//DBOPEN.java

package memo;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;


public class DBOpen {


public static Connection getConnection() {

Connection con = null;

try {

Class.forName(Constant.DRIVER);

//드라이버를 메모리에 올리는 것

//-_-? ★

try {

con =DriverManager.getConnection(Constant.URL, Constant.USER, Constant.PASSWORD);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return con;

}


}



//DBclose

package memo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBClose {

public static void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
// TODO Auto-generated method stub
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public static void close(Connection con, PreparedStatement pstmt) {
// TODO Auto-generated method stub
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}


//MemoVO

package memo;

public class MemoVO {

private int memono;
private String title;
private String content;
private String wdate;
private int viewcnt;

public int getMemono() {
return memono;
}

public void setMemono(int memono) {
this.memono = memono;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getWdate() {
return wdate;
}

public void setWdate(String wdate) {
this.wdate = wdate;
}

public int getViewcnt() {
return viewcnt;
}

public void setViewcnt(int viewcnt) {
this.viewcnt = viewcnt;
}

}

----------------
//이제 수정중인 애들입니다
//MemoDAO

package memo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MemoDAO {
public int update(MemoVO vo){
int cnt = 0;
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
                               
sql.append(" UPDATE memo ");
sql.append(" SET title = ?, ");
sql.append(" content = ? ");
sql.append(" WHERE memono = ? ");
           
try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, vo.getTitle());
pstmt.setString(2, vo.getContent());
pstmt.setInt(3, vo.getMemono());
cnt = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DBClose.close(con, pstmt);
}
return cnt;
}
public MemoVO read(int memono){
MemoVO vo = null;
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer();
sql.append(" SELECT * from memo ");
sql.append(" where memono = ? ");
try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, memono);
rs = pstmt.executeQuery();
if(rs.next()){
vo = new MemoVO();
vo.setMemono(rs.getInt("memono"));
vo.setTitle(rs.getString("title"));
vo.setContent(rs.getString("content"));
vo.setViewcnt(rs.getInt("viewcnt"));
vo.setWdate(rs.getString("wdate"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBClose.close(con, pstmt, rs);
}
return vo;
}
public int create(MemoVO vo){
int cnt=0;
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
sql.append(" insert into memo(memono, title, content, wdate)  ");
sql.append(" values(memo_seq.nextval,?,?,sysdate) ");
try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, vo.getTitle());
pstmt.setString(2, vo.getContent());
cnt=pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBClose.close(con,pstmt);
}
return cnt;
}
}



//그리고 MemoTest

package test.memo;

import memo.MemoDAO;
import memo.MemoVO;

public class MemoTest {
static MemoDAO dao = new MemoDAO();
/* different package import★ */

public static void main(String[] args) {
// create(dao);
// read(dao);
update(dao);
}

private static void update(MemoDAO dao) {
int number = 101;
MemoVO vo = dao.read(number);
vo.setTitle("제목수정");
vo.setContent("내용수정");
int cnt = dao.update(vo);
if(cnt>0){
p("수정 성공");
vo = dao.read(number);
p(vo);
}else{
p("수정 실패");
}
}



private static void read(MemoDAO dao) {
// TODO Auto-generated method stub
int memono = 101;
MemoVO vo = dao.read(memono);
p(vo);
}

private static void p(MemoVO vo) {
// TODO Auto-generated method stub
p("번호: " + vo.getMemono());
p("제목: " + vo.getTitle());
p("내용: " + vo.getContent());
p("날짜: " + vo.getWdate());
p("조회수: " + vo.getViewcnt());
}

private static void create(MemoDAO dao) {
MemoVO vo = new MemoVO();
vo.setTitle("그냥");
vo.setContent("스트레스");

int cnt = dao.create(vo);

if (cnt > 0) {
/* 0보다 크면 값이 들어갔으니까... */
p("등록 성공");
} else {
p("등록 실패");
}
}

private static void p(String string) {
System.out.println(string);
}

}


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



public class MemoDAO {

public List<MemoVO> list(Map map){

List<MemoVO> list = new ArrayList<MemoVO>();

return list;

}



오 맵도 써봅니다




적절한 마룬파이브

SELECT memono, title, viewcnt, wdate
FROM memo
ORDER BY memono DESC
-- 조롷게 하면 최신 순으로 정렬해서 가져옴 :>

sql문도 바꿈

SELECT memono, title, viewcnt, wdate, rownum r -- rownum은 순서를 알려주는 **임 

FROM(

SELECT memono, title, viewcnt, wdate

FROM memo

ORDER BY memono DESC

)


3중문 필수


-- rownum은 순서를 알려주는 **임 - 가상 컬럼 (일련번호) 


근데 오류가 있는 새기라서 

1. 찾아온다

2. 로우넘에 박아준다

3. 이걸 또 출력한다


SELECT memono, title, viewcnt, wdate, r

FROM(

SELECT memono, title, viewcnt, wdate, rownum r -- rownum은 순서를 알려주는 **임 - 가상 컬럼 (일련번호) 

FROM(

SELECT memono, title, viewcnt, wdate

FROM memo

ORDER BY memono DESC

)

)

WHERE r >= 1 and r <= 5 -- 5개가 넘어도 5개까지만 뽑아온당 :>


이런 시스템입니다.




이제 JSP라서 ssi.jsp가


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>


<%@ page import = "memo.MemoVO, java.util.*" %>


<%

request.setCharacterEncoding("UTF-8");



int cnt = 0;

%>

이모양이 됬ㅅ브니다


그리고 오늘 하는 거 약간 이해가 안되는 어려움이 있다....


Java Resource에 짠 memo 패키지의 java 파일을 좀뒤에 올리겠음 (-_-);;



이건 액션태그 쓰는 법 입니다.

액션 태그

action tag


객체를 생성하는 법을 액션 태그로 만드는 법







이건 한번 밀고 하는 것 ㅋㅋㅋㅋㅋㅋ




즐거운것



큰일났다 ㅋㅋㅋㅋ




--------------자바빈이 뭔데?----------------

출처: http://fromvenus.tistory.com/94


#자바빈(JavaBean)이란?


일반적인 웹사이트는 디자이너와 프로그래머가 협력하여 개발한다. 그런데 프로그래머가 JSP페이지에 자바코드를 입력했을때 디자이너 입장에서는 해석하기 어려워지고 효율또한 매우 떨어지게 된다. 이런 비효율적인 부분을 지원하기위해 제공되는 기능의 형태가 자바빈이다. 자바빈은 JSP페이지의 디자인 부분과 로직부분을 나눔으로써 복잡한 자바코드를 줄이고 프로그램의 재사용성을 증가시킨다.


#자바빈의 설계 규약


자바빈을 작성하기 위해서는 설계규약을 따라야 한다. 만약 설계규약과 맞지 않는 경우 자바빈의 특성을 갖지 않는 클래스가 되어버릴수 있다.

1. 멤버변수마다 별도의 get/set 메소드가 존재해야 한다.

2. get 메소드는 매개변수가 존재하지 않아야한다.

3. set 메소드는 반드시 하나 이상의 매개변수가 존재해야 한다.

4. 생성자는 매개변수가 존재하지 않아야 한다.

5. 멤버변수의 접근제어자는 private이고 각 set/get메소드의 접근제어자는 public , 클래스의 접근제어자는 public 으로 정의한다.


#자바빈 사용하기


1.<jsp:useBean/>태그


자바빈 객체를 생성하기 위한 코드이고 태그 속성은 다음과 같다.


<jsp:useBean id="빈 이름" class="자바빈 클래스 명" scope="사용범위"/>


id는 JSP페이지에서 자바빈 객체의 변수명, class는 자바빈에 사용할 클래스명(클래스가 패키지 않에 있다면 패키지 경로까지 적어주어야 한다. scope는 자바빈의 사용범위를 뜻하며 request, page, session, application 네종류가 존재한다. 디폴트값은 page로 설정된다.


2.<jsp:setProperty/>태그


자바빈 클래스의 속성 값을 설정하기 위한 태그이고 속성은 다음과 같다.


<jsp:setProperty name="빈 이름" property="속성명" value="설정할 값"/>

<jsp:setProperty name="빈 이름" property="속성명" param="파라미터명"/>


name은 선언된 자바빈 객체의 id property는 객체내의 속성명, value는 속성에 넣을 값을 의미한다. 여기서 클라이언트에서 전송되어오는 파라미터 값을 속성값으로 할당 하고 싶다면 value 속성대신 param속성을 이용하면된다. 그런데 여기서 자바빈으로 사용되는 클래스의 속성들은 설계규약에 의하여 private으로 설정되는데 <jsp:setProperty/>태그로 접근이 가능한 이유는 변수에 직접적인 접근이 아닌 set 메소드를 호출하여 접근하게 되는 것이다.


3.<jsp:getProperty/>태그


자바빈 클래스의 속성값을 가져오기 위한 태그이고 속성은 다음과 같다.


<jsp:getProperty name="빈 이름" property="속성명"/>


name는 값을 가져올 빈의 id, property는 가져올 속성의 이름이다.


#자바빈 예제

BeanTest.java

package test;

public class BeanTest {

        private String name = null;

        private int age = 0;

       

        public String getName() {

               return name;

        }

        public void setName(String name) {

               this.name = name;

        }

        public int getAge() {

               return age;

        }

        public void setAge(int age) {

               this.age = age;

        }

}

자바빈으로 사용할 클래스이다. 멤버변수는 모두 private으로 선언되어있고 설계규약에 따라 set/get메소드를 만들어줘야 한다.


BeanTest.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

        <!-- JavaBean 선언 -->

        <jsp:useBean id="beanTest" class="test.BeanTest" scope="page"/>

       

        <!-- beanTest라는 빈의 name속성을 KangWonDeok으로 설정 -->

        <jsp:setProperty name="beanTest" property="name" value="KangWonDeok"/>

       

        <!-- beanTest라는 빈의 name속성을 출력 -->

        <jsp:getProperty name="beanTest" property="name"/>

 

        <!-- beanTest라는 빈의 age속성을 26으로 설정 -->

        <jsp:setProperty name="beanTest" property="age" value="26"/>

       

        <!-- beanTest라는 빈의 age속성을 출력 -->

        <jsp:getProperty name="beanTest" property="age"/>

</body>

</html>

beanTest라는 빈의 name속성과 age속성을 각각 "KangWonDeok" , "26"으로 할당하고 출력 만약 클라이언트가 요청한 파라미터 값으로 값을 지정하고 싶다면 value속성 대신 param속성을 대신하여 사용하면 된다.


출력결과




자바 빈(Bean)이란?

- 웹 페이지를 구축하다보면 같은 기능을 갖지만 페이지 구성이 달라질 경우 같은 수고를 반복할 경우가 있다.

- 웹 페이지를 보다 효율적이고 생산적으로 작성하려면 코드를 재활용 할 수 있어야 한다.

- 웹 사이트를 개발할 때, JSP로 웹 페이지를 디자인 하고 내부적인 데이터 처리는 자바 빈으로 구현한다.

- 빈(Bean)은 재활용이 가능한 컴포넌트(Component)와 마찬가지로 소프트웨어를 부품화 한것이다.

- 소프트웨어도 부품화하여 개발하는데 이를 자바에서 빈(Bean)이라고 하고 일반적으로 컴포넌트라고 한다.

- 빈(Bean)은 한번 개발하고 나면 여러가지 페이지에서 동시에 가져다 사용할 수 있다.

- 빈(Bean)은 재사용 가능한 객체로서 대부분 데이터를 저장하는 역할을 한다.







-------------이렇게 된 이상 액션태그 공부로 간다-----------------------------



출처: http://gangzzang.tistory.com/entry/JSP-%EC%95%A1%EC%85%98%ED%83%9C%EA%B7%B8-jspuseBean



제가 공부하려고 쓰는 블로그니까 출처 밝히고 좀 가져다가 분석좀 하겠습니다


JSP 액션태그 - <jsp:useBean>

Java/Java EE 2013.09.22 16:02

1. 자바빈(JavaBean)

- 데이터를 표현하는 것을 목적으로하는 클래스이다.

- 데이터를 저장하는 필드, 데이터를 읽어올 때 사용하는 메서드, 값을 저장할 때 사용하는 메서드로 구성된다.


2. 자바빈 프로퍼티

- 프로퍼티는 자바빈에 저장되어 있는 값을 나타낸다.

- 메서드 이름을 사용해서 프로퍼티의 이름을 결정한다.

- 값을 설정하는 메서드는 프로퍼티 이름의 첫 글자를 대문자로 변환한 문자열 앞에 set을 붙인다.

- 값을 읽어오는 메서드는 프로퍼티 이름의 첫 글자를 대문자로 변환한 문자열 앞에 get을 붙인다.

- 프로퍼티의 타입이 boolean일 경우 get 대신에 is를 앞에 붙일 수도 있다.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.tistory.gangzzang;
 
public class Board {
    private String id;
    private String password;
    private String title;
    private String content;
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getContent() {
        return content;
    }
 
    public void setContent(String content) {
        this.content = content;
    }
 
} // Board


3. <jsp:useBean> 액션 태그

- <jsp:useBean id="빈이름" class="자바빈클래스이름" scope="범위"/>

- id : JSP 페이지에서 자바빈 객체에 접글할 때 사용할 이름을 명시한다.

- class : 패키지이름을 포함한 자바빈 클래스의 완전한 이름을 입력한다.

- scope : 자바빈 객체가 저장될 영역을 지정한다. (page, request, session, application 중 하나, 기본값은 page)

- JSP 페이지에서 사용할 자바빈 객체를 생성하고 지정한 영역에 저장을 한다.

- 지정한 영역에 이미 id 속성에서 지정한이름의 속성 값이 존재할 경우 객체를 새로 생성하지 않고 기존에 존재하는 객체를 그대로 사용한다.

- 각 scope의 영역별로 공유할 데이터를 쉽게 저장할 수 있다.


<!-- board.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:useBean id="b" scope="request" class="com.tistory.gangzzang.Board"/> <% b.setId("gz"); b.setPassword("1234"); b.setTitle("제목"); b.setContent("내용"); %> <jsp:forward page="boardUse.jsp"/>


<!-- boardUse.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:useBean id="b" scope="request" class="com.tistory.gangzzang.Board"/> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>게시판</title> </head> <body> 아이디 : <%= b.getId() %><br> 비밀번호 : <%= b.getPassword() %><br> 제목 : <%= b.getTitle() %><br> 내용 : <%= b.getContent() %><br> </body> </html> <!-- 실행결과 아이디 : gz 비밀번호 : 1234 제목 : 제목 내용 : 내용 -->



4. <jsp:setProperty> 액션 태그

- <jsp:useBean> 액션 태그를 사용해서 객체를 생성하면 <jsp:setProperty>액션 태그를 사용하여 자바빈 프로퍼티를 변경할 수 있다.

- <jsp:setProperty name="자바빈" property="이름" value="값" (parm="파라미터 값")/>

- name : 프로퍼티의 값을 변경할 자바빈 객체의 이름, <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용한다.

- property : 값을 지정할 프로퍼티 이름

- value : 프로퍼티의 값, 표현식을 사용할 수 있다.

- param : 파라미터의 값을 프로퍼티의 값으로 지정할 때 사용한다.

- property 속성의 값을 '*'로 지정하면 각각의 프로퍼티의 값을 같은 이름을 갖는 파라미터의 값을 설정한다. (폼에 입력한 값을 자바빈 객체에 담을 때 유용하다)


5. <jsp:getProperty> 액션 태그

- <jsp:useBean> 액션 태그를 사용해서 객체를 생성하면 <jsp:getProperty>액션 태그를 사용하여 자바빈 프로퍼티를 읽어올 수 있다.

- <jsp:getProperty name="자바빈이름" property="프로퍼티이름" />

- name : <jsp:useBean> 의 id 속성에서 지정한 자바빈 객체의 이름

- property : 출력할 프로퍼티의 이름


<!-- boardForm.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>게시판 입력 폼</title>
</head>
<body>
	<form action="boardproc.jsp" method="post">
		<table border="1" cellpadding="0" cellspacing="0">
			<tr>
				<th>
					아이디
				</th>
				<td>
					<input type="text" name="id" maxlength="12">
				</td>
			</tr>
			<tr>
				<th>
					비밀번호
				</th>
				<td>
					<input type="password" name="pwd" maxlength="15">
				</td>
			</tr>
			<tr>
				<th>
					제목
				</th>
				<td>
					<input type="text" name="title" maxlength="20">
				</td>
			</tr>
			<tr>
				<th>
					내용
				</th>
				<td>
					<textarea rows="25" cols="50" name="content"></textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="등록">
					<input type="reset" value="취소">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>


<!-- boardProc.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="b" class="com.tistory.gangzzang.Board"/> <jsp:setProperty name="b" property="*" /> <jsp:setProperty name="b" property="password" value="<%= b.getId() %>"/><!-- 비밀번호 숨기기위해서 아이디로 바꿔준다. --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>게시판</title> </head> <body> <table border="1" cellpadding="0" cellspacing="0"> <tr> <th> 아이디 </th> <td> <jsp:getProperty name="b" property="id"/> </td> </tr> <tr> <th> 비밀번호 </th> <td> <jsp:getProperty name="b" property="password"/> </td> </tr> <tr> <th> 제목 </th> <td> <jsp:getProperty name="b" property="title"/> </td> </tr> <tr> <th> 내용 </th> <td> <jsp:getProperty name="b" property="content"/> </td> </tr> </table> </body> </html>




7. 자바빈 프로퍼티 타입에 따른 값 매핑

 프로퍼티의 타입

 변환 방법 

 기본 값 

 bolean 또는 Boolean

 Boolean.valueOf(String)을 값으로 갖는다.

 false

 byte 또는 Byte

 Byte.valueOf(String)을 값으로 갖는다.

 (byte) 0

 short 또는 Short

 Short.valueOf(String)을 값으로 갖는다.

 (short) 0

 char 또는 Character

 입력한 값의 첫번째 글자를 값으로 갖는다.

 (char) 0

 int 또는 Integer

 Integer.valueOf(String)을 값으로 갖는다.

 0

 long 또는 Long

 Long.valueOf(String)을 값으로 갖는다.

 0L

 double 또는 Double

 Double.valueOf(String)을 값으로 갖는다.

 0.0

 float 또는 Float

 Float.valueOf(String)을 값으로 갖는다.

 0.0f



8. <jsp:useBean> 액션 태그의 사용 감소 이유

- MVC 구조에서는 로직을 자바 클래스에서 처리하고 결과를 JSP에서 보여주게 된다.

- 클래스에서는 <jsp:useBean> 액션 태그를 사용할 수 없기 때문에 사용할 일이 많지 않다.

- 또한 2.0 버전부터 표현 언어(Expression Language)가 추가되었는데 더 간결한 코드를 이용해서 프로퍼티 값을 읽어올 수 있다.

- 프레임워크와 같은 도입과 표현언어의 적용 등으로 사용 빈도가 저점 낮아지고 있다.










---------------------------------------------------------------오늘 사용한 코드 가져가야지

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


ssi.jsp


/////////////////////////////////////////////////////////////////


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>


<%@ page import = "memo.MemoVO, java.util.*" %>


<%

request.setCharacterEncoding("UTF-8");



int cnt = 0;

%>


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


list.jsp


/////////////////////////////////////////////////////////////////


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ include file ="./ssi.jsp" %>

<jsp:useBean id="dao" class="memo.MemoDAO"></jsp:useBean>



<%

Map map =new HashMap();

map.put("sno", 1);

map.put("eno", 5);

List<MemoVO> list = dao.list(map);




%>




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

* {

font-family: gulim;

font-size: 24px;

}

</style>

<script type="text/javascript">

function read(memono){

var url = "./read.jsp";

url = url + "?memono=" + memono;

location.href = url; //자바스크립트에서 -get 방식- 링크 보내기

}


</script>


</head>

<body>

<DIV

style='font-size: 24px; text-align: center; text-decoration: underline; margin-top: 10px; margin-bottom: 20px;'>

메모 목록</DIV>


<Table align="center" border='1px' cellpadding="10px" cellspacing="0px">

<TR>

<TH>번호</TH>

<TH>제목</TH>

<TH>날짜</TH>

<TH>조회수</TH>

</TR>


<%

if (list.size()==0) {

%>

<TR>

<TD colspan='4'>등록된 메모가 없습니다.</TD>

</TR>

<%

} // end if

else {

for(int i = 0; i<list.size(); i++){

MemoVO vo = list.get(i);

//list 안에서 rs.next로 MemoVO 에다가 저장해줬었음 (희미한 기억)

%>

<TR>

<TD><%=vo.getMemono()%></TD>

<TD><a href = "javascript:read('<%=vo.getMemono()%>')"><%=vo.getTitle() %></a></TD>

<TD><%=vo.getWdate()%></TD>

<TD><%=vo.getViewcnt()%></TD>


</TR>


<%

} //end for

} //end else

%>

</Table>


<DIV style='text-align: center; margin-top: 20px;'>

<input type="button" value='등록'

onclick="location.href='./createForm.jsp'">

</DIV>






</body>

</html>



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


read.jsp


/////////////////////////////////////////////////////////////////


<%@ page language="java" contentType="text/html; charset=UTF-8" 

 pageEncoding="UTF-8"%>

<%@ include file ="./ssi.jsp" %>


<jsp:useBean id="dao" class = "memo.MemoDAO" />


<%

int memono = Integer.parseInt(request.getParameter("memono"));

dao.upViewCnt(memono); //조회수 증가 

MemoVO vo = dao.read(memono); // 한건의 레코드 가져오기 

String content = vo.getContent().replaceAll("\r\n","<br>");


String wdate = vo.getWdate().substring(0, 10);

// substring(beginIndex, endIndex);

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" 

content="text/html; charset=UTF-8">


<title>Insert title here</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>



<script type = "text/javascript">

function updateM(){

var url = "updateForm.jsp";

url += "?memono=<%=memono%>";

location.href = url;

//

}


function deleteM(){

var url = "deleteForm.jsp";

url += "?memono=<%=memono%>";

location.href = url;

}


</script>


</head>

<body>

<DIV

style='font-size: 24px; text-align: center; 

text-decoration: underline; margin-top: 10px; 

margin-bottom: 20px;'>

조회</DIV>


<table align="center" border="1px" cellpadding="10px" 

cellspacing="0px">

<TR>

<TH>제목</TH>

<TD><%=vo.getTitle()%></TD>

</TR>

<TR>

<TH>내용</TH>

<TD><%=content%></TD> <!-- 내용하고 등록일은 그대로 냅두려고 -->

</TR>

<TR>

<TH>조회수</TH>

<TD><%=vo.getViewcnt()%></TD>

</TR>

<TR>

<TH>등록일</TH>

<TD><%=wdate%></TD>

</TR>

</table>


<DIV style='text-align: center; margin-top: 20px'>

<input type='button' value='등록'

onclick="location.href='./createForm.jsp'">

<input type='button' value='목록' 

onclick="location.href='./list.jsp'">

<input type='button' value='수정' 

onclick="updateM()">

<!-- on으롷 시작하는 함수는 그냥 자바스크립트 취급이라서

< % % > 안써도 됨

-->

 

<input type='button' value='삭제' 

onclick="deleteM()"> 

 

</DIV>







</body>

</html>



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


createForm.jsp


/////////////////////////////////////////////////////////////////


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
*{
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style="text-align: center; margin-top: 20px; margin-bottom: 20px;"> 등록 </DIV>
<form name="frm" method="POST" action="./createProc.jsp">
<table width="50%" align="center" border="1">
<tr>
<th>제목</th>
<td><input type = 'text' name = 'title' size = '30' value = '화요일'></td>
</tr>
<tr>
<th>내용</th>
<td><textarea name = 'content' rows = '10' cols = '30'>SQL 수업 </textarea></td>
</tr>
</table>
<div style="text-align: center; margin-top: 20px; margin-bottom: 20px;"><input type = "submit" value="전송"></div>
</form>

</body>
</html><%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
*{
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style="text-align: center; margin-top: 20px; margin-bottom: 20px;"> 등록 </DIV>
<form name="frm" method="POST" action="./createProc.jsp">
<table width="50%" align="center" border="1">
<tr>
<th>제목</th>
<td><input type = 'text' name = 'title' size = '30' value = '화요일'></td>
</tr>
<tr>
<th>내용</th>
<td><textarea name = 'content' rows = '10' cols = '30'>SQL 수업 </textarea></td>
</tr>
</table>
<div style="text-align: center; margin-top: 20px; margin-bottom: 20px;"><input type = "submit" value="전송"></div>
</form>

</body>
</html>


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


createProc.jsp


/////////////////////////////////////////////////////////////////


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./ssi.jsp" %>
<jsp:useBean id = "dao" class ="memo.MemoDAO" ></jsp:useBean>
<jsp:useBean id = "vo" class = "memo.MemoVO"> </jsp:useBean>
<jsp:setProperty property="*" name="vo"/>

<%

cnt = dao.create(vo);

%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style='font-size: 24px; text-align: center; margin-top: 100px;'>
<%
if (cnt == 1) {
out.println("메모를 등록 했습니다.");
} else {
out.println("메모 등록에 실패했습니다.");
}
%>
<br> <input type='button' value='계속 등록'
onclick="location.href='./createForm.jsp'"> <input
type='button' value='목록' onclick="location.href='./list.jsp'">
</DIV>

</body>
</html>


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


deleteForm.jsp


/////////////////////////////////////////////////////////////////


<%@ page contentType="text/html; charset=UTF-8"%>

<% request.setCharacterEncoding("utf-8"); %>

<%
int memono = Integer.parseInt(request.getParameter("memono"));
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style='text-align: center; margin-top: 20px; margin-bottom: 20px;'>삭제
확인</DIV>

<Form name='frm' method='POST' action='./deleteProc.jsp'>
<input type='hidden' name='memono' size='30' value='<%=memono %>'>

<DIV
style='text-align: center; margin-top: 20px; margin-bottom: 20px;'>
삭제를 하면 복구 될 수 없습니다.<br>
<br> 삭제하시려면 삭제 처리 버튼을 클릭하세요.<br>
<br> 취소는 '목록' 버튼을 누르세요. <br>
<br> <input type='submit' value='삭제 처리'> <input
type='button' value='목록' onclick="location.href='./list.jsp'">
</DIV>
</Form>
<!-- 성생님이 굳이 뽐으로 안써도 된다 구랬는대 선생님이 이렇게 만드럿슴니다 
저는 전ㅅㅎㅕㅑ 쉽지가 안습니다 씪씪
그 리절트셋이 다시 고통받고이습니다
그리고 선언문이 머리가 아픔미다
선언문이 아니라표현식
으아아ㅏ 왜 이름도 이러ㅏㅎ게 미낭낭
ㄴㅁㅇㄴㅁㅇㅁㄴ
-->

</body>
</html>


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


deleteProc.jsp


/////////////////////////////////////////////////////////////////


<%@ page contentType="text/html; charset=UTF-8"%>

<%@ include file = "./ssi.jsp" %>

<jsp:useBean id="dao" class = "memo.MemoDAO" />
<jsp:useBean id="vo" class = "memo.MemoVO" />
<jsp:setProperty property="*" name="vo"/>

<%
int memono = Integer.parseInt(request.getParameter("memono"));
 
// String url = "jdbc:oracle:thin:@172.16.12.100:1521:XE";

cnt = dao.delete(memono);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style='font-size: 24px; text-align: center; margin-top: 100px;'>
<%
  if (cnt == 1){
    out.println("메모를 삭제 했습니다.");
  }else{
    out.println("메모 삭제에 실패했습니다.");
  }
  %>
<br> <input type='button' value='목록'
onclick="location.href='./list.jsp'">
</DIV>

</body>
</html>


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


updateForm.jsp


/////////////////////////////////////////////////////////////////


<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./ssi.jsp" %>
<jsp:useBean id="dao" class = "memo.MemoDAO"></jsp:useBean>

<%
int memono = Integer.parseInt(request.getParameter("memono"));

MemoVO vo = dao.read(memono);
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style="text-align: center; margin-top: 20px; margin-bottom: 20px;">
수정</DIV>

<form name="frm" method="POST" action="./updateProc.jsp">

 
 <input type='hidden' name='memono' size='30' value='<%= memono %>'>
<table width="50%" align="center" border="1">
<tr>
<th>제목</th>
<td><input type='text' name='title' size='30'
value='<%=vo.getTitle()%>'></td>
</tr>

<tr>
<th>내용</th>
<td><textarea name='content' rows='10' cols='30'><%=vo.getContent()%></textarea></td>
</tr>

</table>

<div
style="text-align: center; margin-top: 20px; margin-bottom: 20px;">
<input type="submit" value="전송">
</div>
</form>

</body>
</html>


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


updateProc.jsp


/////////////////////////////////////////////////////////////////


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./ssi.jsp" %>
<jsp:useBean id="dao" class = "memo.MemoDAO" />
<jsp:useBean id="vo" class = "memo.MemoVO" />
<jsp:setProperty property="*" name="vo"/>

<%
cnt = dao.update(vo);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

</head>
<body>

<DIV style='font-size: 24px; text-align: center; margin-top: 100px;'>
<%
if (cnt == 1) {
out.println("메모를 수정 했습니다.");
} else {
out.println("메모 수정에 실패했습니다.");
}
%>
<br> <input type='button' value='계속 등록'
onclick="location.href='./createForm.jsp'"> <input
type='button' value='목록' onclick="location.href='./list.jsp'">
</DIV>

</body>
</html>


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


MemoDAO.java


/////////////////////////////////////////////////////////////////


package memo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class MemoDAO{
public void upViewCnt(int memono){
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
sql.append(" UPDATE memo  ");
sql.append(" SET viewcnt = viewcnt + 1 ");
sql.append(" WHERE memono = ? ");
try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, memono);
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBClose.close(con, pstmt);
}
}

public List<MemoVO> list(Map map) {
List<MemoVO> list = new ArrayList<MemoVO>();
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
int sno = (Integer) map.get("sno");
int eno = (Integer) map.get("eno");

StringBuffer sql = new StringBuffer();

sql.append(" SELECT memono, title, viewcnt, to_char(wdate, 'yyyy-mm-dd') wdate, r ");
sql.append(" FROM( ");
sql.append(" SELECT memono, title, viewcnt, wdate, rownum r ");
sql.append(" FROM( ");
sql.append(" SELECT memono, title, viewcnt, wdate ");
sql.append(" FROM memo ");
sql.append(" ORDER BY memono DESC ");
sql.append(" ) ");
sql.append(" ) ");
sql.append(" WHERE r >= ? and r <= ?  ");

try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, sno);
pstmt.setInt(2, eno);

rs = pstmt.executeQuery();

while (rs.next()) {
MemoVO vo = new MemoVO();
vo.setMemono(rs.getInt("memono"));
vo.setTitle(rs.getString("title"));
vo.setViewcnt(rs.getInt("viewcnt"));
vo.setWdate(rs.getString("wdate"));

list.add(vo);
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DBClose.close(con, pstmt, rs);
}

return list;

}

public int delete(int memono) {
int cnt = 0;

Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();

sql.append(" DELETE FROM memo ");
sql.append(" WHERE memono = ? ");

try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, memono);// ★

cnt = pstmt.executeUpdate();

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBClose.close(con, pstmt);
}

return cnt;
}

public int update(MemoVO vo) {
int cnt = 0;
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();

sql.append(" UPDATE memo ");
sql.append(" SET title = ?, ");
sql.append(" content = ? ");
sql.append(" WHERE memono = ? ");

try {
pstmt = con.prepareStatement(sql.toString());

pstmt.setString(1, vo.getTitle());
pstmt.setString(2, vo.getContent());
pstmt.setInt(3, vo.getMemono());

cnt = pstmt.executeUpdate();

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBClose.close(con, pstmt);
}

return cnt;
}

public MemoVO read(int memono) {
MemoVO vo = null;
Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer();

sql.append(" SELECT * from memo ");
sql.append(" where memono = ? ");

try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, memono);

rs = pstmt.executeQuery();

if (rs.next()) {
vo = new MemoVO();
vo.setMemono(rs.getInt("memono"));
vo.setTitle(rs.getString("title"));
vo.setContent(rs.getString("content"));
vo.setViewcnt(rs.getInt("viewcnt"));
vo.setWdate(rs.getString("wdate"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBClose.close(con, pstmt, rs);

}

return vo;
}

public int create(MemoVO vo) {
int cnt = 0;

Connection con = DBOpen.getConnection();
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();

sql.append(" insert into memo(memono, title, content, wdate)  ");
sql.append(" values(memo_seq.nextval,?,?,sysdate) ");

try {
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, vo.getTitle());
pstmt.setString(2, vo.getContent());

cnt = pstmt.executeUpdate();

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBClose.close(con, pstmt);
}

return cnt;
}

}


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


MemoVO.java


/////////////////////////////////////////////////////////////////


package memo;

public class MemoVO {

private int memono;
private String title;
private String content;
private String wdate;
private int viewcnt;

public int getMemono() {
return memono;
}

public void setMemono(int memono) {
this.memono = memono;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getWdate() {
return wdate;
}

public void setWdate(String wdate) {
this.wdate = wdate;
}

public int getViewcnt() {
return viewcnt;
}

public void setViewcnt(int viewcnt) {
this.viewcnt = viewcnt;
}

}


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




/////////////////////////////////////////////////////////////////



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




/////////////////////////////////////////////////////////////////

































 




5. 수업

진도: 

hw: 


6. 할것


map 복습 ㅋㅋㅋㅋ


Map map = new HashMap();

map.put("Object 중 key값", "Object 중 value"); -> Object로 저장된다





Map


-컬렉션에 포함되어져 있지 않은 그냥 맵구조인것

1) Key 와 Value 한쌍

-HaspMap, Hashtable']

-put메소드로 입력한다.




Int - (Integer) - Integer.ParseInt 차이 ㅋㅋㅋㅋ


문자열 -> 정수형 변경시

"100" String -> int

는 Integer.parseInt("100")


map.put("key", 100) -> Object - 박싱 & 업캐스팅


오브젝트 -> 꺼내올 때

100 <- (Integer)map.get("key") - 자식 타입으로 다운캐스팅! - 



박싱 언박싱 ㅋㅋㅋㅋㅋㅋㅋㅋ


아오 다 헷갈리네

기본형을 감싸서 객체 타입으로 만들어주는 wrapper 클래스들 - (INTEGER) 이런애들



'Programming' 카테고리의 다른 글

160414: 23회차  (0) 2016.04.14
160412: 22회차  (0) 2016.04.12
160407: 19회차  (1) 2016.04.07
160406: 18회차  (3) 2016.04.06
160405: 17회차  (3) 2016.04.05
Posted by DAVID

160407: 19회차

Programming 2016. 4. 7. 12:31

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


오늘 인터넷이 짱 느려서 걱정스럽지만 ㄱㄱ


오늘도 씨퀀스를 쓰는군

 넥스트발... **...


세로드립이 아닙니다

그냥 볼드를 주고 싶어서 준 것


createForm.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

*{

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV style="text-align: center; margin-top: 20px; margin-bottom: 20px;"> 등록 </DIV>

<form name="frm" method="POST" action="./createProc.jsp">

<table width="50%" align="center" border="1">

<tr>

<th>제목</th>

<td><input type = 'text' name = 'title' size = '30' value = '화요일'></td>

</tr>

<tr>

<th>내용</th>

<td><textarea name = 'content' rows = '10' cols = '30'>SQL 수업 </textarea></td>

</tr>

</table>

<div style="text-align: center; margin-top: 20px; margin-bottom: 20px;"><input type = "submit" value="전송"></div>

</form>


</body>

</html>


요기서 뽀인트는 value = '값값' 써주면 입력한 밸류값이 디폴트로 텍스트창에 출력됩니다

얘는 플레이스홀더 같은 게 아니라 이거 지우고 써줘야함미다


그러니까 사용자 편의를 위해서라면 입력할 때는 플레이스홀더를 씁시다.


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


여기서 잠시 킵


createProc.jsp


<%@page import="java.sql.PreparedStatement"%>

<%@page import="java.sql.Connection"%>

<%@page import="java.sql.DriverManager"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("UTF-8"); 

String title = request.getParameter("title");

String content = request.getParameter("content");


String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

String id = "soldesk";

String pass = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

/*forName이 뭐냐?★ - ㅋㅋㅋㅋㅋ 복습하기.. 드라이버 올리는 역할을 하는거라는뎅*/

//class.forname = 메모리에 올리는것 :> 이래.. 내가썼네

// 드라이버명을 명시하려고 쓰는 것 

// 얘를 1차적으로 해줘야 애들이 뭐로 무엇을 어디에 넣냐고! 이런 소리 안함

// 야! 500워닝 소리 안들리게 해라! 같은 것 - 몇번인진 모르는데 그냥 500이 땡겨서


// 어쨌든 이 클래스를 찾아서 메모리에 올리는 행위 입니다

//근뎅 이 프로젝트가 웹 다이나믹 프로젝트라서

// 저렇게 해줘야 된대영 실행하려면 -.-)



Connection con = DriverManager.getConnection(url, id, pass);

PreparedStatement pstmt = null;

//위에 애들 임뽀트를 넘나 편하게 했습니다 이클립스만세!


String sql = null;

int cnt = 0; //실행했을 때 필요한 변수를 선언해놓음


sql = "INSERT INTO memo(memono, title, content, wdate) "; //요기 한칸 띄워줘야 됨...

sql += "VALUES(memo_seq.nextval, ?, ?, sysdate)";

// insert into 아니면 values 같이 소문자로 써도 됨

// 근데 파라메타 아니면 대문자로 쓰는게 보기가 좋자나...

//이뻐야합니다 (필수)

// 난 왜이렇게 시퀀스가 싫읋까

// 시퀀스를 주깁시다 우리의 원수

// 씨퀀쑤!!!!!!!!! ㅆㄲㅆ! 

// 그의 친구 넥스트발도 주깁시다!

// 킬! 터미네이트!


//어근뎅 쓰트링인데도 막 추가해서 넣네 -.-);;;;;


pstmt = con.prepareStatement(sql);

pstmt.setString(1, title);

pstmt.setString(2, content);

//이거 나온 부분 복습하귀... 엑쓰큐트 업데이트가 희미한 기억이다

// 이런 걸 하는 패턴은 기억나는데 메소드명이 기억안나 OTL...


cnt = pstmt.executeUpdate();


%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

뿌록

</body>

</html>


<!-- 

String url = "jdbc:oracle:thin:127.0.0.1:1521:XE";

아니면

String url = "jdbc:oracle:thin:@localhost:1521:XE";

로 쓰면 됩니다

 -->





쉬는 시간인데 계속 한다!

열정강의!


그리고 발 저리다!



http://aroundck.tistory.com/11


이거 String + 로 만들 때 문제점 쓴건뎅


+ 로 연결하여 assign 하게 된다면 + 하는 String 의 갯수가 늘어나면 늘어날수록
GC 대상 object 수도 함께 늘어나고 그만큼 memory 할당도 추가로
 늘어나게 된다는 것입니다.


하지만 이 문제는 query 문을 만드는데서 많이 발생합니다.
Query Operation은 매우 무거운 작업입니다.
복잡한 Database 를 쓰는 경우, 여러번의 query 를 통해 결과를 도출하는 것은 엄청난 시간을 소비하기도 합니다.
따라서 가능한 query 횟수를 최소화 하여 원하는 결과를 뽑아내는 작업이 필요하며 이 과정에서
String + operation이 엄청나게 발생하곤 합니다.

따라서 메모리의 소모량이 엄청나게 되어 버리는 것이죠.



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


쁘록은 파워복붙


<%@page import="java.sql.PreparedStatement"%>

<%@page import="java.sql.Connection"%>

<%@page import="java.sql.DriverManager"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");


String title = request.getParameter("title");

String content = request.getParameter("content");


String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

String id = "soldesk";

String pass = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

/*forName이 뭐냐?★ - ㅋㅋㅋㅋㅋ 복습하기.. 드라이버 올리는 역할을 하는거라는뎅*/

//class.forname = 메모리에 올리는것 :> 이래.. 내가썼네

// 드라이버명을 명시하려고 쓰는 것 

// 얘를 1차적으로 해줘야 애들이 뭐로 무엇을 어디에 넣냐고! 이런 소리 안함

// 야! 500워닝 소리 안들리게 해라! 같은 것 - 몇번인진 모르는데 그냥 500이 땡겨서


// 어쨌든 이 클래스를 찾아서 메모리에 올리는 행위 입니다

//근뎅 이 프로젝트가 웹 다이나믹 프로젝트라서

// 저렇게 해줘야 된대영 실행하려면 -.-)


Connection con = DriverManager.getConnection(url, id, pass);

PreparedStatement pstmt = null;

//위에 애들 임뽀트를 넘나 편하게 했습니다 이클립스만세!


String sql = null;

int cnt = 0; //실행했을 때 필요한 변수를 선언해놓음


sql = "INSERT INTO memo(memono, title, content, wdate) "; //요기 한칸 띄워줘야 됨...

sql += "VALUES(memo_seq.nextval, ?, ?, sysdate)";

// insert into 아니면 values 같이 소문자로 써도 됨

// 근데 파라메타 아니면 대문자로 쓰는게 보기가 좋자나...

//이뻐야합니다 (필수)

// 난 왜이렇게 시퀀스가 싫읋까

// 시퀀스를 주깁시다 우리의 원수

// 씨퀀쑤!!!!!!!!! ㅆㄲㅆ! 

// 그의 친구 넥스트발도 주깁시다!

// 킬! 터미네이트!


//어근뎅 쓰트링인데도 막 추가해서 넣네 -.-);;;;;


pstmt = con.prepareStatement(sql);

pstmt.setString(1, title);

pstmt.setString(2, content);

//이거 나온 부분 복습하귀... 엑쓰큐트 업데이트가 희미한 기억이다

// 이런 걸 하는 패턴은 기억나는데 메소드명이 기억안나 OTL...


cnt = pstmt.executeUpdate();

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV style='font-size: 24px; text-align: center; margin-top: 100px;'>

<%

if (cnt == 1) {

out.println("메모를 등록 했습니다.");

} else {

out.println("메모 등록에 실패했습니다.");

}

%>

<br> <input type='button' value='계속 등록'

onclick="location.href='./createForm.jsp'"> <input

type='button' value='목록' onclick="location.href='./list.jsp'">

</DIV>


</body>

</html>


<%

try {

if (pstmt != null) {

pstmt.close();


}

} catch (Exception e) {


}


try {

if (con != null) {

con.close();

}

} catch (Exception e) {


}

%>

<!-- 

String url = "jdbc:oracle:thin:127.0.0.1:1521:XE";

아니면

String url = "jdbc:oracle:thin:@localhost:1521:XE";

로 쓰면 됩니다

 -->



얘의 친구 table.jsp도 파워복붙


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%><% request.setCharacterEncoding("utf-8"); %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV style='text-align: center;'>테이블 실습</DIV>

<TABLE align='center' border='1' cellpadding="10px" cellspacing="0px">

★ 쎌 패딩하고 쎌 쓰패이싱 ...

보더값 조절하고 어쩌구 저쩌구 임

물론 이따 찾아볼 것... -_-);;


뜻을 보면 셀 스페이싱 - 셀 과 셀 간의 간격

셀 패딩 - 컨텐츠와 셀 간의 간격



<TR>

<TH>번호</TH>

<TH>제목</TH>

<TH>내용</TH>

</TR>

<TR>

<TD align='center'>1</TD>

<TD align='center'>월요일</TD>

<TD>첫눈</TD>

</TR>

<TR>

<TD align='center'>2</TD>

<TD align='center'>화요일</TD>

<TD>메모장 제작</TD>

</TR>

<TR>

<TD align='center'>3</TD>

<TD align='center'>수요일</TD>

<TD>메모장 테스트</TD>

</TR>

</TABLE>


</body>

</html>


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

테이블2 도 파워복붙

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8"); %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<TABLE align='center' border="1" cellpadding="20px" cellspacing="0px">
<TR>
<TH>1</TH>
<TH>2</TH>
<TH>3</TH>
<TH>4</TH>
<TH>5</TH>
</TR>
<TR>
<TH colspan='2' bgcolor="#FFFF00" align='center'>1 2</TH> - 첫번째 + 두번째
<TH>3</TH>
<TH>4</TH>
<TH>5</TH>
</TR>
<TR>
<TH>1</TH>
<TH colspan='2' bgcolor="#FFFF00" align='center'>2 3</TH> - 두번째 + 세번쨰
<TH>4</TH>
<TH>5</TH>
</TR>
<TR>
<TH>1</TH>
<TH>2</TH>
<TH colspan='2' bgcolor="#FFFF00" align='center'>3 4</TH> - 세번째 + 네번째
<TH>5</TH>
</TR>
<TR>
<TH>1</TH>
<TH>2</TH>
<TH>3</TH>
<TH colspan='2' bgcolor="#FFFF00" align='center'>4 5</TH> - 네번째 + 다섯번째
</TR>
<TR>
<TH colspan='5' bgcolor="#FFFF00" align='center'>1 2 3 4 5</TH> - 난전부
</TR>


</TABLE>
</body>
</html>

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


이제 그래프같이 생긴 테이블3 파워복붙


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("utf-8"); %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<TABLE align='center' border="0" cellpadding="20px" cellspacing="5px">

<TR>

<TH></TH>

<TH></TH>

<TH></TH>

<TH></TH>

<TH></TH>

<TH rowspan='5' bgcolor='#AAFFAA'>6%</TH> - 맨 위에서 5번째 밑으로 병합 ㅇㅇ  아 -.-



</TR>

<TR>

<TH></TH>

<TH></TH>

<TH></TH>

<TH></TH>

<TH rowspan='4' bgcolor='#AAFFAA'>5%</TH>

</TR>

<TR>

<TH></TH>

<TH></TH>

<TH rowspan='3' bgcolor='#AAFFAA'>3%</TH>

<TH></TH>


</TR>

<TR>

<TH></TH>

<TH rowspan='2' bgcolor='#AAFFAA'>2%</TH>

<TH rowspan='2' bgcolor='#AAFFAA'>4%</TH> // 위에 애가 3을 먹어서 2  -> 4임 -.-) 췻

//이거 고통받으면 border 고쳐보고 확인해보면 쉬움맨

</TR>

<TR>

<TH rowspan='1' bgcolor='#AAFFAA'>1%</TH>

</TR>


</TABLE>

</body>

</html>




-------------------------12시!!! :>


리스트쩜 제이에스삐


<%@page import="java.sql.ResultSet"%>

<%@page import="java.sql.PreparedStatement"%>

<%@page import="java.sql.Connection"%>

<%@page import="java.sql.DriverManager"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>


<%

request.setCharacterEncoding("UTF-8");

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

//url 오타 조심


String id = "soldesk";

String password = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, id, password);

PreparedStatement pstmt = null;


ResultSet rs = null;

String sql = null;

int cnt = 0;


sql = "SELECT memono, title, content, wdate, viewcnt ";

sql += "FROM memo ";

sql += "ORDER BY memono DESC ";


pstmt = con.prepareStatement(sql);


rs = pstmt.executeQuery();

//'ㅅ'

%>




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

* {

font-family: gulim;

font-size: 24px;

}

</style>


</head>

<body>

<DIV

style='font-size: 24px; text-align: center; text-decoration: underline; margin-top: 10px; margin-bottom: 20px;'>

메모 목록</DIV>


<Table align="center" border='1px' cellpadding="10px" cellspacing="0px">

<TR>

<TH>번호</TH>

<TH>제목</TH>

<TH>내용</TH>

<TH>조회수</TH>

</TR>


<%

if (rs.next() == false) {

%>

<TR>

<TD colspan='4'>등록된 메모가 없습니다.</TD>

</TR>

<%

} // end if

else {

do {

%>

<TR>

<TD><%=rs.getInt("memono")%></TD>

<TD><%=rs.getString("title")%></TD>

<TD><%=rs.getString("content")%></TD>

<TD><%=rs.getInt("viewcnt")%></TD>


</TR>


<%

} //end do

while (rs.next() == true);

} //end else

%>

</Table>


<DIV style='text-align: center; margin-top: 20px;'>

<input type="button" value='등록'

onclick="location.href='./createForm.jsp'">

</DIV>






</body>

</html>

<%

try {

if (rs != null) {

rs.close();

}

} catch (Exception e) {

}


try {

if (pstmt != null)

pstmt.close();

} catch (Exception e) {

}


try {

if (con != null)

con.close();

} catch (Exception e) {

}

%>



이게 그러니까

createForm - db에 등록하는 것

createProc - db에 계속 등록 or 목록 선택 가능한 것

list - 리스트로 출력



남의 컨텐츠를 보고 베낀 느낌이라 - 배우는 것

별로 기분이 안좋습니다




이제 수정할거임


<%@page import="java.sql.ResultSet"%>

<%@page import="java.sql.PreparedStatement"%>

<%@page import="java.sql.Connection"%>

<%@page import="java.sql.DriverManager"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>


<%

request.setCharacterEncoding("UTF-8");

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

//url 오타 조심


String id = "soldesk";

String password = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, id, password);

PreparedStatement pstmt = null;


ResultSet rs = null;

String sql = null;

int cnt = 0;


sql = "SELECT memono, title, wdate, viewcnt ";

sql += "FROM memo ";

sql += "ORDER BY memono DESC ";


pstmt = con.prepareStatement(sql);


rs = pstmt.executeQuery();

//'ㅅ'

%>




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

* {

font-family: gulim;

font-size: 24px;

}

</style>


</head>

<body>

<DIV

style='font-size: 24px; text-align: center; text-decoration: underline; margin-top: 10px; margin-bottom: 20px;'>

메모 목록</DIV>


<Table align="center" border='1px' cellpadding="10px" cellspacing="0px">

<TR>

<TH>번호</TH>

<TH>제목</TH>

<TH>날짜</TH>

<TH>조회수</TH>

</TR>


<%

if (rs.next() == false) {

%>

<TR>

<TD colspan='4'>등록된 메모가 없습니다.</TD>

</TR>

<%

} // end if

else {

do {

%>

<TR>

<TD><%=rs.getInt("memono")%></TD>

<TD><%=rs.getString("title")%></TD>

<TD><%=rs.getString("wdate")%></TD>

<TD><%=rs.getInt("viewcnt")%></TD>


</TR>


<%

} //end do

while (rs.next() == true);

} //end else

%>

</Table>


<DIV style='text-align: center; margin-top: 20px;'>

<input type="button" value='등록'

onclick="location.href='./createForm.jsp'">

</DIV>






</body>

</html>

<%

try {

if (rs != null) {

rs.close();

}

} catch (Exception e) {

}


try {

if (pstmt != null)

pstmt.close();

} catch (Exception e) {

}


try {

if (con != null)

con.close();

} catch (Exception e) {

}

%>


이러면 날짜가 시분초까지 나오니까 그냥 날짜만 보여주고 싶으면


1. db에서 할 경우

2. 그냥 가져온 걸 출력 코드에서 수정할 경우




SELECT memono, title, content, to_char(wdate, 'yyyy-dd-mm'), viewcnt 

FROM memo  

ORDER BY memono ASC; 

 

sql문을 고치는 경우임 이건



sql = "SELECT memono, title, to_char(wdate, 'yyyy-dd-mm') wdate,  viewcnt ";

sql += " FROM memo ";

sql += "ORDER BY memono DESC ";


이건 출력 코드를 수정하는 건데

to_char(wdate, 'yyyy-dd-mm') wdate,  <- 이게 한 컬럼 -.-




-----------------------------12시 48분!!

이제 42분만 있으면 타코야키!! :>


아 진짜 제일 기쁘다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

학원 와서 제일 기쁜 순간임


이제 35분만ㅇ ㅣㅆ으면 타코얔ㅋ키킼


에이씨 이거 그냥 원래 오류 있는 코드였음 

read.jsp


<%@page import="java.sql.*"%>


<%@ page language="java" contentType="text/html; charset=UTF-8" 

 pageEncoding="UTF-8"%>



<%

request.setCharacterEncoding("UTF-8");


int memono = Integer.parseInt(request.getParameter("memono"));

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

String id = "soldesk";

String pass = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, id, pass);

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = null;

int cnt = 0;


// sql = "Select memono, title, content, to_char(wdate, 'yyyy-dd-mm') wdate, viewcnt";

sql = "select * ";

sql += "From memo Where memono = ? ";


pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);


rs = pstmt.executeQuery();

String content = null;

String wdate = null;


if (rs.next()) {

content = rs.getString("content");

//얘만 가져온 이유는 변환하려고!

//뭐냐면 엔터나오면 라인스킵해주려고 :>

content = content.replaceAll("\r\n", "<br>");


wdate = rs.getString("wdate").substring(0, 10);

// substring(beginIndex, endIndex);

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" 

content="text/html; charset=UTF-8">


<title>Insert title here</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV

style='font-size: 24px; text-align: center; 

text-decoration: underline; margin-top: 10px; 

margin-bottom: 20px;'>

조회</DIV>


<table align="center" border="1px" cellpadding="10px" 

cellspacing="0px">

<TR>

<TH>제목</TH>

<TD><%=rs.getString("title")%></TD>

</TR>

<TR>

<TH>내용</TH>

<TD><%=content%></TD>

</TR>

<TR>

<TH>조회수</TH>

<TD><%=rs.getString("viewcnt")%></TD>

</TR>

<TR>

<TH>등록일</TH>

<TD><%=rs.getString("wdate")%></TD>

</TR>

</table>


<DIV style='text-align: center; margin-top: 20px'>

<input type='button' value='등록'

onclick="location.href='./createForm.jsp'">

<input type='button' value='목록' 

onclick="location.href='./list.jsp'">

</DIV>







</body>

</html>


<%

} //일부러 위에서 안 닫고 열어놓은 거인가봄


try {

if (rs != null) {

rs.close();

}

} catch (Exception e) {


}


try {

if (pstmt != null) {

pstmt.close();


}

} catch (Exception e) {


}


try {

if (con != null) {

con.close();

}

} catch (Exception e) {


}

%>



이런 코드는

http://localhost:8000/memo/memo/read.jsp?memono=3

이렇게 파라미터 넣어줘야 되니까 구졌습니다

그래서 다른 방법으로 할 겁니다


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

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%
request.setCharacterEncoding("UTF-8");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
//url 오타 조심

String id = "soldesk";
String password = "1234";

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, id, password);
PreparedStatement pstmt = null;

ResultSet rs = null;
String sql = null;
int cnt = 0;

sql = "SELECT memono, title, to_char(wdate, 'yyyy-dd-mm') wdate,  viewcnt ";
sql += " FROM memo ";
sql += "ORDER BY memono DESC ";

pstmt = con.prepareStatement(sql);

rs = pstmt.executeQuery();
//'ㅅ'
%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type="text/javascript">
function read(memono){
var url = "./read.jsp";
url = url + "?memono=" + memono;
//띄어쓰기 주의 -_-) ? memo = (x) ?memo= (o)
location.href = url; //자바스크립트에서 -get 방식- 링크 보내기
}

</script>

</head>
<body>
<DIV
style='font-size: 24px; text-align: center; text-decoration: underline; margin-top: 10px; margin-bottom: 20px;'>
메모 목록</DIV>

<Table align="center" border='1px' cellpadding="10px" cellspacing="0px">
<TR>
<TH>번호</TH>
<TH>제목</TH>
<TH>날짜</TH>
<TH>조회수</TH>
</TR>

<%
if (rs.next() == false) {
%>
<TR>
<TD colspan='4'>등록된 메모가 없습니다.</TD>
</TR>
<%
} // end if
else {
do {
%>
<TR>
<TD><%=rs.getInt("memono")%></TD>
<TD><a href = "javascript:read('<%=rs.getInt("memono")%>')"><%=rs.getString("title")%></a></TD>
<!-- 자바 스크립트 호출시 써줘야함 -->
<!--  "javascript:read('')" 요안에 표현식까지 다 복사해서 넣어야함
-->
<TD><%=rs.getString("wdate")%></TD>
<TD><%=rs.getInt("viewcnt")%></TD>

</TR>

<%
} //end do
while (rs.next() == true);
} //end else
%>
</Table>

<DIV style='text-align: center; margin-top: 20px;'>
<input type="button" value='등록'
onclick="location.href='./createForm.jsp'">
</DIV>





</body>
</html>
<%
try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {
}

try {
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}

try {
if (con != null)
con.close();
} catch (Exception e) {
}
%>


리쓰트 jsp 고쳤습니다

이거 짱 복잡하넼ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


-----------------------------------------------타코야키 먹었음 (온화)


이제 조회수를 추가해봅시다.


sql = "update memo ";

sql += "set viewcnt = viewcnt + 1 ";

sql += "where memono = ? ";

pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);

pstmt.executeUpdate();

// 조회수 증가하시는것

어 이거 read.jsp 임


<%@page import="java.sql.*"%>


<%@ page language="java" contentType="text/html; charset=UTF-8" 

 pageEncoding="UTF-8"%>



<%

request.setCharacterEncoding("UTF-8");


int memono = Integer.parseInt(request.getParameter("memono"));

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

String id = "soldesk";

String pass = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, id, pass);

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = null;

int cnt = 0;


sql = "update memo ";

sql += "set viewcnt = viewcnt + 1 ";

sql += "where memono = ? ";

pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);

pstmt.executeUpdate();

// 조회수 증가하시는것

sql = "select * ";

sql += "From memo Where memono = ? ";


pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);


rs = pstmt.executeQuery();

String content = null;

String wdate = null;


if (rs.next()) {

content = rs.getString("content");

//얘만 가져온 이유는 변환하려고!

//뭐냐면 엔터나오면 라인스킵해주려고 :>

content = content.replaceAll("\r\n", "<br>");


wdate = rs.getString("wdate").substring(0, 10);

// substring(beginIndex, endIndex);

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" 

content="text/html; charset=UTF-8">


<title>Insert title here</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV

style='font-size: 24px; text-align: center; 

text-decoration: underline; margin-top: 10px; 

margin-bottom: 20px;'>

조회</DIV>


<table align="center" border="1px" cellpadding="10px" 

cellspacing="0px">

<TR>

<TH>제목</TH>

<TD><%=rs.getString("title")%></TD>

</TR>

<TR>

<TH>내용</TH>

<TD><%=content%></TD>

</TR>

<TR>

<TH>조회수</TH>

<TD><%=rs.getString("viewcnt")%></TD>

</TR>

<TR>

<TH>등록일</TH>

<TD><%=rs.getString("wdate")%></TD>

</TR>

</table>


<DIV style='text-align: center; margin-top: 20px'>

<input type='button' value='등록'

onclick="location.href='./createForm.jsp'">

<input type='button' value='목록' 

onclick="location.href='./list.jsp'">

</DIV>







</body>

</html>


<%

} //일부러 위에서 안 닫고 열어놓은 거인가봄


try {

if (rs != null) {

rs.close();

}

} catch (Exception e) {


}


try {

if (pstmt != null) {

pstmt.close();


}

} catch (Exception e) {


}


try {

if (con != null) {

con.close();

}

} catch (Exception e) {


}

%>


-----------------------------요렇게 바꾸쉬는것


<%@ page import = "java.sql.*" %>

    

<% request.setCharacterEncoding("UTF-8"); %>


요걸 외우는거심


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


<%@page import="java.sql.*"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

%>


<%

int memono = Integer.parseInt(request.getParameter("memono"));


String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

String id = "soldesk";

String pass = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, id, pass);

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = null;

int cnt = 0;


sql = "select * ";

sql += "From memo Where memono = ? ";


pstmt = con.prepareStatement(sql);

pstmt.setInt(1, memono);


rs = pstmt.executeQuery();

String content = null;


if (rs.next()) {

content = rs.getString("content");

%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV style="text-align: center; margin-top: 20px; margin-bottom: 20px;">

수정</DIV>


<form name="frm" method="POST" action="./updateProc.jsp">

<!-- 이거 보낸 다음에 where 안하면 모든 애들이 값이 다 똑같아짐... ㅠㅠㅠㅠ

어 이 개념 왜나왔지?

hidden 개념 :>! -암호화랑 상관없이 그냥 사용자양반이 보지 말라고 만드는 hidden

-->

 

<input type = "hidden" name = "memono" value = "<%=rs.getInt("memono")%> ">

<!-- 이거 없으면 이거 없다고 징징거림  -->

<table width="50%" align="center" border="1">

<tr>

<th>제목</th>

<td><input type='text' name='title' size='30'

value='<%=rs.getString("title")%>'></td>

</tr>


<tr>

<th>내용</th>

<td><textarea name='content' rows='10' cols='30'><%=rs.getString("content")%></textarea></td>

</tr>


</table>


<div

style="text-align: center; margin-top: 20px; margin-bottom: 20px;">

<input type="submit" value="전송">

</div>

</form>


</body>

</html>



<%

}

try {

if (rs != null) {

rs.close();

}

} catch (Exception e) {


}


try {

if (pstmt != null) {

pstmt.close();


}

} catch (Exception e) {


}


try {

if (con != null) {

con.close();

}

} catch (Exception e) {


}

%>


업데이트뽐 만들었음


이제 업데이트쁘록 만들거임

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

HTTP Status 500 - An exception occurred processing JSP page /memo/updateProc.jsp at line 9

이걸 참 많이 본다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

연결 하는ㄱ ㅔ 넘나 어려운것...

JasperException

이게 그의 친구임


이제 list.jsp부터 실행해야함 -_-);;;;;;;

-------------------------------------------어쩄든 updateProc

<%@ page import="java.sql.*"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%
request.setCharacterEncoding("UTF-8");

int memono = Integer.parseInt(request.getParameter("memono"));
String title = request.getParameter("title");
String content = request.getParameter("content");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String user = "soldesk";
String password = "1234";

Class.forName("oracle.jdbc.driver.OracleDriver");
//패키지는 ㄷㅐ문자가 없음... - OracleDriver 가 대문자니까 클래스임 'ㅅ'

Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = null;
String sql = "";

sql = "UPDATE memo ";
sql += "SET title = ?, ";
sql += "content = ? ";
sql += "WHERE memono = ? ";

pstmt = con.prepareStatement(sql);
pstmt.setString(1, title);
pstmt.setString(2, content);
pstmt.setInt(3, memono);

int cnt = pstmt.executeUpdate();
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

</head>
<body>

<DIV style='font-size: 24px; text-align: center; margin-top: 100px;'>
<%
if (cnt == 1) {
out.println("메모를 수정 했습니다.");
} else {
out.println("메모 수정에 실패했습니다.");
}
%>
<br> <input type='button' value='계속 등록'
onclick="location.href='./createForm.jsp'"> <input
type='button' value='목록' onclick="location.href='./list.jsp'">
</DIV>

</body>
</html>

<%
try {
if (pstmt != null) {
pstmt.close();

}
} catch (Exception e) {

}

try {
if (con != null) {
con.close();
}
} catch (Exception e) {

}
%>



------------------------------------------------------------updateProc이었습니다

<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>

<%
int memono = Integer.parseInt(request.getParameter("memono"));

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id = "soldesk";
String pass = "1234";

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, id, pass);
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
int cnt = 0;

sql = "select * ";
sql += "From memo Where memono = ? ";

pstmt = con.prepareStatement(sql);
pstmt.setInt(1, memono);

rs = pstmt.executeQuery();
String content = null;

if (rs.next()) {
content = rs.getString("content");
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style="text-align: center; margin-top: 20px; margin-bottom: 20px;">
수정</DIV>

<form name="frm" method="POST" action="./updateProc.jsp">
<!-- 이거 보낸 다음에 where 안하면 모든 애들이 값이 다 똑같아짐... ㅠㅠㅠㅠ
어 이 개념 왜나왔지?
hidden 개념 :>! -암호화랑 상관없이 그냥 사용자양반이 보지 말라고 만드는 hidden
-->
 
<!--  <input type = "hidden" name = "memono" value = "< % =rs.getInt("memono") % > ">
이거 rs로 받으면 오류나고 그냥 value 값으로 받아줘야함
-->
 <input type='hidden' name='memono' size='30' value='<%=memono %>'>
 
<!-- 이거 없으면 이거 없다고 징징거림  -->
<table width="50%" align="center" border="1">
<tr>
<th>제목</th>
<td><input type='text' name='title' size='30'
value='<%=rs.getString("title")%>'></td>
</tr>

<tr>
<th>내용</th>
<td><textarea name='content' rows='10' cols='30'><%=rs.getString("content")%></textarea></td>
</tr>

</table>

<div
style="text-align: center; margin-top: 20px; margin-bottom: 20px;">
<input type="submit" value="전송">
</div>
</form>

</body>
</html>


<%
}
try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {

}

try {
if (pstmt != null) {
pstmt.close();

}
} catch (Exception e) {

}

try {
if (con != null) {
con.close();
}
} catch (Exception e) {

}
%>


-------------------------------------------------------------updateForm 이었습니다


이 부분에 열받는건


<!--  <input type = "hidden" name = "memono" value = "< % =rs.getInt("memono") % > ">

이거 rs로 받으면 오류나고 그냥 value 값으로 받아줘야함

-->

 <input type='hidden' name='memono' size='30' value='<%=memono %>'>


이게 문제였다는 거야 으아아 이게뭔뎅ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ


으아아 표현식 ^^


------------------------------- David이 헷갈리는 ResultSet


http://kyumboy.tistory.com/40




--아 이거 질문하고 다시 쓰겠음 레이디



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

DELETE는 복붙할겁미다

<%@ page contentType="text/html; charset=UTF-8"%>


<% request.setCharacterEncoding("utf-8"); %>


<%

int memono = Integer.parseInt(request.getParameter("memono"));

%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title></title>

<style type="text/css">

* {

font-family: gulim;

font-size: 24px;

}

</style>

</head>

<body>

<DIV style='text-align: center; margin-top: 20px; margin-bottom: 20px;'>삭제

확인</DIV>


<Form name='frm' method='POST' action='./deleteProc.jsp'>

<input type='hidden' name='memono' size='30' value='<%=memono %>'>


<DIV

style='text-align: center; margin-top: 20px; margin-bottom: 20px;'>

삭제를 하면 복구 될 수 없습니다.<br>

<br> 삭제하시려면 삭제 처리 버튼을 클릭하세요.<br>

<br> 취소는 '목록' 버튼을 누르세요. <br>

<br> <input type='submit' value='삭제 처리'> <input

type='button' value='목록' onclick="location.href='./list.jsp'">

</DIV>

</Form>

<!-- 성생님이 굳이 뽐으로 안써도 된다 구랬는대 선생님이 이렇게 만드럿슴니다 

저는 전ㅅㅎㅕㅑ 쉽지가 안습니다 씪씪

그 리절트셋이 다시 고통받고이습니다

그리고 선언문이 머리가 아픔미다

선언문이 아니라표현식

으아아ㅏ 왜 이름도 이러ㅏㅎ게 미낭낭

ㄴㅁㅇㄴㅁㅇㅁㄴ

-->


</body>

</html>



--------------------저건 디리트뽐

이 아래는 디리트 쁘록
<%@ page contentType="text/html; charset=UTF-8"%>

<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.PreparedStatement"%>

<% request.setCharacterEncoding("utf-8"); %>

<%
int memono = Integer.parseInt(request.getParameter("memono"));
 
// String url = "jdbc:oracle:thin:@172.16.12.100:1521:XE";
String url = "jdbc:oracle:thin:@soldesk-PC:1521:XE";
String id = "soldesk";
String pass = "1234";
 
Class.forName("oracle.jdbc.driver.OracleDriver"); // ojdbc6.jar
Connection con=DriverManager.getConnection(url, id, pass);
PreparedStatement pstmt=null; // SQL 실행 능력
String sql = null;
int cnt = 0;
 
sql  = " DELETE FROM memo";
sql += " WHERE memono = ?";
 
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, memono);
 
cnt = pstmt.executeUpdate(); // 삭제 실행
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
</head>
<body>
<DIV style='font-size: 24px; text-align: center; margin-top: 100px;'>
<%
  if (cnt == 1){
    out.println("메모를 삭제 했습니다.");
  }else{
    out.println("메모 삭제에 실패했습니다.");
  }
  %>
<br> <input type='button' value='목록'
onclick="location.href='./list.jsp'">
</DIV>

</body>
</html>

<%
try{
  if (pstmt != null){
    pstmt.close();
  
  }
}catch(Exception e){
  
}
 
try{
  if (con != null){
    con.close();
  }
}catch(Exception e){
  
}
%>


------------------------------------------------------------------아 이거 언제 다 읽어 으아아

그리고 리드에 가서 이거 수정해줌

<%@page import="java.sql.*"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" 
 pageEncoding="UTF-8"%>


<%
request.setCharacterEncoding("UTF-8");

int memono = Integer.parseInt(request.getParameter("memono"));
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id = "soldesk";
String pass = "1234";

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, id, pass);
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
int cnt = 0;

sql = "update memo ";
sql += "set viewcnt = viewcnt + 1 ";
sql += "where memono = ? ";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, memono);
pstmt.executeUpdate();
// 조회수 증가하시는것
sql = "select * ";
sql += "From memo Where memono = ? ";

pstmt = con.prepareStatement(sql);
pstmt.setInt(1, memono);

rs = pstmt.executeQuery();
String content = null;
String wdate = null;

if (rs.next()) {
content = rs.getString("content");
//얘만 가져온 이유는 변환하려고!
//뭐냐면 엔터나오면 라인스킵해주려고 :>
content = content.replaceAll("\r\n", "<br>");

wdate = rs.getString("wdate").substring(0, 10);
// substring(beginIndex, endIndex);
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" 
content="text/html; charset=UTF-8">

<title>Insert title here</title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>


<script type = "text/javascript">
function updateM(){
var url = "updateForm.jsp";
url += "?memono=<%=memono%>";
location.href = url;
//혼파망...-_-);
}

function deleteM(){
var url = "deleteForm.jsp";
url += "?memono=<%=memono%>";
location.href = url;
}

</script>

</head>
<body>
<DIV
style='font-size: 24px; text-align: center; 
text-decoration: underline; margin-top: 10px; 
margin-bottom: 20px;'>
조회</DIV>

<table align="center" border="1px" cellpadding="10px" 
cellspacing="0px">
<TR>
<TH>제목</TH>
<TD><%=rs.getString("title")%></TD>
</TR>
<TR>
<TH>내용</TH>
<TD><%=content%></TD>
</TR>
<TR>
<TH>조회수</TH>
<TD><%=rs.getString("viewcnt")%></TD>
</TR>
<TR>
<TH>등록일</TH>
<TD><%=rs.getString("wdate")%></TD>
</TR>
</table>

<DIV style='text-align: center; margin-top: 20px'>
<input type='button' value='등록'
onclick="location.href='./createForm.jsp'">
<input type='button' value='목록' 
onclick="location.href='./list.jsp'">
<input type='button' value='수정' 
onclick="updateM()">
<!-- on으롷 시작하는 함수는 그냥 자바스크립트 취급이라서
< % % > 안써도 됨
-->
 
<input type='button' value='삭제' 
onclick="deleteM()"> 
 
</DIV>






</body>
</html>

<%
} //일부러 위에서 안 닫고 열어놓은 거인가봄

try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {

}

try {
if (pstmt != null) {
pstmt.close();

}
} catch (Exception e) {

}

try {
if (con != null) {
con.close();
}
} catch (Exception e) {

}
%>


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



지금 저 연결하는 놈의 거랑 close 부분 include로 바꾸면 짱편하시셈



[10][메모장] 메모장 version 2.0으로 업그레이드, SSI(Server Side Include)
[01] SSI(Server Side Include) 
     - 하나 이상의 jsp페이지에서 반복적으로 사용되는 코드를 모아 
       특정 jsp페이지에 저장해두고, 필요시에 추가하여 사용하는 방법을 말합니다. 

     - 처리 결과가 합쳐지는 것이 아니라 파일의 소스가 하나의 파일에 합쳐진 다음 
       실행됩니다. 
      
     list.jsp 소스 + ssi.jsp 소스 = jsp 통합 큰 소스 ==> 실행 
     --------------------------------------------------------   

   - 사용 방법 
     <%@ include file="Local URL" %> 

     <%@ include file="./ssi.jsp" %> 

   
     


            

    


   


-  Eclipse Project: memo 계속 사용 
   Folder Name: /WebContent/memov2 
   Library: WEB-INF/lib/ojdbc14.jar or ojdbc6.jar 



★ SSI 파일의 사용의 경우 아래의 Page Directive는 포함되는 JSP 및 포함하는  
   JSP 파일 모두 대소문자 및 공백도 일치해야합니다. 

  <%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 

  <%@ page contentType="text/html; charset=UTF-8" %>  

  위의 2가지를 혼합하여 사용하면 안되고 한가지 패터만 사용, 공백도 문제됨. 


ㅇㅇ 띄어쓰기 & 대소문자 구분을 잘 해야 합니다 ^^


아 이전에 memo v2 라는 폴더를 하나 만들었음


ssi.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@page import="java.sql.*"%>



<%

request.setCharacterEncoding("UTF-8");



String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";


String id = "soldesk";

String password = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, id, password);

PreparedStatement pstmt = null;


ResultSet rs = null;

String sql = null;

int cnt = 0;

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>


</body>

</html>



그담에 ssi_dbclose.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
<%
try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {
}

try {
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}

try {
if (con != null)
con.close();
} catch (Exception e) {
}
%>


<!-- 이거 리드의 시체와 리스트의 시체입니다. -->



요렇게 만들어놓고


리쓰트 쥐에쓰피에 가서


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ include file = "./ssi.jsp" %>


<%



sql = "SELECT memono, title, to_char(wdate, 'yyyy-dd-mm') wdate,  viewcnt ";

sql += " FROM memo ";

sql += "ORDER BY memono DESC ";


pstmt = con.prepareStatement(sql);


rs = pstmt.executeQuery();

//'ㅅ'

%>


이런 식으로 인클루드 해주면 됨 ㅋㅋㅋㅋ

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./ssi.jsp" %>

<%
sql = "SELECT memono, title, to_char(wdate, 'yyyy-dd-mm') wdate,  viewcnt ";
sql += " FROM memo ";
sql += "ORDER BY memono DESC ";

pstmt = con.prepareStatement(sql);

rs = pstmt.executeQuery();
//'ㅅ'
%>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type="text/javascript">
function read(memono){
var url = "./read.jsp";
url = url + "?memono=" + memono;
//띄어쓰기 주의 -_-) ? memo = (x) ?memo= (o)
location.href = url; //자바스크립트에서 -get 방식- 링크 보내기
}

</script>

</head>
<body>
<DIV
style='font-size: 24px; text-align: center; text-decoration: underline; margin-top: 10px; margin-bottom: 20px;'>
메모 목록</DIV>

<Table align="center" border='1px' cellpadding="10px" cellspacing="0px">
<TR>
<TH>번호</TH>
<TH>제목</TH>
<TH>날짜</TH>
<TH>조회수</TH>
</TR>

<%
if (rs.next() == false) {
%>
<TR>
<TD colspan='4'>등록된 메모가 없습니다.</TD>
</TR>
<%
} // end if
else {
do {
%>
<TR>
<TD><%=rs.getInt("memono")%></TD>
<TD><a href = "javascript:read('<%=rs.getInt("memono")%>')"><%=rs.getString("title")%></a></TD>
<!-- 자바 스크립트 호출시 써줘야함 -->
<!--  "javascript:read('')" 요안에 표현식까지 다 복사해서 넣어야함
-->
<TD><%=rs.getString("wdate")%></TD>
<TD><%=rs.getInt("viewcnt")%></TD>

</TR>

<%
} //end do
while (rs.next() == true);
} //end else
%>
</Table>

<DIV style='text-align: center; margin-top: 20px;'>
<input type="button" value='등록'
onclick="location.href='./createForm.jsp'">
</DIV>





</body>
</html>

<%@ include file = "./ssi_dbclose.jsp"%>

이렇게 생겼음






--------------뭐야 오늘 뭔가 배우다 말았는걸 










5. 수업

진도: 

hw: 


6. 할것

토요일 나가기 전에 볼 것 다운받아 놓을 것... -_-);;

마저 보고 놀아야 함미다


이기쥬히 - 팀원이 추천한 부로그 

ㄴ 좋은 점 : 자료가 많음

ㄴ 나쁜 점 : 비밀번호가 걸려있음







주말에 도서관가서 자발적으로 하드코딩 해 볼 것...

안그러면 넥x트x 처럼 머리가 혼돈스러울 것이야




resultset


귀찮으니까 듀얼모니터 쓰게 줄 꺼내놓기 - DVI? -.- 쪼만한 단자 어딨더랑 'ㅅ'




'Programming' 카테고리의 다른 글

160412: 22회차  (0) 2016.04.12
160408: 20회차  (1) 2016.04.08
160406: 18회차  (3) 2016.04.06
160405: 17회차  (3) 2016.04.05
160404: 16회차  (4) 2016.04.04
Posted by DAVID

160406: 18회차

Programming 2016. 4. 6. 13:18

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


재미있는 어제 하던 것 복습 ^^

getParameter! :>


form 을 통해서 쓸 때는 post방식으로 많이 씁니다.

데이터를 넣어서 -> 수정해서 -> 보낼 때!!


<form action = "" method = "post">

조런 식으로 메소드에 포스트라고 써주면 이것은 포스트 방식


noticeForm의 친구 noticeProc 를 action에 넣어줍시다.


<form action = "noticeProc.jsp" method = "post">

그냥 조런 식으로 생겼습니다.



테이블명과 테이블컬럼명과 DAO의 필드명 - 파라미터명을 일치시켜 주면

코딩시에 편함! :> - 왜냐면 헷갈리지가 않으니까...

다 다르게 해도 값은 들어가는데 저렇게 맞춰주면 좋음맨


<td><textarea rows="10" cols="20"></textarea> </td>

얘도 복습했습니다

이거 글 쓰라고 공간 만든 것 ... -.-) 텍스트-에어리아

<table>
<caption></caption>

테이블에 제목도 넣어 줄수 있음 ㅇㅇ

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
table {
width: 80%;
}

table, th, td {
border: 1px solid aqua;
color: aqua;
}

caption{
font-size: 50px;
color: aqua;
}
</style>
</head>
<body>
<form action="noticeProc.jsp" method="post">
<table>
<caption>공지 등록</caption>
<tr>
<th>이름 </th>
<td><input type = "text" name = "name" ></td>
</tr>
<tr>
<th>제목 </th>
<td style="width: 634px; "><input type = "text" name = "title"></td>
</tr>
<tr>
<th>내용 </th>
<td><textarea rows="10" cols="50" name = "content"></textarea> </td>
</tr>
<tr>
<td colspan = "2" align = "center">
<input type = "submit" value = "등록">
</td>
</tr>

</table>

</form>
</body>
</html>

노티스폼입니다



이제 아래는 노티스쁘록이빈다

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
<% request.setCharacterEncoding("UTF-8"); 
String name = request.getParameter("name");
String title = request.getParameter("title");
String content = request.getParameter("content");






%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<div style = "font-size: 24px; text-align: center;">
이름: <%= name %> <br>
제목: <%= title %> <br>
내용: <%= content %> <br>


</div>
</body>
</html>


근데 그 컨텐트에서 엔터 입력했을때 먹어주는 걸 만들기 위해서

content = content.replaceAll("\r\n", "<br>");

이걸 추가해줍니다.

리쁘레이스얼은

String java.lang.String.replaceAll(String regex, String replacement)

Replaces each substring of this string that matches the given 
 regular expression with the given replacement. 
An invocation of this method of the form str.replaceAll(regex, 
 repl) yields exactly the same result as the expression 
 java.util.regex.Pattern.java.util.regex.Pattern.compile 
 compile(regex).java.util.regex.Pattern.matcher(java.lang.CharSequence) 
 matcher(str).java.util.regex.Matcher.replaceAll replaceAll(repl) 
Note that backslashes (\) and dollar signs ($) in the replacement 
 string may cause the results to be different than if it were being 
 treated as a literal replacement string; see Matcher.replaceAll. Use 
 java.util.regex.Matcher.quoteReplacement to suppress the special 
 meaning of these characters, if desired. 
See Also:
java.util.regex.Pattern
Parameters:
regex the regular expression to which this string is to be 
matched
replacement the string to be substituted for each match
Returns:
The resulting String
Throws:
PatternSyntaxException if the regular expression's syntax 
is invalid
Since:
1.4
@spec
JSR-51

이런 시스템입니다.

content = content.replaceAll(regex, replacement);
얘를 찾아서, 얘로 바꿔주면 됩ㄴ니다


정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 펄과 Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다.


저게 리젝스! 레규러 익스프레쎤


ㅇㅇ... \r\n 는 엔터라는 뜻


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



오 이제 입력 안하면 입력하세요 씪씪

이런 기능 만듬!


-.-)b

HTML은 할 줄 아는게 없으니까 자바쓰크립트로 만듭시다! - 동적인 양반



오 이거 JSP 첫날 한거임! onsubmit! :D

on으로 시작하는 모시기 (이벤트 설정 등) - 는 다 자바스크립트임! :>

onclick onsubmit onkey어쩌구저쩌구 <- 같은 것

그러니까 onsubmit은 submit 할 때 캐치해서 이벤트 실행하는것! :>



근뎅


<form action="noticeProc.jsp" method="post" onsubmit="input()">


이렇게 짜면 안됨 -_-)

왜냐면 이미 그 서브밋 누르면 응답이 되어서 가고있으니까  -> 얘를 멈추고 강제로 다른 걸 호출해줘야함!

그래서

onsubmit="return input()" 이의있소! 하면서 멈추고 얘로 바꿔주는 거임



This는 지네 위치 <> <- 안을 참조함

this 현재있는 위치의 태그값!


onsubmit="return input(this)"


이런 식으로 만들면 되나바


그담에 script를 style 밑에 만들어줄겁니다.


function input(){

}


자바쓰크립트는 파라메타 넣어줄 때 타입을 명시를 안합니다.

그래서 그냥


function input(f){

}


이런 식으로 만들면 됨


<script type="text/javascript">

function input(f){

if(f.name.value == "")/*f.하위요소.값 == 빈값이면*/

alert("이름을 입력하세요") /*alert 컨펌 푸롬푸투 = 자바쓰크립트의 경고 3인방*/

f.name.focus(); /*앜! 포커스 놓쳤다★★★!*/

/*

해당 요소에 포커스를 부여하여

1. 텍스트 창의 경우, 커서를 위치시켜 바로 입력 가능

2. 버튼의 경우 엔터 키를 눌렀을 때 클릭 효과를 냄

Description: Bind an event handler to the "focus" JavaScript event, or trigger that event on an element.

아! 이벤트 발생시키는 용이군요 ^^

그 만약에 빈 곳 있으면 글루 그러니까... 커서 같은거 이동시켜줌!

뽀꺼쓰!

어그로 끈 곳으로 포커스를 주는 개념입니다.

*/

return false;

}



</script>


그래서 이런 식으로 만들면 잘 돌아갑니다.


전체 코드는 이럼.

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style type="text/css">

table {

width: 80%;

}


table, th, td {

border: 1px solid aqua;

color: aqua;

}


caption {

font-size: 50px;

color: aqua;

}


</style>


<script type="text/javascript">

function input(f){

if(f.name.value == ""){

alert("이름을 입력하세요") 

f.name.focus(); 

return false;

}

if(f.title.value == ""){

alert("제목을 입력하세요")

f.title.focus();

return false;

}

if(f.content.value == ""){

alert("내용을 입력하세요")

f.content.focus();

return false;

}

}



</script>



</head>

<body>

<form action="noticeProc.jsp" method="post"

onsubmit="return input(this)">

<table>

<caption>공지 등록</caption>

<tr>

<th>이름</th>

<td><input type="text" name="name"></td>

</tr>

<tr>

<th>제목</th>

<td style="width: 634px;"><input type="text" name="title"></td>

</tr>

<tr>

<th>내용</th>

<td><textarea rows="10" cols="50" name="content"></textarea></td>

</tr>

<tr>

<td colspan="2" align="center"><input type="submit" value="등록">

</td>

</tr>


</table>


</form>

</body>

</html>


별 거 없음.



if(f.content.value == ""){

alert("내용을 입력하세요")

f.content.focus();

return false;

}


이거 리턴값을 따로따로 줘야 합니다! :>


어쨌든 중요한 - onsubmit = "return input(this)" -★




그냥 내가 들으려고

어제 postTest 제에쓰피 파일에


<script type="text/javascript">
function input(f){
if(f.name.value == ""){
alert("이름을 입력해라 내가 input함수를 짰는데");
f.name.focus();
return false;
}
/*성별은 둘 중 하나라도 되면 넘어가도 됩니다
이름이 같은 경우에 태그를 배열[] 로 인식함 -.-)ㅋㅋ
체크드! - o-true x-false
*/
if(f.gender[0].checked == false && f.gender[1].checked == false){
alert("성별을 하나라도 찍어라 내가 input함수를 짰는데");
f.gender[0].focus(); /*강제로 안 바꿔주면 null값 찍네...*/
return false;
}
}

</script>

요거 작업 하고 있음




근데 proc에서


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


if (i == (skill.length - 1)) {

out.print(skill[i]);

} else {

out.print(skill[i] + ", ");

}

}


요기 length 잡는 거 때매 오류남...500에러!

에이씨! 


일단 킵★



오 스크립트 내에서


var cnt = 0;

for(var i = 0; i<f.skill.length; i++){

if(f.skill[i].checked == true){

cnt++;

}

}

if(cnt==0){

alert("보유기술을 선택해라 내가 if문을 짰는데");

f.skill[0].focus();

return false; /*오 이러면 500 오류인가 뭔가 안뜸*/

}


요렇게 짜면 오류 안뜸 :D

이힣힣



요기까지 중간 점검용 코드! :>


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style type="text/css">

table {

width: 80%;

}


table, th, td {

border: 1px solid black;

}

</style>


<script type="text/javascript">

function input(f){

if(f.name.value == ""){

alert("이름을 입력해라 내가 input함수를 짰는데");

f.name.focus();

return false;

}

/*성별은 둘 중 하나라도 되면 넘어가도 됩니다

이름이 같은 경우에 태그를 배열[] 로 인식함 -.-)ㅋㅋ

체크드! - o-true x-false

*/

if(f.gender[0].checked == false && f.gender[1].checked == false){

alert("성별을 하나라도 찍어라 내가 input함수를 짰는데");

f.gender[0].focus(); /*강제로 안 바꿔주면 null값 찍네...*/

return false;

}

if(f.info.value == ""){

alert("내용을 입력해라 내가 input함수를 짰는데");

f.info.focus();

return false;

}

var cnt = 0;

for(var i = 0; i<f.skill.length; i++){

if(f.skill[i].checked == true){

cnt++;

}

}

if(cnt==0){

alert("보유기술을 선택해라 내가 if문을 짰는데");

f.skill[0].focus();

return false; /*오 이러면 500 오류인가 뭔가 안뜸*/

}

}



</script>





</head>

<body>

<form action="proc.jsp" method="post" onsubmit = "return input(this)">

<!-- 뽐 안에 테이브를 넣ㅇㅓ야 보내기 ㄱㅏ ㄴ ㅡ ㅇ ㅎ ㅐ  ㅇ ㅕ  -->


<table>

<tr>

<th>이름:</th>

<td><input type="text" name="name"></td>

<!-- 쟤는 이름을 굳이 넣어줘야한다네 -->

</tr>


<tr>

<th>성별:</th>

<td><label><input type="radio" name="gender" value="남자">남자</label>

<!--  위아래 애들은 는 밸류값을 넣어줘야 한다네 --> <label><input

type="radio" name="gender" value="여자">여자</label></td>

<!-- 이렇게 label로 감싸고 - 이름을 gender로 안 하면 두 개 다 체크 가능하니까 이름을 지정해준다! :> -->

</tr>


<tr>

<th>보유기술:</th>

<td><label><input type="checkbox" value="java"

name="skill"> JAVA </label> <label><input type="checkbox"

value="jsp" name="skill"> JSP </label> <label><input

type="checkbox" value="mvc" name="skill"> MVC </label> <label><input

type="checkbox" value="spring" name="skill"> SPRING </label> <label><input

type="checkbox" value="jquery" name="skill"> jQuery</label></td>

</tr>


<tr>

<th>취미:</th>

<td><select name="hobby">

<option>기술 서적 읽기

<option>게임

<option>영화감상

<option>보드타기

</select></td>


</tr>


<tr>

<th>자기소개:</th>

<td><textarea rows="5" cols="45" name="info"></textarea></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="전송">

</td>

</tr>

</table>



<!-- 여기 네임이랑 밸류를 무지하게 많이 만들어줬는데 이게 그... post 타입으로 쓰려거... -->



</form>

</body>

</html>



뽀인트는 for(var i = 0; <- 이렇게 int 대신 var로 쓴 것

자바쓰크립트는 그... 타입을 명시를 안하미다


<tr>

<th>취미:</th>

<td><select name="hobby">

<option>취미를 선택해라</option>

<option>기술 서적 읽기

<option>게임

<option>영화감상

<option>보드타기

</select></td>


</tr>


/*옵션은 안 닫아도 되고 닫아도 되고 데이빗맘인것*/


요 부분을 바꿔준다.


if(f.hobby.selectedIndex == 0){

/*그러니까 select는 쓴 순서대로 인덱스가 매겨지는것*/

alert("취미를 선택해라 내가 selectedIndex를 배웠는데");

f.hobby.focus();

return false;

}


이렇게 바꿔주면 됩니다.



캡션은 테이블 안에 넣어줘야 됩니다.

쓰타일에서 넘ㅇ나이쁘게 

caption{

font-size:  30px;

font-weight: bold;

}



이렇게 주면 굵고 크게 나옴ㅋㅋㅋㅋㅋㅋㅋㅋㅋ


<table>
<caption>팀 정보를 등록해라 내가 캡션을 만들었는데</caption>
요렇게!

String info = request.getParameter("info");
info = info.replaceAll("\r\n", "<br>");

요것도 수정함 - 쁘록에

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
table {
width: 80%;
}

table, th, td {
border: 1px solid black;
}

caption{
font-size:  30px;
font-weight: bold;
}

</style>

<script type="text/javascript">
function input(f){
if(f.name.value == ""){
alert("이름을 입력해라 내가 input함수를 짰는데");
f.name.focus();
return false;
}
/*성별은 둘 중 하나라도 되면 넘어가도 됩니다
이름이 같은 경우에 태그를 배열[] 로 인식함 -.-)ㅋㅋ
체크드! - o-true x-false
*/
if(f.gender[0].checked == false && f.gender[1].checked == false){
alert("성별을 하나라도 찍어라 내가 input함수를 짰는데");
f.gender[0].focus(); /*강제로 안 바꿔주면 null값 찍네...*/
return false;
}
if(f.info.value == ""){
alert("내용을 입력해라 내가 input함수를 짰는데");
f.info.focus();
return false;
}
var cnt = 0;
for(var i = 0; i<f.skill.length; i++){
if(f.skill[i].checked == true){
cnt++;
}
}
if(cnt==0){
alert("보유기술을 선택해라 내가 if문을 짰는데");
f.skill[0].focus();
return false; /*오 이러면 500 오류인가 뭔가 안뜸*/
}
if(f.hobby.selectedIndex == 0){
/*그러니까 select는 쓴 순서대로 인덱스가 매겨지는것*/
alert("취미를 선택해라 내가 selectedIndex를 배웠는데");
f.hobby.focus();
return false;
}
}


</script>




</head>
<body>
<form action="proc.jsp" method="post" onsubmit = "return input(this)">
<!-- 뽐 안에 테이브를 넣ㅇㅓ야 보내기 ㄱㅏ ㄴ ㅡ ㅇ ㅎ ㅐ  ㅇ ㅕ  -->

<table>
<caption>팀 정보를 등록해라 내가 캡션을 만들었는데</caption>
<tr>
<th>이름:</th>
<td><input type="text" name="name"></td>
<!-- 쟤는 이름을 굳이 넣어줘야한다네 -->
</tr>

<tr>
<th>성별:</th>
<td><label><input type="radio" name="gender" value="남자">남자</label>
<!--  위아래 애들은 는 밸류값을 넣어줘야 한다네 --> <label><input
type="radio" name="gender" value="여자">여자</label></td>
<!-- 이렇게 label로 감싸고 - 이름을 gender로 안 하면 두 개 다 체크 가능하니까 이름을 지정해준다! :> -->
</tr>

<tr>
<th>보유기술:</th>
<td><label><input type="checkbox" value="java"
name="skill"> JAVA </label> <label><input type="checkbox"
value="jsp" name="skill"> JSP </label> <label><input
type="checkbox" value="mvc" name="skill"> MVC </label> <label><input
type="checkbox" value="spring" name="skill"> SPRING </label> <label><input
type="checkbox" value="jquery" name="skill"> jQuery</label></td>
</tr>

<tr>
<th>취미:</th>
<td><select name="hobby">
<option>취미를 선택해라</option>
<option>기술 서적 읽기
<option>게임
<option>영화감상
<option>보드타기
</select></td>

</tr>

<tr>
<th>자기소개:</th>
<td><textarea rows="5" cols="45" name="info"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="전송">
</td>
</tr>
</table>


<!-- 여기 네임이랑 밸류를 무지하게 많이 만들어줬는데 이게 그... post 타입으로 쓰려거... -->


</form>
</body>
</html>

일단 얘네는 다 해씁니다


이제 어드레스 할거임 ㄱㄱ

maxlength는 실제 입력을 조절하는 거십니다

<tr>
<th>우편번호</th>
<td><input type = "text" name = "zipcode" size ="6" maxlength = "5"></td>
</tr>
그럼 5글자까지만 들어감 :>



<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<style>

table{

width: 80%;

}


table, th, td{

border: 1px solid black;

}

caption{

font-size: 30px;

font-weight: bold;

}


</style>

<script>



</script>


<body>

<form action="addressProc.jsp" method="post">

<table>

<caption>주소 등록</caption>

<tr>

<th>이름</th>

<td><input type="text" name="name"></td>

</tr>

<tr>

<th>전화번호</th>

<td><input type = "text" name = "phone"></td>

</tr>

<tr>

<th>우편번호</th>

<td><input type = "text" name = "zipcode" size ="6" maxlength = "5"><br>

<input type = "button" value ="주소검색">

</td>

</tr>

<tr>

<th>주소</th>

<td><input type = "text" name = "address1" size = "55">

<input type = "text" name = "address2" size = "55" >

</td>

</tr>

<tr>

<td colspan = "2" align = center>

<input type = "submit" value = "등록">

</td>

</tr>



</table>


</form>



</body>

</html>


이거 주소지를 다음 api로 쓸거임 :>



일단 배운거까지 킵


어드레스 폼

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<style>

table{

width: 80%;

}


table, th, td{

border: 1px solid black;

}

caption{

font-size: 30px;

font-weight: bold;

}


</style>

<script>

function inputchk(f){

if(f.name.value==""){

alert("이름을 입력하세요^^");

f.name.focus();

return false;

}

if(f.phone.value==""){

alert("전화번호를 입력하세요^^");

f.phone.focus();

return false;

}

if(f.zipcode.value==""){

alert("우편번호를 입력하세요^^");

f.zipcode.focus();

return false;

}

if(f.address1.value==""){

alert("첫 번째 주소를 입력하세요^^");

f.address1.focus();

return false;

}

if(f.address2.value==""){

alert("두 번째 주소를 입력하세요^^");

f.address2.focus();

return false;

}

}


</script>


<body>

<form action="ProcAddress.jsp" method="post" onsubmit = "return inputchk(this)">

<table>

<caption>주소 등록</caption>

<tr>

<th>이름</th>

<td><input type="text" name="name"></td>

</tr>

<tr>

<th>전화번호</th>

<td><input type = "text" name = "phone"></td>

</tr>

<tr>

<th>우편번호</th>

<td><input type = "text" name = "zipcode" size ="6" maxlength = "5"><br>

<input type = "button" value ="주소검색">

</td>

</tr>

<tr>

<th>주소</th>

<td><input type = "text" name = "address1" size = "55">

<input type = "text" name = "address2" size = "55" >

</td>

</tr>

<tr>

<td colspan = "2" align = center>

<input type = "submit" value = "등록">

</td>

</tr>



</table>


</form>



</body>

</html>



어드레스 프록

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");


String name = request.getParameter("name");

String phone = request.getParameter("phone");

String zipcode= request.getParameter("zipcode");

String address1= request.getParameter("address1");

address1 = address1.replaceAll("\r\n", "<br>");

String address2= request.getParameter("address2");

address2 = address2.replaceAll("\r\n", "<br>");

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1>당신의 주소</h1>

<div style="font-size: 30px; background-color: #ff1f00">

이름: <%= name %><br>

전화번호: <%= phone %><br>

우편번호: <%= zipcode %><br>

주소1: <%= address1 %><br>

주소2: <%= address2 %>

</div>









</body>

</html>


이거 내가 이름을 잘못 만드러서 ProcAddress됨 -_-);;

주소 출력시 <%= address1 + address2 %> 같이 해도 출력됨 ! :>



http://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q=%EC%9A%B0%ED%8E%B8%EB%B2%88%ED%98%B8+api&tltm=1


이거 다음 우편번호 api 검색해서 첫번째것 -.-

중에서 사용자가 선택한 값 이용하기! :>


뀌뀌





<input type="text" id="sample6_postcode" placeholder="우편번호"> //플레이스홀더: 우편번호 자리니라


<input type="button" onclick="sample6_execDaumPostcode()" value="우편번호 찾기"><br>

<input type="text" id="sample6_address" placeholder="주소">

<input type="text" id="sample6_address2" placeholder="상세주소">


<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>

<script>

    function sample6_execDaumPostcode() {

        new daum.Postcode({

            oncomplete: function(data) {

                // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.


                // 각 주소의 노출 규칙에 따라 주소를 조합한다.

                // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.

                var fullAddr = ''; // 최종 주소 변수

                var extraAddr = ''; // 조합형 주소 변수


                // 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.

                if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우

                    fullAddr = data.roadAddress;


                } else { // 사용자가 지번 주소를 선택했을 경우(J)

                    fullAddr = data.jibunAddress;

                }


                // 사용자가 선택한 주소가 도로명 타입일때 조합한다.

                if(data.userSelectedType === 'R'){

                    //법정동명이 있을 경우 추가한다.

                    if(data.bname !== ''){

                        extraAddr += data.bname;

                    }

                    // 건물명이 있을 경우 추가한다.

                    if(data.buildingName !== ''){

                        extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);

                    }

                    // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.

                    fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');

                }


                // 우편번호와 주소 정보를 해당 필드에 넣는다.

                document.getElementById('sample6_postcode').value = data.zonecode; //5자리 새우편번호 사용

                document.getElementById('sample6_address').value = fullAddr;


                // 커서를 상세주소 필드로 이동한다.

                document.getElementById('sample6_address2').focus();

            }

        }).open();

    }

</script>



오 쩐당


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<style>

table {

width: 80%;

}


table, th, td {

border: 1px solid black;

}


caption {

font-size: 30px;

font-weight: bold;

}

</style>

<script>

function inputchk(f){

if(f.name.value==""){

alert("이름을 입력하세요^^");

f.name.focus();

return false;

}

if(f.phone.value==""){

alert("전화번호를 입력하세요^^");

f.phone.focus();

return false;

}

if(f.zipcode.value==""){

alert("우편번호를 입력하세요^^");

f.zipcode.focus();

return false;

}

if(f.address1.value==""){

alert("첫 번째 주소를 입력하세요^^");

f.address1.focus();

return false;

}

if(f.address2.value==""){

alert("두 번째 주소를 입력하세요^^");

f.address2.focus();

return false;

}

}


</script>

<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>

<script>

    function sample6_execDaumPostcode() {

        new daum.Postcode({

            oncomplete: function(data) {

                // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.


                // 각 주소의 노출 규칙에 따라 주소를 조합한다.

                // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.

                var fullAddr = ''; // 최종 주소 변수

                var extraAddr = ''; // 조합형 주소 변수


                // 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.

                if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우

                    fullAddr = data.roadAddress;


                } else { // 사용자가 지번 주소를 선택했을 경우(J)

                    fullAddr = data.jibunAddress;

                }


                // 사용자가 선택한 주소가 도로명 타입일때 조합한다.

                if(data.userSelectedType === 'R'){

                    //법정동명이 있을 경우 추가한다.

                    if(data.bname !== ''){

                        extraAddr += data.bname;

                    }

                    // 건물명이 있을 경우 추가한다.

                    if(data.buildingName !== ''){

                        extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);

                    }

                    // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.

                    fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');

                }


                // 우편번호와 주소 정보를 해당 필드에 넣는다.

                document.getElementById('sample6_postcode').value = data.zonecode; //5자리 새우편번호 사용

                document.getElementById('sample6_address').value = fullAddr;


                // 커서를 상세주소 필드로 이동한다.

                document.getElementById('sample6_address2').focus();

            }

        }).open();

    }

</script>

<!-- 쓰크립트를 여러 개 써도 되는군요^^ -->

<!-- 다음에서 루팡했음 -->

<body>

<form action="ProcAddress.jsp" method="post"

onsubmit="return inputchk(this)">

<table>

<caption>주소 등록</caption>

<tr>

<th>이름</th>

<td><input type="text" name="name"></td>

</tr>

<tr>

<th>전화번호</th>

<td><input type="text" name="phone"></td>

</tr>

<tr>

<th>우편번호</th>

<td><input type="text" id="sample6_postcode" placeholder="우편번호"

name="zipcode" size="6" maxlength="5"><br> <input

type="button" value="주소검색" onclick="sample6_execDaumPostcode()"

value="우편번호 찾기"></td>

</tr>

<tr>

<th>주소</th>

<td><input type="text" name="address1" size="55"

id="sample6_address" placeholder="주소"> <input type="text"

name="address2" size="55" id="sample6_address2" placeholder="상세주소">


</td>

</tr>

<tr>

<td colspan="2" align=center><input type="submit" value="등록">

</td>

</tr>



</table>


</form>



</body>

</html>


이렇게 input 추가하고 script 추가하니까 다뜸 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

쩐당



어제 했던것도 박았음


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style type="text/css">

table {

width: 80%;

}


table, th, td {

border: 1px solid black;

}


caption{

font-size:  30px;

font-weight: bold;

}


</style>


<script type="text/javascript">

function input(f){

if(f.name.value == ""){

alert("이름을 입력해라 내가 input함수를 짰는데");

f.name.focus();

return false;

}

/*성별은 둘 중 하나라도 되면 넘어가도 됩니다

이름이 같은 경우에 태그를 배열[] 로 인식함 -.-)ㅋㅋ

체크드! - o-true x-false

*/

if(f.gender[0].checked == false && f.gender[1].checked == false){

alert("성별을 하나라도 찍어라 내가 input함수를 짰는데");

f.gender[0].focus(); /*강제로 안 바꿔주면 null값 찍네...*/

return false;

}

if(f.info.value == ""){

alert("내용을 입력해라 내가 input함수를 짰는데");

f.info.focus();

return false;

}

var cnt = 0;

for(var i = 0; i<f.skill.length; i++){

if(f.skill[i].checked == true){

cnt++;

}

}

if(cnt==0){

alert("보유기술을 선택해라 내가 if문을 짰는데");

f.skill[0].focus();

return false; /*오 이러면 500 오류인가 뭔가 안뜸*/

}

if(f.hobby.selectedIndex == 0){

/*그러니까 select는 쓴 순서대로 인덱스가 매겨지는것*/

alert("취미를 선택해라 내가 selectedIndex를 배웠는데");

f.hobby.focus();

return false;

}

if(f.phone.value == "" ){

alert("전화번호를 입력해라");

f.phone.focus();

return false;

}

if(f.zipcode.value == "" ){

alert("우편번호를 입력해라");

f.zipcode.focus();

return false;

}

if(f.address1.value == "" ){

alert("주소를 입력해라");

f.address1.focus();

return false;

}

if(f.address2.value == "" ){

alert("상세주소를 입력해라");

f.address2.focus();

return false;

}

}



</script>

<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>

<script>

    function sample6_execDaumPostcode() {

        new daum.Postcode({

            oncomplete: function(data) {

                // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.


                // 각 주소의 노출 규칙에 따라 주소를 조합한다.

                // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.

                var fullAddr = ''; // 최종 주소 변수

                var extraAddr = ''; // 조합형 주소 변수


                // 사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.

                if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우

                    fullAddr = data.roadAddress;


                } else { // 사용자가 지번 주소를 선택했을 경우(J)

                    fullAddr = data.jibunAddress;

                }


                // 사용자가 선택한 주소가 도로명 타입일때 조합한다.

                if(data.userSelectedType === 'R'){

                    //법정동명이 있을 경우 추가한다.

                    if(data.bname !== ''){

                        extraAddr += data.bname;

                    }

                    // 건물명이 있을 경우 추가한다.

                    if(data.buildingName !== ''){

                        extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);

                    }

                    // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.

                    fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');

                }


                // 우편번호와 주소 정보를 해당 필드에 넣는다.

                document.getElementById('sample6_postcode').value = data.zonecode; //5자리 새우편번호 사용

                document.getElementById('sample6_address').value = fullAddr;


                // 커서를 상세주소 필드로 이동한다.

                document.getElementById('sample6_address2').focus();

            }

        }).open();

    }

</script>




</head>

<body>

<form action="proc.jsp" method="post" onsubmit = "return input(this)">

<!-- 뽐 안에 테이브를 넣ㅇㅓ야 보내기 ㄱㅏ ㄴ ㅡ ㅇ ㅎ ㅐ  ㅇ ㅕ  -->


<table>

<caption>팀 정보를 등록해라 내가 캡션을 만들었는데</caption>

<tr>

<th>이름:</th>

<td><input type="text" name="name"></td>

<!-- 쟤는 이름을 굳이 넣어줘야한다네 -->

</tr>


<tr>

<th>성별:</th>

<td><label><input type="radio" name="gender" value="남자">남자</label>

<!--  위아래 애들은 는 밸류값을 넣어줘야 한다네 --> <label><input

type="radio" name="gender" value="여자">여자</label></td>

<!-- 이렇게 label로 감싸고 - 이름을 gender로 안 하면 두 개 다 체크 가능하니까 이름을 지정해준다! :> -->

</tr>


<tr>

<th>보유기술:</th>

<td><label><input type="checkbox" value="java"

name="skill"> JAVA </label> <label><input type="checkbox"

value="jsp" name="skill"> JSP </label> <label><input

type="checkbox" value="mvc" name="skill"> MVC </label> <label><input

type="checkbox" value="spring" name="skill"> SPRING </label> <label><input

type="checkbox" value="jquery" name="skill"> jQuery</label></td>

</tr>


<tr>

<th>취미:</th>

<td><select name="hobby">

<option>취미를 선택해라</option>

<option>기술 서적 읽기

<option>게임

<option>영화감상

<option>보드타기

</select></td>


</tr>


<tr>

<th>자기소개:</th>

<td><textarea rows="5" cols="45" name="info"></textarea></td>

</tr>

<tr>

<th>전화: </th>

<td><input type = "text" name = "phone"></td>

</tr>

<tr>

<th>우편번호</th>

<td><input type = "text" name = "zipcode" id="sample6_postcode" placeholder="우편번호"> 

<input type = "button" value = "주소검색"  onclick="sample6_execDaumPostcode()" value="우편번호 찾기"> 

</td>

</tr>

<tr>

<th>주소</th>

<td> <input type = "text" name = "address1" id="sample6_address" placeholder="주소">

<br>

<input type = "text" name = "address2"  id="sample6_address2" placeholder="상세주소"></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="전송">

</td>

</tr>

</table>



<!-- 여기 네임이랑 밸류를 무지하게 많이 만들어줬는데 이게 그... post 타입으로 쓰려거... -->



</form>

</body>

</html>



<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

%>

<!-- http://m.blog.naver.com/ecjjmrikqo/40196016171 이거 할 것 -->


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

String name = request.getParameter("name");

String gender = request.getParameter("gender");


String[] skill = request.getParameterValues("skill");


String hobby = request.getParameter("hobby");

String info = request.getParameter("info");

info = info.replaceAll("\r\n", "<br>");

String phone = request.getParameter("phone");

String zipcode = request.getParameter("zipcode");

String address1 = request.getParameter("address1");

String address2 = request.getParameter("address2");


/*

다 받아서 -> 

*/

%>





<h1>Post 데이터 전달값</h1>

<div style="font-size: 30px; background-color: #00ff00">

이름:

<%=name%><br> 성별:<%=gender%><br> 보유기술:


<%


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


if (i == (skill.length - 1)) {

out.print(skill[i]);

} else {

out.print(skill[i] + ", ");

}

}

%>

<br> 취미:<%=hobby%><br> 자기소개:

<%=info%>

<br>

전화: <%= phone %>

<br>

우편번호: <%= zipcode %>

<br>

주소: <%= address1 %>

<br>

상세주소: <%= address2 %>

</div>



</body>

</html>


그렇습니다



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


2. response 내부 객체 
   
  

   - javax.servlet.http.HttpServletResponse Interface를 Tomcat등 
     서버가 구현한 객체, 자동화된 객체, 개발자는 사용만함. 

   - 처리 결과를 클라이언트(웹 브러우저)에게 출력할 목적을 가지고 있습니다.  

   - out 객체는 response 객체로부터 생성합니다. 

   - sendRedirect(): 데이터 처리를 한후 특정 페이지로 자동으로 주소 이동. 




<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%response.sendRedirect("http://www.kma.go.kr"); %>

<!-- 오 쩐당 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

url도 바뀜

그러니까 리다이렉트 = 재요청! :>

뤼 - 다이렉트 니까 다시 요청하는검미다

우리 애는 끝나고 -> 그담에 기상청으로 이동하는 건 살아있고! :>

1번 요청 -> 2번 요청

-->




</body>

</html>






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


스크립틀릿에서는 print 나 println이나 그놈이 그놈임 ... - 모두 다 그냥 출력 -_-) 엔터값도 없음

엔터는 <br> 뿐이야!



<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<H1>2014년 개봉 영화</H1> 


<DIV style='font-size: 28px;'> 

<% 

out.print("수상한 그녀"); 

out.print("변호인"); 

out.print("그래비티"); 

out.print("월터의 상상은 현실이 된다."); 

out.print("호빗"); 

%> 

</DIV> 

<HR> 

<DIV style='font-size: 28px;'> 

<% 

out.println("수상한 그녀"); 

out.println("변호인"); 

out.println("그래비티"); 

out.println("월터의 상상은 현실이 된다."); 

out.println("호빗"); 

%> 

</DIV> 


<HR> 

<DIV style='font-size: 28px;'> 

<% 

System.out.println("수상한 그녀"); 

System.out.println("변호인"); 

System.out.println("그래비티"); 

System.out.println("월터의 상상은 현실이 된다."); 

System.out.println("호빗"); 

%> 

</DIV> 


<HR> 

<DIV style='font-size: 28px;'> 

<% 

System.out.print("수상한 그녀"); 

System.out.print("변호인"); 

System.out.print("그래비티"); 

System.out.print("월터의 상상은 현실이 된다."); 

System.out.print("호빗"); 

%> 

</DIV> 



</body>

</html>


이거 돌려보면


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<H1>2014년 개봉 영화</H1>
<DIV style='font-size: 28px;'>
수상한 그녀변호인그래비티월터의 상상은 현실이 된다.호빗
</DIV>
<HR>
<DIV style='font-size: 28px;'>
수상한 그녀
변호인
그래비티
월터의 상상은 현실이 된다.
호빗
</DIV>
<HR>
<DIV style='font-size: 28px;'>
</DIV>
<HR>
<DIV style='font-size: 28px;'>
</DIV>
</body>

</html>

이렇게 뜨긴 하는데 출력은 그냥 가로로 됩니다.


<% 

out.print("수상한 그녀 <br>");

out.print("변호인 <br>"); 

out.print("그래비티 <br>"); 

out.print("월터의 상상은 현실이 된다. <br>"); 

out.print("호빗 <br>"); 

%> 


이렇게 아웃 프린트 안에다가 <br> 넣어주면 엔터 찍힘! :>

어 엔터가 아니라 라인 스킵이요 ㅎㅎ


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




4. application 내부 객체 
   - javax.servlet.ServletContext 인터페이스의 구현 객체 
   - 서블릿이 서블릿 컨테이너(Tomcat)에서 실행 될 때의 환경 정보를 저장 
   - 절대 경로 추출시 JSP 형식 
     String upDir = "/pds/storage"; 
     upDir = application.getRealPath(upDir); 





<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<% 

out.println(application.getRealPath("reponse.jsp")); 

%>

<!-- D:\javadb\web\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jsp_test\reponse.jsp

실제 경로를 출력해준다 :> 잏ㅎㅎㅎ

-->

</body>

</html>





4. 전체적인 서버의 흐름도
 
  


http 프로토콜은 tcp/ip라는 네트워크를 사용함 


1. 서버사이드 프로그램 - jsp / 빈즈 / 서부릿 이런거...

2. 에이치티엠엘 페이지 - 

는 써버에 있어야 합니다


웹 서버!

웹서버!!!! 웹 서 버 ~~~~~~~!


부라우저 -> http프로토콜 -> 웹서버

웹서버 -> http푸로토콜 -> 부라우저ㅗ




[05] GET, POST Form Data 전송 방식, 내부 객체(request, out)
[01] Form 전송 방식 
   

 



1. HTML Form의 형태 
   - 데이터를 입력받을 목적으로 사용하는 태그. 

<FORM name="frm" action="./sungjuk_proc.jsp" method = "GET/POST"> 



1) name  : 폼 이름 

2) action: 폼에서 입력받은 데이터를 보내(전송)는 서버의 주소로써 
           인터넷 브러우저는 주소상에 도메인 생략시 도메인을 자동으로  
           연결하여 전송합니다. 
           예)  
           action="./sungjuk_proc.jsp"  
           ▶ 현재 브러우저로 로딩된 파일과 같은 폴더에있는 
jsp로 전송 (*)

           action="../sungjuk_proc.jsp"  
           
▶ 현재 폴더의 상위 폴더에 있는 파일로 전송

           action="../object/sungjuk_proc.jsp"  - 다른 폴더로 가는 것 

..의 뜻은 현재 폴더에서 나온다는 뜻 -_-)ㅋㅋ -> 그담에 오부젝트라는 다른 폴더로 감
           
▶ 현재 폴더의 상위폴더로 나간 후 object폴더안으로 이동하여 전송  

           action="http://172.16.4.1:8000/object/sungjuk_proc.jsp" 
           
▶ 전체 IP를 직접 기록한 경우 

           action="http://www.test.co.kr/object/sungjuk_proc.jsp"  
           
▶ 전체 도메인을 직접 기록한 경우


3) method: 전송 방식 
   GET: 데이터 조회용(SQL: SELECT)   
   POST: 데이터 수정용(SQL: INSERT, UPDATE, DELETE) 

   * 특정 기업은 요청을 전부 POST로 요구하는 기업도 있음, POST만 써도 개발 가능




2. GET 전송 방식 
   - 서버의 데이터를 변경할 목적이 아닌 조회의 목적으로 사용(SQL: SELECT) 

   - 전송할 데이터를 문자열 형태로 URL의 뒤에 인수로 붙여서 
     전송합니다. 
     따라서 보안성이 없어 누구나 전송 내용을 볼 수 있습니다.  - 파라미터가 url로 나오니까...

     Form 태그에서의 'GET'방식은 서버로 전송시 서버의 처리가 
     지연될 경우 중복해서 데이터 전송이 발생합니다.  

   - A 태그를 이용할 경우 일반적으로 GET방식 전송만 가능하나 
     Javascript를 이용하면 
POST 방식으로 전송이 가능함. 

   - 4KB이상의 파라미터 문자열은 전송할 수 없음으로 대용량 전송이 어려움.

   - 주소를 공개할 목적으로 사용하는 경우



1) 주소와 데이터의 구분 
   - ?: 전송되는 데이터(변수)의 시작 
   - &: 변수가 2개 이상일 경우 구분 


갖다 붙여쓰는 데이빗 넘나 똑똑한거 같다

다 외운 데이빗인 것인가 아닌가가 문제이긴함





2) 전송 예 

- 한줄로 나타낸 경우 
http://localhost:8000/object/form/select2_proc.jsp?city=%EC%8B%9C%EC%B9%B4%EA%B3%A0&period=6%EB%B0%957%EC%9D%BC&img=ro37.jpg 

- 여러줄로 나타낸 경우 
http://localhost:8000/object/form/select2_proc.jsp 
?       <-- 전송 데이터의 시작
city=%EC%8B%9C%EC%B9%B4%EA%B3%A0 
&       <-- 전송 데이터가 여러개 일 경우의 구분자
period=6%EB%B0%957%EC%9D%BC 
& 
img=ro37.jpg 


요청 페이지가 브러우저의 접속 리스트에 노출됨으로,  
처리페이지를 필요에따라 마음대로 호출가능하여 잘못된 데이터 주입으로 서버에러 발생 가능. 

http://localhost:8000/object/form/select2_proc.jsp?city=모스크바&period=1000박1001일&img=ro38.jpg 


그러니까 그냥 검색을 위한 용도로 잘 씀 

데이터를 이따구로 보내지는 않나봐



3. POST 전송 방식 
   - 서버의 데이터를 변경할 목적으로 가지고 있음(SQL: INSERT, UPDATE, DELETE) 

님왜탈퇴함? 진짜탈퇴함? 왜탈퇴함? 우리의서비스가 어쩌구저쩌구 - 포스트 방식

   - 파일의 형태로 전송됨으로 URL상에 나타나지않아 보안성이 있습니다. 

   - GET방식에 비해서 대용량의 데이터를 전송할 수 있습니다. 

   - 일반적으로 Form은 post 방식으로 전송됩니다. 


※ GET/POST 방식 사용시 HTTP의 사용은 보안성이 약함으로 암호화(JAVA API)
   전송이나 
HTTPS(서버의 설정 필요)를 사용할 수 있다. 

※ GET방식은 특히 URL에 전송값이 노출되어 사용됨으로 보안이 필요 없는
   전송에 
이용함. 

※ 프로젝트 개발시 URL에 기록이 남는것을 방지하기위해 POST 방식만 
  사용할것을 요청하는 기업도 있음. 



4. JSP 코드 첫라인에 한글 변환을 선언함. 
   - 한글등 전송시 브러우저 별 지정된 인코딩 타입에 따라 변환됨으로 한글이 깨짐. 
      
     URL 인코딩을 각자의 형식으로 변환함으로 추가로 데이터 변환을 해주어야함. 
  
     한글 --> Chrome  ------------> Server 
              FireFox 
              Opera 
              Internet Explorer  


   <% request.setCharacterEncoding("utf-8"); %>


조 선언문 필수신것

첨에 해야함 - 나중에 하면 무슬모



5. 뉴스 등록: TEXT, TEXTAREA, PASSWORD 
   - 일반적으로 HTML은 대소문자를 가리지 않으나 HTML태그의 name 속성과
     value 속성은 대소문자를 구분합니다.
 

아! 파라메타가 대소문자 구분한다는 얘기입니다



-------------3시 42분! :>

2시간 30분 뒤면 배송이 완료되었을까


 
      
1) TEXT: 한줄을 입력받을때 사용
     <input type='text' name='title' value='' size='30'>
     - text: 한줄만 입력 
     - value: 초기값
     - size: 입력받는 창의 크기
     - maxlength: 최대 입력 글자 수 



2) TEXTAREA: 여러라인을 입력받을 때 사용 
     <textarea name='content' rows='10' cols='30'></textarea>
     - rows: 행의 갯수(문자수)
     - cols: 열의 갯수(문자수)



3) PASSWORD: 패스워드 입력시 사용, 입력글 순간 비공개
     <input type='password' name='passwd' size='30'>
   


4) Submit Button: 서버로 입력받은 데이터를 전송 
     
<input type='submit' value='등록'> 





왜 5가없지가 아니라 다른거군




6. 여행 등록: SELECT ~ OPTION 
   - SELECT: TEXT로 입력을 받으면 사용자가 다양한 값을 입력하여 처리 규칙을
             만들기가 힘듬. 

             따라서 지정된 데이터만 입력받도록 제한을 가하는 기능이 있음. 


     <SELECT name='area2'>
       <OPTION value='일본'>일본</OPTION>
       <OPTION value='중국'>중국</OPTION>
       <OPTION value='베트남'>베트남</OPTION>
       <OPTION value='태국'>태국</OPTION>
       <OPTION value='캐나다'>캐나다</OPTION>
     </SELECT>






7. 취미: RADIO, CHECKBOX 

1) RADIO: 다양한 선택 항목을 출력하고 하나만 선택 가능
   - checked="checked": 기본 선택 
 
    <input type='radio' name='area' value='서울' checked="checked"> 서울 지역

    <input type='radio' name='area' value='인천'> 인천 지역
    <input type='radio' name='area' value='경기'> 경기 지역

 

2) CHECKBOX: 여러개 선택 가능, 취미의 선정, 선택안하면 null이 출력됨 
   - checked="checked": 기본 선택  
    <input type='checkbox' name='hobby1' value='독서'>독서

    <input type='checkbox' name='hobby2' value='등산'>등산
    <input type='checkbox' name='hobby3' value='영화'>영화



3) 많은 CheckBox를 배열로 가져오는 코드
   String[] hobby = request.getParameterValues("hobby"); 

    <input type='checkbox' name='hobby' value='자전거'> 자전거 

    <input type="checkbox" name='hobby' value='캠핑'> 캠핑 
    <input type="checkbox" name='hobby' value='승마'> 승마 
 //이건 values로 받아야 되는 이유가 배열이라서 구랭


글씨체 저거 왜 저럼 -_-




<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

*{font-family: 궁서체; font-size: 35px; background-color: #000000; color: white;}


</style>

</head>

<body>

<H1>뉴스 등록</H1>


<DIV>

<form name = 'frm' method = 'get' action ='./proc.jsp'>

제목: <input type = 'text' name = 'title' value = '' size = '30'><br>

내용: <textarea name = 'content' rows = '10' cols = '30'></textarea><br>

패스: <input type = 'password' name = 'passwd' size = '30'><br>

<input type = 'submit' value = '등록'>

</form>

</DIV>




</body>

</html>


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style>

*{font-family: 궁서체; font-size: 35px; background-color: #000000; color: white;}


</style>

</head>

<body>

<%request.setCharacterEncoding("UTF-8"); %>

제목: <%= request.getParameter("title") %> <br><br>

내용: <%= request.getParameter("content") %>  <br><br>

패스워드: <%= request.getParameter("passwd") %>  <br><br>


</body>

</html>


위는뽐 아래는 쁘록




이제 이거는 씰렉트에 

그 value값 줘서 고를 수 있는 거임


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<style>

*{font-family: 굴림체; font-size: 24px}


</style>



<body>

<form name = 'frm' method = 'post' action = './proc2.jsp'>

주말 여행지를 입력해주세요.<br>

<input type = 'text' name = 'area' size = '30'>

<br><br>

주말 여행지를 입력해주세요.<br>

<select name = 'area2'>

<option value = '일본'>일본</option>

<option value = '중국'>중국</option>

<option value = '베트남'>베트남</option>

<option value = '태국'>태국</option>

<option value = '호주'>호주</option>

<option value = '캐나다'>캐나다</option>

<option value = '미국'>미국</option>

<option value = '터키'>터키</option>

<option value = '크로아티아'>크로아티아</option>

<option value = '스위스'>스위스</option>

</select>

<input type = 'submit' value = '기간선택'>

</form>





</body>

</html>


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("UTF-8"); %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<DIV style = 'font-size: 24px'>

<%

String area = request.getParameter("area");

String area2 = request.getParameter("area2");

out.println("지역 선택 1: " +area + "<BR>");

out.println("지역 선택 2: " + area2);

%>

</DIV>



</body>

</html>



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


래디오 - 하나만 선택 가능

첵빢쓰 - 여러개 선택 가능 - 그래서 배열로 출력 - request.getParameterValues("첵빡스이름");




<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>


<style>


*{

font-family: 굴림체;

font-size: 24px;

}


</style>


</head>

<body>

<form name = 'frm' methode = 'post' action='./proc3.jsp'>

희망하는 근무 지역은? <br>

<input type = "radio" name = 'area' value = '서울' checked = "checked"> 서울 지역

<input type = "radio" name = 'area' value = '인천'> 인천 지역

<input type = 'radio' name = 'area' value = '경기'> 경기 지역

<input type = 'radio' name = 'area' value = '충청북도'> 충청 지역

<input type = 'radio' name = 'area' value = '강원도'> 강원 지역

<HR>

취미 선택 1<br>

<input type = "checkbox" name = 'hobby1' value='독서'> 독서

<input type = "checkbox" name = 'hobby2' value = '등산'> 등산

<input type = "checkbox" name = 'hobby3' value = '영화'> 영화

<HR>

취미 선택 2<br>

<input type = 'checkbox' name = 'hobby' value = '자전거'> 자전거

<!-- 타입 쓸때 ''나 ""나 상관없나 -->

<input type = "checkbox" name = 'hobby' value = '캠핑'> 캠핑

<input type = "checkbox" name = 'hobby' value = '승마'> 승마

<input type = "checkbox" name = 'hobby' value = '스노우보드'> 스노우 보드

<input type = "checkbox" name = 'hobby' value = '바다낚시'> 바다낚시

<input type = "checkbox" name = 'hobby' value = '주말농장'> 주말농장

<br><br>

<input type = 'submit' value = '등록'>

</form>

</body>

</html>



<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<DIV style = 'font-size: 24px'>

<%

String area = request.getParameter("area");

out.println("지역선택 1: " + area + "<BR>");


String hobby1 = request.getParameter("hobby1");

String hobby2 = request.getParameter("hobby2");

String hobby3 = request.getParameter("hobby3");

if(hobby1 != null){

out.println("hobby1: " + hobby1 + "<br>");

}

if(hobby2 != null){

out.println("hobby1: " + hobby2 + "<br>");

}

if(hobby3 != null){

out.println("hobby1: " + hobby3 + "<br>");

}

String [] hobby = request.getParameterValues("hobby");

if(hobby != null){

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

out.println(hobby[i] + " ");

}

}

%>

</DIV>


</body>

</html>





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



PHP에서 큰 따옴표와 작은 따옴표의 차이점

php 작성시 문자열을 나타내고자 할때는 큰따옴표나 작은따옴표를 써서 해결할수 있다.

<?php
$abc = "abb";
function testFunction () {
    echo 'hi';
    return $dd;
}
print "double quote"; // double quote
print 'single quote'; // single quote

이 예제에서는 큰따옴표와 작은따옴표의 기능이 동일하지만, 상황에 따라 이 두개는 다르게 동작할수도 있다.

예를들어 큰따옴표는 내부 문자열을 파싱을 해서 뿌려주는 반면에 작은따옴표는 내부 내용을 그대로 출력하게 된다.

즉, 아래와 같이 문자열 내부에 변수를 사용하면 큰따옴표는 그 내용을 변수값으로 치환해서 보여준다.

<?php
$a = "Hello world";
print "double quote : $a"; // double quote : Hello world
print 'single quote : $a'; // single quote : $a

또한 개행문자 "\n" 도 큰따옴표 에서는 실제 개행문자로 변환을 하는 반면에 작은따옴표에서는 "\n" 문자열을 그대로 출력한다.

<?php
print "double quote : \n"; // double quote :
print 'single quote : \n'; // single quote : \n

이런 이유로 인해 일부 개발자들은 큰따옴표보다 작은따옴표의 처리속도가 더 빠르다고는 하지만 실제로 그 효과는 미미하다고 볼수 있다.

http://jinolog.com/programming/php/2012/11/01/php-quotation-difference.html



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




세팅 한번 더 ! :>



[07][메모장] 메모장 1.0, 테이블 설계, Sequence 설계
[01] 메모장 SQL 
- Eclipse Project Type: Dynamic Web Project 
                  Name: memo
               Library: /WEB-INF/lib/ojdbc14.jar or ojdbc6.jar 

              Context root: memo <-- web에서 접근하는 프로젝트 이름 
              Content directory: WebContent <-- JSP, CSS, Javascript, 각종 파일 





하나 만들어슴



JSP 개발 방법에는 model1 과 model2가 있는데


모델 원은 구렸습니다

-그럼 왜있어 **


쓰지마라

애초에 왜만들었냐


라고 생각은 했지만 쪼매난대서는 쓴대여

이건 구졌는데 시간이 덜걸림


그래서 쓰는군


뽐은 액션이 있어야하는뎅 -> 없으면 서버로 보낼 수가 없음

응그래요



 
   1) 등록(폼 -> 처리) 
      createForm.jsp --> createProc.jsp --> DBMS 
 
   2) 목록(전체 검색, 특정 레코드 검색) 
      list.jsp ---------------------------> DBMS 
 
   3) 한건 조회(단일 레코드 검색)  
      read.jsp ---------------------------> DBMS 
 
   4) 수정(폼 -> 처리) 
      updateForm.jsp --> updateProc.jsp --> DBMS 
-수정은 2번 :>(리드 & 업데이트)
 
   5) 삭제(폼 -> 처리) 
      deleteForm.jsp --> deleteProc.jsp --> DBMS 
 -비번이 없어서 구냥 확인동작밖에 안함
간단한 메모인것



2. memo 테이블 구조 
>>>>> /WebContent/WEB-INF/sql/memo.sql 

요고 하려고 




이거 만들었음



 
2. memo 테이블 구조 
>>>>> /WebContent/WEB-INF/sql/memo.sql 
----------------------------------------------------------------------------- 
1) 테이블 제작  
- NOT NULL   : INSERT시 필수 입력, 생략 불가능 
- DEFAULT 0  : INSERT시 값을 입력하지 않으면 0이 추가됨. 
- DEFAULT 'A': INSERT시 값을 입력하지 않으면 'A'가 추가됨. 
- NUMBER(3)  : int 계열, -999 ~ +999, 나머지 바이트 재사용  - 내가 1바이트만 쓰면 나머지는 재사용
- VARCHAR(30): String 계열, 문자열 저장, 가변길이 문자열, 
               빈공간 재사용, 한글 15자, 영숫자는 30자 
- DATE       : 날짜 
 
 
-- 임시 영역으로 테이블 삭제, 복구 가능한 휴지통으로 삭제 
DROP TABLE memo; 
 
-- 테이블을 복구 불가능 하도록 삭제 
DROP TABLE memo PURGE; 
 
-- 테이블 생성 
CREATE TABLE memo( 
  memono  NUMBER(6)     NOT NULL,  -- 일련번호, -999999 ~ +999999 
  title   VARCHAR(100)  NOT NULL,  -- 메모 제목, 한글 50자 
  content VARCHAR(4000) NOT NULL,  -- 내용  
  wdate   DATE          NOT NULL,  -- 등록 날짜  
  viewcnt NUMBER(5)     DEFAULT 0, -- 조회수, -99999 ~ +99999  
  PRIMARY KEY(memono)              -- 고유한 값, 중복 안됨    
); 
 
 
 
2) SEQUENCE 객체(MySQL: AUTO_INCREMENT) 
- 레코드는 고유하게 구분되어야하는 제약이 있으며 
  고유한 값을 저장하기위해 데이터를 구분값으로 사용하는 경우가 있고 
  Sequence 즉 일련번호처럼 오라클에서 생성되는 값을 사용하는 경우도 있음. 
 
  START WITH 0: 일련번호 0부터 시작 
  INCREMENT BY 1: 일련번호를 1 씩 증가 
  MINVALUE 0: 최소값 
  CACHE 2: 시퀀스를 테이블에 저장함으로 자주 Update가 발생함으로 
           이것을 줄이기위해 메모리에서 일련번호를 증가시키며 
           CACHE 명령을 이용해 증가 단위를 정의할 수 있음,  
           메모리에서 일련번호 증가, 처리 속도 향상, 
           기본값은 20임, INSERT가 많이 발생하면 기본값을 길게 해줌  
   
  MySQL: memono INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
 
  
  ★ 11g는 서버 종료시 Cache 값을 저장을한 후 재사용 한다.
 
  
  
-- SEQUENCE 객체 삭제 
DROP SEQUENCE memo_seq; 
 
-- SEQUENCE 객체 생성 
CREATE SEQUENCE memo_seq 
START WITH 1 
INCREMENT BY 1 
MINVALUE 0 
CACHE 100; 
 
- CACHE 10: 메모리에서 10개의 일련 번호를 계산하여 사용후
            sequence 테이블 업데이트.
 
- CACHE 20: 메모리에서 20개의 일련 번호를 계산하여 사용후
            sequence 테이블 업데이트.
 
- CACHE 30: 메모리에서 30개의 일련 번호를 계산하여 사용후
            sequence 테이블 업데이트.
 
 
-- dual: 가상 테이블, SQL형식 맞출경우 임시 테이블 사용, 변경하면 안됨
SELECT memo_seq.nextval FROM dual;
 
 NEXTVAL
 -------
       1
//현재 2긴한데 저번 거 가져오고 -> 증가시켜주는거라서 1찍힘
 
-- 현재 sequence 확인(Run SQL Command Line 에서 실행);
SELECT memo_seq.currval FROM dual;
 
       
       
-- create 
-- memo_seq.nextval: 일련번호 자동 생성하여 할당 
--                   (MySQL은 컬럼명을 명시하지 않음). 
-- sysdate: 현재 날짜와 시간(MySQL: now()) 
INSERT INTO memo(memono, title, content, wdate) 
VALUES(memo_seq.nextval, '오늘의 메모', '이전주 토익 시험 준비', sysdate); 
//시스데이트는 에쓰큐엘 now랑 같은거임
 
-- select list, 자주 읽는 메모 먼저 출력  
-- DESC: Descending, ASC: Ascending 
SELECT memono, title, content, wdate, viewcnt 
FROM memo  
ORDER BY memono ASC; 
 
 MEMONO TITLE  CONTENT      WDATE                 VIEWCNT
 ------ ------ ------------ --------------------- -------
      1 오늘의 메모 이전주 토익 시험 준비 2014-08-19 14:38:16.0       0
 
 
INSERT INTO memo(memono, title, content, wdate) 
VALUES(memo_seq.nextval, '읽을 도서', '가메출판사 오라클 11g', sysdate); 
 
INSERT INTO memo(memono, title, content, wdate) 
VALUES(memo_seq.nextval, '수업 복습', '메모 제작', sysdate); 
 
INSERT INTO memo 
VALUES(memo_seq.nextval, '도서구입', 'JSP Web Programming', sysdate, 0); 
 
 
SELECT memono, title, content, wdate, viewcnt 
FROM memo  
ORDER BY memono ASC; -- 오름 차순
 
 MEMONO TITLE  CONTENT             WDATE                 VIEWCNT 
 ------ ------ ------------------- --------------------- ------- 
      1 오늘의 메모 이전주 토익 시험 준비        2014-05-14 12:02:48.0       0 
      2 읽을 도서   가메출판사 오라클 11g        2014-05-14 12:02:49.0       0 
      3 수업 복습   메모 제작                    2014-05-14 12:02:49.0       0 
      4 도서구입    JSP Web Programming          2014-05-14 12:02:50.0       0 
 
      
-- DESC: 내림 차순 정렬      
SELECT memono, title, content, wdate, viewcnt 
FROM memo  
ORDER BY memono DESC; 
 
 MEMONO TITLE  CONTENT             WDATE                 VIEWCNT 
 ------ ------ ------------------- --------------------- ------- 
      4 도서구입    JSP Web Programming          2014-05-14 12:02:50.0       0
      3 수업 복습   메모 제작                    2014-05-14 12:02:49.0       0      
      2 읽을 도서   가메출판사 오라클 11g        2014-05-14 12:02:49.0       0 
      1 오늘의 메모 이전주 토익 시험 준비        2014-05-14 12:02:48.0       0 
 
      
----------------------------------------------------------------------------- 
 
 
      
3. 테이블 작성 실습
 
1) 테이블명: sungjuk
컬럼 목록: 번호, 성명, 국어, 영어, 수학, 총점, 평균
 
Create TABLE sungjuk(
  no   NUMBER(5),
  name VARCHAR(20),
  kuk  NUMBER(3),
  eng  NUMBER(3),
  mat  NUMBER(3),
  tot  NUMBER(3),
  avg  NUMBER(3),
  PRIMARY KEY(no)  
);

//기본이 null -_-

 
 
Create TABLE sungjuk(
  no   NUMBER(5) NOT NULL,
  name VARCHAR(20) NOT NULL,
  kuk  NUMBER(3) NOT NULL,
  eng  NUMBER(3) NOT NULL,
  mat  NUMBER(3) NOT NULL,
  tot  NUMBER(3),
  avg  NUMBER(3),
  PRIMARY KEY(no)  
);
 
 
Create TABLE sungjuk(
  no   NUMBER(5) NOT NULL,
  name VARCHAR(20) NOT NULL,
  kuk  NUMBER(3) DEFAULT 0,
  eng  NUMBER(3) DEFAULT 0,
  mat  NUMBER(3) DEFAULT 0,
  tot  NUMBER(3) DEFAULT 0,
  avg  NUMBER(3) DEFAULT 0,
  PRIMARY KEY(no)  
);
 
//디폴트가 다 낫널인데 저거슨 0이 들어가는거십니다
//아 치킨먹고싶다!!
 
 
2) 테이블명: 뉴스(news)
컬럼 목록: 번호, 제목, 미디어, 기자명, 등록일 
 
DROP TABLE news;
 
CREATE TABLE news(
  newsno INT          NOT NULL,
  title  VARCHAR(100) NOT NULL,
  media  VARCHAR(50)  NOT NULL,
  author VARCHAR(30)  NOT NULL,
  rdate  DATE         NOT NULL,
  PRIMARY KEY(newsno)
);
 
INSERT INTO news(newsno, title, media, author, rdate)
VALUES(1, 'MS, 2016년 구형 IE 브라우저 지원 중단', 'ZDNet', '가길동', sysdate);

 
SELECT newsno, title, media, author, rdate FROM news;
 
 NEWSNO TITLE                      MEDIA AUTHOR RDATE
 ------ -------------------------- ----- ------ ---------------------
      1 MS, 2016년 구형 IE 브라우저 지원 중단 ZDNet 가길동    2014-08-19 15:27:14.0
 
      
-- MySQL 가능      
INSERT INTO news(newsno, title, media, author, rdate)
VALUES(1, "MS, 2016년 구형 'IE' 브라우저 지원 중단", 'ZDNet', '가길동', sysdate);
//IE만 '' 쓰고싶으면  조기 밑에 '''' 로 가야합니다

-- MySQL 가능
INSERT INTO news(newsno, title, media, author, rdate)
VALUES(1, 'MS, 2016년 구형 \'IE\' 브라우저 지원 중단', 'ZDNet', '가길동', sysdate);
 
-- Oracle, single quotation의 추가
INSERT INTO news(newsno, title, media, author, rdate)
VALUES(2, 'MS, 2016년 구형 ''IE'' 브라우저 지원 중단', 'ZDNet', '가길동', sysdate);
//얘만 돌아감 

SELECT newsno, title, media, author, rdate FROM news;
 
NEWSNO TITLE                        MEDIA AUTHOR RDATE
 ------ ---------------------------- ----- ------ ---------------------
      1 MS, 2016년 구형 IE 브라우저 지원 중단   ZDNet 가길동    2014-08-19 15:47:06.0
      2 MS, 2016년 구형 'IE' 브라우저 지원 중단 ZDNet 가길동    2014-08-19 15:47:23.0
 
 
-- Oracle, double quotation의 추가
INSERT INTO news(newsno, title, media, author, rdate)
VALUES(3, '"차량 막무가내 견인한 뒤 요금 과다청구 많아"', '연합뉴스', '가길동', sysdate);
//얘도 홑따옴표 안에 쌍따옴표 넣으면 출력됨 :> 

SELECT newsno, title, media, author, rdate FROM news;
 
 NEWSNO TITLE                        MEDIA AUTHOR RDATE
 ------ ---------------------------- ----- ------ ---------------------
      1 MS, 2016년 구형 IE 브라우저 지원 중단   ZDNet 가길동    2014-08-19 15:47:06.0
      2 MS, 2016년 구형 'IE' 브라우저 지원 중단 ZDNet 가길동    2014-08-19 15:47:23.0
      3 "차량 막무가내 견인한 뒤 요금 과다청구 많아"   연합뉴스  가길동    2014-08-19 15:50:05.0
 
 

파워복붙 필수입니다





















5. 수업

진도: 

hw: 


6. 할것

오늘도 HTML 복붙 하지 말기 ...!! 



뽄트


color - 색상

RGB값이나 색상 키워드 (17가지)


font-family - 글꼴 계통

이건 그냥 궁서체 타임즈 뉴로만 타임즈 쎄리쁘 이런애들


font-size - 글자 크기

픽셀값 아니면 퍼쎈트


font-weight - 글자 두께

볼드 노오말 100 ~400까진 노오말 500~900까진 볼드

숫자로 넣어줘도됨


font-style - 글꼴 스타일

인헤릿 - 엄마따라서

이탤릭 - 기울어져서

오블릭 - 얘도 기울어진것...


text-decoration - 글자 장식

이건 줄 그어주는거 없앨떄 많이 사용 - none

아니믄 언더라인 오버라인 라인스루 블링크 (껌뻑껌뻑) 등등 있음


출처: http://blog.naver.com/wwe700/130185152673





오늘 배운 좋은 것


<style>


*{

font-family: 굴림체;

font-size: 24px;

}


</style>


전체 적용 넘나 좋은것...

이런 개념을 일찍 갈켜주셨어야져 -_-++





'Programming' 카테고리의 다른 글

160408: 20회차  (1) 2016.04.08
160407: 19회차  (1) 2016.04.07
160405: 17회차  (3) 2016.04.05
160404: 16회차  (4) 2016.04.04
160401: 15회차  (5) 2016.04.01
Posted by DAVID

160405: 17회차

Programming 2016. 4. 5. 12:28

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시: http://www.dbguide.net/index.db

    DB관련 개발자 or DBA 시험 :>


   가고자 하는 회사에 맞춰서 - 나처럼 혼파망이면 기본 국가 공인 자격증 공부를 열시미 하는걸러... ㅠㅠ




4. 공부하는 것


헐 벌써 JSP 배움...


[01] Script, Servlet의 이해, JDK8.0, TOMCAT 8 Install

[1] WEB, 서버쪽 프로그래밍과 클라이언트쪽 프로그래밍 개론 

1. 클라이언트 쪽 스크립트 


   - http://www.w3.org
  
   - http://www.w3c.or.kr - 여기 짱 좋음 (예제 많음! ^ㅁ^)
       그리고 여기 가상...어 어쨌든 try it 이라는 virtual html 도 있음 
 
   - HTML API: http://www.w3schools.com/


오늘도 역시 인터넷이 구지군요

<<인터넷이 구진 이유>>

- 왜 옆사람의 노트북은 잘 되는가 -

1. 랜카드가 구짐입니다

2. 이 포스팅이 넘나 무거운 프로세싱입니다

3. 몰라여


티스토리가 css html 지원하는데 이걸로 써먹어도 될 듯 


그리고 오픈소스 개발개발도 참여해보기도 하기!

cvs(cvn?)이나 git으로 굳이 써 봅시다.


어쨌든!


   - 브러우저(Chrome, FireFox, IE)에 HTML, JavaScript, XML 해석기가 설치되어 
     있어 분석과 실행이 되어 출력됩니다. 



그래요 그리고 오페라랑 사파리까지는 됩니다.

다른애는 안됩니다.


이런 거 보고 클라이언트 쪽 스크립트라고 함 (브라우저쪽으로 보내서 니(받는 쪽이)가 처리해라! 하는 것)


나 파이어폭스 시른데!! (-_-) 일단 까라니까 깝시다!

이거 결제가 잘 안되서 시름맨...

액티브 액스 우리의친구가 안 되는 인터넷 표준 입니다.


<<넘나멋진 개발자>>

애플 컴퓨터 + firefox

근데 맥북은 그 **같은 마우스가 열받습니다.

그리고 사파리...!! 뒤로 가기 버튼이 이상한 사파리!

또한 뭔가 아이패드스러운 구성...

게다가 결제도 잘 안된다고! (브라우저의 가치는 결제로 결정된다)

은행 사이트! 한국 사이트 결제! - 아 물론 직구를 하면 괜찮겠지만 직구하면 최소 2주 기다려야한다고...


심지어 컴퓨터 뜯어서 청소하는 것도 못함

그러니까 별로 안 쓰고 싶지만 갖고 싶다




어쨌든 웹개발을 배우려면 이런 걸 다 잘 해야한대...

1. 돈이 많으면

2. 내가 사장하고

3. 잘 하는 놈을 뽑아서 쓰면 될 거 같다


는 생각을 했습니다.



어쨌든


<!-- HTML5 -->

<!DOCTYPE html>


이런 식으로 써야 html5가 먹어줍니다.

아 <!-- --> 는 안써줘도됨


<H1>이미지 출력 

 
   <A href='http://www.samyangranch.co.kr'>
    <IMG src='./sm01.jpg' border='0' title='삼양 대관령 목장으로 가기'> 
이거 타이틀은 대면 뜨는거 있자나 그거임
사진에 - 포인터를 대면 설명 뜨는거 !
a href 이거는 <> 주의하귀
   </A>
   
   </H1>



오 컨테이너다 컨테이너! :>


2. 서버쪽 스크립트 
   - 서버에 설치된 서블릿 컨테이너(Tomcat, Resin, Weblogic)에서 실행됩니다. 

//서버만 있다고 다 되는게 아니라 실행하려면 뭐시기가 많아야 합니다 라는 소리입니다.


   - HTML은 자료를 처리, 저장, 검색하는 기능이 없고 단지 출력하는 기능만 
     가지고 있습니다. 따라서 이런 데이터를 처리하려면 DBMS(Oracle, MySQL)같은 
     데이터베이스가 필요하며, 이 데이터베이스에 접속하기위해서  
     서버스크립트(JSP, PHP, ASP.NET)가 필요합니다. 

//쟤도 그런 소리입니다.


어쨌든 우리는 jsp 배워서 데이타베이스에다가 보낸다는 소리입니다.


   - JSP: SUN의 서버쪽 스크립트 기술, 모든 운영체제 지원, JAVA 기반,  
     Servlet Container(서버)를 설치해야 실행 할 수 있습니다. 
      
   - ASP.NET: MS의 스크립트 기술, MS 운영체제만 지원, C# 기반, 
     윈도우에 웹서버가 기본적으로 설치되어 있으며, .NET Framework를 
     설치해야 실행 할 수 있습니다. 
      
   - ASP: MS의 서버쪽 스크립트 기술, MS 운영체제만 지원, Visual Basic 기반, 
     IIS의 asp.dll이 처리하여 HTML로 결과를 생성함, 별다른 서버설치가 필요 없음, 
     유지보수, 수정이 매우 어렵습니다. 

      // 얘도 노동자가 되면 먹어줍니다. 


   - PHP: 서버쪽 공개 스크립트 기술, 모든 운영체제 지원, C 기반,  
     관련 dll파일이 처리, 속도가 느리고 유지보수, 수정이 매우 어렵습니다. 

//얘는 모든 운영체제를 지원해서 아직도 먹어줍니다. (소규모)



3. http 프로토콜을 이용해서 요청과 응답을 하는 서버환경 확인 
  

요새는 톰캣이 먹어주기 때문에 얘만 깔아도 써버 다 씁니다.






내가 보려고 적었는데 자꾸

서부릿을

servlet이 아니고 servelt으로 써진다 ㅡㅡ



출처: http://blog.naver.com/ktw3722/220674776516


자바 컨테이너하고 servlet 컨테이너는 다른 개념임!

그냥 서버라고 생각하면 됨! :> (갱신) -그리고 심지어 c로 짠 서버임 :>


[2] 서블릿의 이해 
    - Java로 만든 최초의 web관련 언어입니다. 


2. 서블릿을 이용한 구성 
   - CGI에 비해 Thread 기술을 이용하여 동시접속자로 인한 과부하를 많이 해소했습니다. 
   - 자바 기반 Web Application 구축 기술중에 가장 빠른 속도를 가지고 있습니다. 
   - Servlet의 단점은 디자인 부분과 혼합하여 작업하기가 매우 어렵습니다. 
   - 속도는 JSP에 비하여 컴파일 단계가 생략됨으로 빠른 형태를 가지고 있습니다. 
   - JSP가 Servlet으로 변환되는 과정에서 불필요한 코드가 많이 발생하나 
     서블릿은 이 과정이 생략되어 있어 속도가 매우 빠릅니다. 
   - 확장자가 java로 개발되어 .class 입니다.(jsp파일은 확장자가 *.jsp입니다.) 
                                                       

근뎅 어짜피 느린것도 개발맨이 테스트해서 쓸거라 속도 별로 차이 안남... -.,-

임이래여


이게 디자인이 개 어려워서 그냥 쉽게 만듬! 쪠이얘쓰피


3. JSP를 이용한 구성 
   - Servlet의 불편한 디자인 부분을 좀더 간결하게 제작하도록 개선된 서버 스크립트입니다. 
   - 하나의 JSP페이지에는 HTML, JavaScript, Java Code등이 혼합되어 존재하게 됩니다. 
   - 디자이너가 작업한 내용이 JSP 페이지로 변경됩니다. 
   - 변경된 JSP 페이지를 개발자가 코드 작업을 하게됩니다. 
   - 대형 사이트의 경우 유지보수 및 기능 확장이 어려워 나중에 JSP, Beans로 분리되게 됩니다.  

  
     IE  <------  응답 <-----   HTML  <----- JSP --> Servlet으로 변환   
                                                     ------------------------ 
                                                     *.jsp --> *.java --> *.class  




4. JSP + Beans(JAVA class) 를 이용한 구성 
   - JSP는 사이트 구축시 디자이너가 작업하게 되며,  
      일부 jsp 개발자가 코드 작업을 하게됩니다.  
     . 디자인쪽 비중이 매우 큽니다. 
   - BEANS는 콤포넌트 자바 개발자가 Business Logic(Process Logic)를 
      구현하는 목적으로 사용됩니다. 

     . DB관련 INSERT, UPDATE, DELETE, SELECT등  


빈즈가 JSP의 꽃이래여

근뎅 요새는 이딴거 안쓰고 MVC(-_-?) 로 한대영


배우긴 배우는것


MySQL에서 DAO DTO 같은 애들이 BEANS임



  
    IE  <----  응답 <---   HTML  <---  JSP --> Servlet으로 변환   -> JSP Beans 
                                              --------------------- 
                                              *.jsp --> *.java --> *.class  






JDK는 깔려 있으니까 TOMCAT 깔거임!




설치는 그냥 압축 해제해서 실행하면 됨


파일명을 tomcat-8.0로 바꿔줌

D:\javadb\web 요기다가 넣어줌



한글 처리에서 중요한 것 3가지.


1.서버 -> 브라우저로 자원(페이지)를

 보낼 때

그 자원에 한글이 있으면 다 깨짐!

-> 그래서 source 내에서 처리한다! :>


2. 브라우저 -> 서버로 데이터(정보)

를 보낼 때 거기 한글이 있으면

다 깨짐 ^^

↑(GET) 방식으로 데이터를 보낼 때

(GET) = Tomcat의 설정파일에 설정 // <%@ page contentType="text/html;charset=utf-8" %>


지금은 get 방식 하는 중


3. (POST) 방식으로 데이터를 보낼 때

(POST) = source 내에서 처리! :>




5. 작업용 폴더를 생성합니다.
 

   - D:/bigdata02/web/tomcat-8.0/webapps/jsptest                  
     . *.jsp, *.html, *.js, image, css, Folder등이 위치합니다. 

   - D:/
bigdata02/web/tomcat-8.0/webapps/jsptest/WEB-INF 
     . *.xml 환경 설정 파일이 위치, 이곳은 Client가 접속할 수 없습니다. 
     . 반드시 대문자로 폴더명이 되어 있어야 합니다. 
     . 잘못된 예: web-inf, WEB_INF, Web-Inf 대소문자 철저 구분  

   - D:/
bigdata02/web/tomcat-8.0/webapps/jsptest/WEB-INF/classes 
     . 서블릿이 위치 합니다. 
     . JSP Beans등이 위치합니다. 





확장자가 jsp면

<%@ page contentType="text/html;charset=utf-8" %>


가 꼭 필요함! :>


한글처리하면서 첫번째로 필요하던 것:>






실행하려면 

1. 자원 생성(만들었음)

2. 포트 열기 - 8000! :>


. = 현재 페이지하고 같은 경로





귀찮아서 그냥 찍었다...


2. 테스트 
   - D:/bigdata02/web/tomcat-8.0/bin/startup.bat를 실행합니다. 
     . 인식이 안되면 톰캣을 재시작하세요. 

   - http://127.0.0.1:8000/jsptest/test.jsp 
   - http://localhost:8000/jsptest/test.jsp 




구글 원격 데스크톱 사용해 봤음 -.-


세팅은 넘어가시고~~~~~~


[03] JSP 스크립트 기본 문법, 스크립틀릿, 메소드 선언문


01] 서버쪽 스크립트(JSP, PHP, ASP.NET)

   

  


   - 인터넷 브러우저가 읽어서 해석을 할 수가 없고 서버에 설치된 
     서블릿 컨테이너(WAS: Tomcat, Resin, JBoss, Webspere, Weblogic...)에서
     실행됩니다.
 
   - HTML은 자료를 처리, 저장, 검색하는 기능이 없고 단지 출력하는 기능만
     가지고 있습니다. 따라서 이런 데이터를 처리하려면 DBMS(Oracle, DB2, MySQL)
     같은 데이터베이스가 필요하며, 이 데이터베이스에 접속하기위해서 
     서버스크립트(JSP, PHP, ASP.NET)가 필요합니다.
 
   - HTML은 보안성이 없음으로 DBMS에 바로 접속할 수 없습니다. HTML은 누구나
     소스를 열어볼 수 있습니다. 따라서 DBMS에 접속하려면 반드시 서버스크립트를
     써야합니다.
 
   - JSP: SUN의 서버쪽 스크립트 기술, 모든 운영체제 지원, JAVA 기반, 
     Servlet Container(WAS)를 설치해야 실행 할 수 있습니다.
     대부분의 대기업을 포함한 모든 분야의 기업에서 폭 넓게 사용, 
     전자 정부 Framework의 기반 기술.
 
 
[02] JSP 스크립트 기본 문법
     - WEB 환경에서 JAVA를 이용한 DBMS 접근을 처리 합니다.
     - Java Logic 처리를 구현합니다.
     - JAVA를 기반으로하는 문법 입니다.
     - JSP 고유의 태그가 존재합니다.
     - JSP의 출력 결과를 HTML과 CSS로 편집하여 출력 합니다.
 
  
1. 스크립틀릿의 이해
 
   - 일반적인 java 코드가 쓰임: <% ... JAVA 코드 명시 ... %>
 
  
 
2. 선언문(특별한 경우만 사용, 빈즈로 대체하여 사용함으로 권장하지 않음)
 
   - 메소드(함수) 선언: <%! ...JAVA 메소드... %>
 
 
 
3. 표현식(Expression)  - 브라우저에 출력함! :>
   - 단순 출력 기능.

   - <% System.out.print(hap(10, 20)); %>: 콘솔에 출력 
     <% out.print(hap(10, 20)); %>       : JSP 출력 - out은 내장 객체인데 얘는 new 안해도 됨!:>
     <%=hap(10, 20)%> : JSP 출력, 문장 종결자(';')을 사용할 수 없고, 오로지
                        하나의 값만 출력할 수 있습니다.
 

  <% out.print(hap(10, 20)); %>  얘네 둘이 같은 애임    <%=hap(10, 20)%> 
4. 주석
   - <% 
        //            
        /*...~~~...*/ 
     %>


-----------------------ㅋㅋㅋㅋ 자바 파싱된 거 찾는 법
D:\javadb\web\tomcat-8.0\work\Catalina\localhost\jsptest\org\apache\jsp 요깄음 
와 신난다 ^^ java 파일과 클래스 파일을 겟했다 :>



세팅법 - 복잡한데 사실 별 거 없음

오예 밥이다 ㅋㅋㅋㅋㅋㅋ




------------------------넘많이먹었음 ㅋㅋㅋㅋ 이제큰ㅌ일남------------


요기서 서버 연결 확인 할 수 있음 :>





http://127.0.0.1:8000/jsp_test/jspscript.jsp
ㅇ... 이거를 만들거임 -_-);;;


반디캠! :>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
String name = "왕눈이";
int kuk = 90;
int eng = 95;
int tot = kuk + eng;
int avg = tot/2;
%>

<H1> 성적표 </H1>
<DIV style = 'font-size: 24px;'>
-----------------<br>
성명:<% out.println(name); %><br>
국어:<% out.println(kuk); %><br>
영어:<% out.println(eng);%><br>
총점:<%= tot%><br>
평균:<%= avg%><BR> 
<!-- 바로 표현식을 통해서 출력하고 있음 -->
</DIV>

<%
// System.out.println(">>>>name: " + name);
%>

</body>
</html>


http://div.or.kr/html-studying/%3Cdiv%3E%20%ED%83%9C%EA%B7%B8

<div> 태그

개요

Division의 약자로, 레이아웃을 나눌 때 주로 쓰인다

태그 특성상 가로 크기가 영역에 꽉차게 설정되는데, 추후 CSS 의 float 속성을 이용하면 내용에 꽉 붙게 설정할 수도 있다.

가로(width), 세로(height) 크기를 지정할수 있고 테이블 대체하며 레이아웃 배치 용도로 주로 쓰인다.


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

크롬도 http 프로토콜을 쓰긴 하는데

http://localhost:8000/jsp_test/jspscript.jsp 이긴한데
http:// 생략해줘서 (보일 때는) 없어보인당 -.-)





<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>


<%
String[] images = { "tu01.jpg", "tu02.jpg", "tu03.jpg", "tu04.jpg", "tu05.jpg", "tu06.jpg", "tu07.jpg",
"tu08.jpg", "tu09.jpg", "tu10.jpg" };

out.println("<H1> 튜울립 축제</H1> <br>");
for (int i = 0; i < images.length; i++) {
out.println("<A href = 'tulip/" + images[i] + "'>");
out.println("<IMG src = 'tulip/"+images[i]+"' width='200px' height='160px' border='0'>");
out.println("</A>");
}
%>
</body>
</html>


이런 것도 함 ㅇㅇ
이미지는 고정값이라 크기 변화 없음

[04] Page 지시자(Directive), import, 내부 객체의 이해

[01] Page 지시자(Directive)


지시자 ->  <%@ 이렇게 생긴 애 -_-)
인데 
<%@ page contentType="text/html; charset=UTF-8" %> 
저기 앞에 page 있으니까 페이지 지시자

   - contentType: jsp의 출력 형식 지정, 문자 셋을 지정합니다. 
     . 형식: contentType="text/html; charset=UTF-8"  ㅇ -_-);
       <%@ page contentType="text/html; charset=UTF-8" %> 
     . JSP처리 결과가 HTML임으로 MIME Type을 'text/html'과 문자 코드(UTF-8)를 
       선언. 
     . MIME Type: 브러우저가 출력하는 데이터의 종류를 나타낸 코드값, 
       브러우저에게 데이터 타입을 알려줌 
       예)image/jpg는 이미지가 출력됨 
     . 문자 코드는 UTF-8이 표준화 되어가고 있음으로 권장. 
     . XML, Ajax 사용시 주로 UTF-8를 선언합니다. 
     . EUC-KR, UTF-8 중 어떤 문자셋이든 브러우저가 자동으로 한글 코드를 적용시킴.  
     . 대소문자 상관 없음(자료실의 한글 파일명은 UTF-8을 사용할 것). 
     . HTML 태그의 META태그도 일치시켜야함(브러우저용). 
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
       <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> 


   - import: 패키지의 import, 중복 사용가능 합니다. 
     . 자바에서 패키지를 사용하겠다고 선언하는 것과 같습니다. 
     . Exam) <%@ page import="java.util.*" %> 

임뽀트는 중복 사용이 가능함! ^ㅁ^) 응 그러니까 그냥 java util * java util scanner ad sadsada wqewqe qw 이런거랑 같은거임

   - pageEncoding: jsp1.2에 추가된 규약으로 jsp페이지의 문자셋 형식을 
     지정합니다. 
     <%@ page pageEncoding="UTF-8" contentType="text/html" %> 


구냥 따로 문자셋 지정해도 됨미다

1. import속성의 실습, http://127.0.0.1:8000/jsp_test/import.jsp 
- <%@ page contentType="text/html; charset=UTF-8" %>: Tomcat 서버 입장에서의  
  한글 처리 방법 선언 
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">:  
  Web Browser 입장에서의 한글 처리 방법 

>>>>> /WebContent/import.jsp 

'ㅅ');;

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Date" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<DIV
style='font-size: 36px; color: #FFFFFF; background-color: #FF3399;'>
<%
Date date = new Date(); // Date cannot be resolved to a type - 임뽀트 안해도 왜 오류가 안떴지 -_-);;;
out.println(date.toLocaleString());
%>
</DIV>
</body>
</html>

2. 3자리 천단위마다 ','의 출력 

>>>>> /WebContent/comma.jsp 
- ₩를 입력하려면 ㄹ -> 한자


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.text.DecimalFormat"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
DIV {
font-size: 24px;
color: #ffffff;
background-color: #000055;
}

span.s1 {
color: #ff0000;
}

span.s2 {
color: #00ff00;
}
</style>

</head>
<body>
<%!public String comma(long val) {
DecimalFormat df = new DecimalFormat("₩ ###,###,### 원");
String str = df.format(val);
return str;
}%>
<H1>6월 급여 명세서</H1>
<DIV>
본봉:<%=comma(1800000)%>
<br> 수당:<%=comma(200000)%>
<br> 세금: <span class="s1"> <%=comma(100000)%></span> <br>
실수령액:
<%=comma(1900000)%>
<br>
<br> <span class="s2">수고하셨습니다.</span>

</DIV>

</body>
</html>

-------------------------뻘건거 ---- 덧글볼 것 - 


ㅎㅎ^^


[03] 내부 객체의 이해 
   - 개발자가 객체를 생성하지 않아도 jsp페이지가 서블릿 컨테이너(Tomcat)로 
     로딩되면 Tomcat등 서버가 자동으로 생성하는 객체를 말합니다. 
     따라서 개발자는 반복적인 작업을 줄이고 필요한 작업만 할수 있게 됩니다. 

   - jsp페이지는 Web서버 및 Servlet Container라고 하는 복잡한 환경에서 실행이 
     되기 때문에, 실행중에 여러가지 상태정보를 가지고 있어야 하는데, 
     이런 경우에 사용되는 객체들이 내부 객체들입니다. 

   - 내부 객체로 인해 개발자는 좀더 쉽게 JSP 프로그래밍이 가능함. 


1. request 내부 객체 
   
  
얘들은 요청 -> 응답 (정보가 사라짐)...?!

어 이거 사진 찍은 거 들어갈 자리!




  - javax.servlet.http.HttpServletRequest Interface를 Tomcat등 
     서버가 구현한 객체, 자동화된 객체, 개발자는 사용만함. 

   - <FORM>에서 입력되어 브러우저가 전송한 데이터를 Tomcat 서버의 JSP에서 
     처리할수 있도록 객체로 가져오는 역활을 합니다. 

   - 접속한 클라이언트에 대한 정보도 알 수 있습니다. 

   - 주소 표시줄에 한글을 직접 입력시 MS 익스플로러 및 이클립스 내부 브러우저는
     
한글이 깨집니다.(★, Chrome, Swing 브러우저는 안깨짐)


   - ?:값을 명시한다는 뜻

   - &: 접속자가 보내는 값이 2개 이상인 경우  

   - HTML은 Spacebar 공백이 무시됨으로 공백한칸을 표현하기위해 ' '을 사용.



- http://localhost:8000/jsp_test/request.jsp?pay=2000000&name=왕눈이&java=95&jsp=85&spring=70 
퍼런거까지 주소고 ? 부터는 데이타 전달하는 것임...
이게 GET 방식으로 파라메타 전달하는 것

근데 주소창에 한글 있으면 깨짐... ㅠㅠ 

1. http://localhost:8000/jsp_test/request.jsp 
2. /jsp_test/request.jsp 
3. 사용자로부터 입력을 받는 경우 
    급여: 2000000 
4. 사용자로부터 입력된 값이 여러개인 경우 
    급여: 2000000 
    성명: 왕눈이 
    JAVA: 95 
    JSP: 85 
    Spring: 70 
    총계: 250 
    평균: 83 



>>>>> /WebContent/request.jsp 

<%@ page contentType="text/html; charset=UTF-8" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<DIV style='font-size: 28px'>
  1. <%=request.getRequestURL() %><br>
  2. <%=request.getRequestURI() %><br>
  3. 사용자로부터 입력을 받을 경우<br>
      급여: <%=request.getParameter("pay") %><br> 
  4. 사용자로부터 입력값이 여러개인 경우<br>
      급여: <%=request.getParameter("pay") %><br>
      성명: <%=request.getParameter("name") %><br>
  <%   
  int java = Integer.parseInt(request.getParameter("java"));
  int jsp = Integer.parseInt(request.getParameter("jsp"));
  int spring = Integer.parseInt(request.getParameter("spring"));
  int tot = java+jsp+spring;
  int avg = tot / 3;
  %>
      JAVA: <%=java %><br>
      JSP: <%=jsp %><br>
      Spring: <%=spring %><br>
      총점: <%=tot %><br>
      평균: <%=avg %><br>
</DIV>
</body>
</html>


-----------------------------------------------어 만들어본대 (중요한거래)


URI하고 URL 차이

http://localhost:8000/jsp_test/request.jsp?pay=2000000&name=왕눈이&java=95&jsp=85&spring=70 

퍼런거: URL ((프로토콜부터 끝에까지)물음표 앞에까지..!!)

--
실제의 네트웍 경로를 가리키며, 네트웍 상의 리소스 접근시에 사용된다 URL의 첫 번째 부분은 다음과 같은 프로토콜을 명시하는데, 대부분의 경우 http이며, 가끔은 ftp 혹은 mailto이며, 드물게 gopher, news, telnet, file 등을 사용합니다. 이와 같은 URL 프로토콜 부분을 scheme이라고 한다.

URL 
 URL은 보통 브라우저의 주소 창에 입력하는 주소를 URL이라고 할 수 있습니다.
삼성SDS 멀티캠퍼스의 URL은 “http://www.e-campus.co.kr/” 입니다. 
이 주소가 URL이라고 볼 수 있습니다.
또한 좀더 상세하게 찾아보면 다음과 같은 URL도 있을 수 있습니다.  
  
“http://www.e-campus.co.kr/image/img_top.gif”
 
URL은 보통 다음과 같은 내용으로 구성됩니다.  
 프로토콜 http:// 
 도메인 www.e-campus.co.kr 
 자원을 식별할 수 있는 자원의 경로명 /image/img_top.gif 
 
 즉, 위와 같은 URL을 통하여 인터넷 상의 자원을 지정할 수 있습니다. URL을 통하여 지칭할 수 있는 
자원의 종류는 제한이 있는데 URL을 통해서 가져올 수 있는 자원은 유형, 무형의 자원 중 명백하게 
컴퓨터로부터 가져올 수 있는 종류의 것을 말합니다. 
 

[출처] URI 와 URL의 차이 |작성자 혁군


--

두꺼운 퍼런거: URI (응?) - 적다 놓쳤다!!
--
통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.
URI는 자원을 식별할 수 있는 문자열정도로 생각하면 될 것 같다

URI  
 인터넷 상에서 일반적으로 이루어지는 작업은 자원(resource)을 찾고 가져오는 일에 관련되어 있습니다. 
자원이란 인터넷상에 존재하는 html 파일이나 gif 파일 등을 의미합니다. 또한 넓은 의미로 생각한다면 
인터넷을 통하여 얻을 수 없는 자원도 포함합니다. 이러한 상황을 전제로 URI를 정의하면 다음과 같습니다.  
  
URI 란 리소스를 식별하는 문자열이다. 선호도에 따라 우리가 잘 알고 있는 URL(Uniform 
Resource Locator) 또는 URN(Universal Resource Name)의 둘 중 하나의 형태로 쓸 수 
있다. 
 
 위 정의를 보면 URI는 URL이나 URN 둘 중의 하나라고 말하고 있습니다. 둘 중의 하나라면 URI는 URN도 될
수 있고 URL도 될 수 있다는 것을 의미합니다. 그렇다면 URL과 URN은 어떤 의미로 사용할까요?  
--

request 개체의 getRequestURL() 과 getRequestURI() 의 차이

 | Server Oriented/Java & JSP 2012.02.27 10:42
Posted by 하늘아빠

아래와 같이 하면..
getRequestURL() 는 https://www.abc123.com:80/test1.jsp,
getRequestURI() 는 /test1.jsp 라고 나온다.

getRequestURL() 에는 getRequestURI() 내용 외에,
1. http:// 이냐 https:// 이냐의 프로토콜
2. :80 이냐 :8080 이냐의 포트
등이 추가로 표시된다.

http://raisonde.tistory.com/295

보니까 더 어렵다 -_-);;

URI는 인터넷 서비스를 통해 접근하고자 하는 자원의 식별 체계(경로)를 가리킨다. 즉, 어떤 파일이나 어떤 웹페이지에 접근 하고자 할때 사용되는 주소 체계를 말 하는 것이다. URI와 URL의 차이에 대해서 궁금해 하는 사람이 많은데, URL은 URI에 속하는 주소 체계중 하나이다. URI에는 URL말고도 URN, URC 라는 주소체계가 있다. 즉 URI는 이를 모두 포함하는 개념인 것이다.


URI ⊃ {URL, URN, URC}


URL은 우리가 흔히 알고 있는 주소 체계이다. 프로토콜 + 호스트 + 하위 경로로 구성되어 인터넷상의 특정 자원에 접근 할 수 있다. 예를 들어,

http://raisonde.tistory.com/227 

는 http라는 프로토콜로, raisonde.tistory.com 이라는 호스트로 접속하여 227 이라는 경로에 가면 원하는 문서가 있다는 말이다.


URN은 좀 더 복잡하지만 안정된, 영구적인 주소체계이다. URL은 해당 경로에 원하는 자원(파일, 웹페이지 등)이 변경되거나 이동 될 경우 더이상 접근이 불가능 해 지는 문제가 있는데 URN은 이런 자원에 대한 접근 경로를 지속적으로 추적 해 줌으로써 특정 자원에 반영구적으로 접근할 수 있다. 이를 위한 추적 에이전시로는 RSS(Resolution System Switcher)가 있으며 주소 체계는 IETF RFC 2141 에서 정의한다.


URC는 인터넷 상에 존재하는 자원에 관한 저자, 위치, 제목을 표현하는 메타 데이터의 일종이다. URL과 URC를 포함하는 컨테이너적인 체계이다.



ㅎㅎ^^
넹 

http://www.programering.com/a/MjN0UDNwATg.html


test1.jsp=======================

<a href ="test.jsp?p=fuck">A jump to test2</a>

test2.jsp=======================

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

out.println("basePath:"+basePath);
out.println("<br/>");
out.println("getContextPath:"+request.getContextPath());
out.println("<br/>");
out.println("getServletPath:"+request.getServletPath());
out.println("<br/>");
out.println("getRequestURI:"+request.getRequestURI());
out.println("<br/>");
out.println("getRequestURL:"+request.getRequestURL());
out.println("<br/>");
out.println("getRealPath:"+request.getRealPath("/"));
out.println("<br/>");
out.println("getServletContext().getRealPath:"+getServletContext().getRealPath("/"));
out.println("<br/>");
out.println("getQueryString:"+request.getQueryString());

%>

 

Display the results:

basePath:http://localhost:8080/test/

getContextPath:/test 
getServletPath:/test.jsp 
getRequestURI:/test/test.jsp 
getRequestURL:http://localhost:8080/test/test.jsp 
getRealPath:D:\Tomcat 6.0\webapps\test\ 
getServletContext().getRealPath:D:\Tomcat 6.0\webapps\test\ 
getQueryString:p=fuck

In some applications, the unknown user requests must log resources, prompting the user to log on at this time to the current page, remember the user access to the URL, when he after successful login URL to the user according to remember last visited page:

String lastAccessUrl = request.getRequestURL() + "?" + request.getQueryString();




모르겠군! :>

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



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<DIV style = 'font-size: 28px'>
1.<%= request.getRequestURL() %> <br>
2.<%= request.getRequestURI() %> <br>
3.사용자로부터 입력을 받을 경우 <br>
급여: <%= request.getParameter("pay") %><br>
4.사용자로부터 입력값이 여러개인 경우<br>
급여: <%= request.getParameter("pay") %><br>
성명: <%= request.getParameter("name") %><br>

<%
int java = Integer.parseInt(request.getParameter("java"));
int jsp = Integer.parseInt(request.getParameter("jsp"));
int spring = Integer.parseInt(request.getParameter("spring"));
int tot = java + jsp + spring;
int avg = tot /3;
%>
JAVA: <%= java %> <br>
JSP: <%= jsp %> <br>
Spring: <%= spring %> <br>
총점: <%= tot %> <br>
평균: <%= avg %> <br>
</DIV>
</body>
</html>

이러면 내가 막 뭐 하는지 다 볼 수 있음
URL이 거의 마일리 사일러스임
http://localhost:8000/jsp_test/request.jsp?java=100&name=%EA%B8%B8%EB%8F%99%EC%9E%89&java=100&jsp=100&spring=88&pay=100000000



그러니까 post type (레이디 타입) 도 해봅시다

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
table {
width: 80%;
}

table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<table>
<tr>
<th>이름:</th>
<td><input type="text"></td>
</tr>

<tr>
<th>성별:</th>
<td><label><input type="radio" name="gender">남자</label>
<label><input type="radio" name="gender">여자</label></td>
<!-- 이렇게 label로 감싸고 - 이름을 gender로 안 하면 두 개 다 체크 가능하니까 이름을 지정해준다! :> -->
</tr>

<tr>
<th>보유기술:</th>
<td><label><input type="checkbox"> JAVA </label> <label><input
type="checkbox"> JSP </label> <label><input type="checkbox">
MVC </label> <label><input type="checkbox"> SPRING </label> <label><input
type="checkbox"> jQuery</label></td>
</tr>

<tr>
<th>취미:</th>
<td><select>
<option>기술 서적 읽기
<option>게임
<option>영화감상
<option>보드타기
</select></td>

</tr>

<tr>
<th>자기소개:</th>
<td><textarea rows="5" cols="45"></textarea></td>
</tr>
</table>
<!-- 이 상태에서는 별로 기능ㅇ ㅣ없음 -->
</body>
</html>


일단 FORM02를 가져다가 박읍시다.
이 상태에서는 되는 게 없습니다

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
table {
width: 80%;
}

table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<form action="proc.jsp" method="post">
<!-- 뽐 안에 테이브를 넣ㅇㅓ야 보내기 ㄱㅏ ㄴ ㅡ ㅇ ㅎ ㅐ  ㅇ ㅕ  -->

<table>
<tr>
<th>이름:</th>
<td><input type="text" name="name"></td>
<!-- 쟤는 이름을 굳이 넣어줘야한다네 -->
</tr>

<tr>
<th>성별:</th>
<td><label><input type="radio" name="gender" value="남자">남자</label>
<!--  위아래 애들은 는 밸류값을 넣어줘야 한다네 --> <label><input
type="radio" name="gender" value="여자">여자</label></td>
<!-- 이렇게 label로 감싸고 - 이름을 gender로 안 하면 두 개 다 체크 가능하니까 이름을 지정해준다! :> -->
</tr>

<tr>
<th>보유기술:</th>
<td><label><input type="checkbox" value="java"
name="skill"> JAVA </label> <label><input type="checkbox"
value="jsp" name="skill"> JSP </label> <label><input
type="checkbox" value="mvc" name="skill"> MVC </label> <label><input
type="checkbox" value="spring" name="skill"> SPRING </label> <label><input
type="checkbox" value="jquery" name="skill"> jQuery</label></td>
</tr>

<tr>
<th>취미:</th>
<td><select name="hobby">
<option>기술 서적 읽기
<option>게임
<option>영화감상
<option>보드타기
</select></td>

</tr>

<tr>
<th>자기소개:</th>
<td><textarea rows="5" cols="45" name="info"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="전송">
</td>
</tr>
</table>


<!-- 여기 네임이랑 밸류를 무지하게 많이 만들어줬는데 이게 그... post 타입으로 쓰려거... -->


</form>
</body>
</html>


이거 돌리면 404 오류남
이유: proc.jsp 없어서


<% request.setCharacterEncoding("UTF-8"); %>
Post방식 한글처리!


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name = request.getParameter("name");
String gender = request.getParameter("gender");

String[] skill = request.getParameterValues("skill");
String hobby = request.getParameter("hobby");
String info = request.getParameter("info");

/*
다 받아서 -> 
*/
%>



<h1>Post 데이터 전달값</h1>
<div style="font-size: 30px; background-color: #00ff00">
이름: <%=name%><br> 
성별:<%=gender%><br> 
보유기술: <% for(int i = 0; i<skill.length; i++){
out.print(skill[i] + " ");
}%><br>
취미:<%=hobby%><br> 
자기소개: <%=info%>
<br>
</div>


</body>
</html>

이거 짰음 :>

http://www.letmecompile.com/get-post-%EB%B0%A9%EC%8B%9D-%EC%B0%A8%EC%9D%B4%EC%A0%90/

GET, POST 방식 차이점

https://blog.outsider.ne.kr/312

GET과 POST의 차이


5. 수업

진도: 

hw: 


6. 할것


오늘은 스샷을 찍어서 html올릴 것 - 무지하게 무거운가봐 html이


'Programming' 카테고리의 다른 글

160407: 19회차  (1) 2016.04.07
160406: 18회차  (3) 2016.04.06
160404: 16회차  (4) 2016.04.04
160401: 15회차  (5) 2016.04.01
160329: 12회차  (3) 2016.03.29
Posted by DAVID

160404: 16회차

Programming 2016. 4. 4. 10:21

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


WAS 복습하는 중 

쓰타일 - 썁 이랑 쩜

썁은 아이디!

쩜은 클래스

쓰는 법은 그냥 <p id = '아이디'> 랑 <p class = "클래스"> 하면 됨 ㅇㅇ


이제 링크할거임

재미있는 - 우리의친구가 아닌 - 것


사실 이거 저번주에 라이트하게 이미지 파일로 해봄

a href 해가지고 갖다놓는거...를 했었나? -_-);


어 해봤구나 ㅋㅋㅋ img src로 해봄 ㅋㅋㅋㅋ


alt라는 건 이미지가 안 뜰때 엑박 대신 이 문장 띄우는거임 ㅇㅇ 


--------------------------------------------------------------------------여기까지 복습


이제 Table 할 거임


행하고 열을 일단 외워야합니다.


행: <tr>- 테이블 로우

열: <td> - 테이블 어... 왜 셀인데 d요? -.- 어쨌든 테이블...디파인즈 어 쎌...



<tr> <td></td> <td></td> <td></td> </tr>

1행 3열 



<tr> <td></td> <td></td> <td></td> </tr>

<tr> <td></td> <td></td> <td></td> </tr>

2행 3열 


이런 식으로 씀


<table border="1" style="width:100%">

이런 것은 줄하고 쓰타일 넣는거임


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<table>

<tr>

<td>David</td>


<td>Bowie</td>


<td>'ㅅ')b</td>


</tr>


<tr>

<td>데이빗</td>

<td>이 글씨 크기</td>

<td>조정을좀</td>


</tr>



<tr>

<td>해야겠다</td>

<td>그리고 왜</td>

<td>한글이 더작아 무시하냐</td>




</tr>



</table>



</body>

</html>


이거는 



DavidBowie'ㅅ')b
데이빗이 글씨 크기조정을좀
해야겠다그리고 왜한글이 더작아 무시하냐



그냥 이런 식으로 출력이 되어지니까 이쁘게 보더를 넣어줍시다.

<table border ="1">


DavidBowie'ㅅ')b
데이빗이 글씨 크기조정을좀
해야겠다그리고 왜한글이 더작아 무시하냐


이렇게 나옴


더이쁘게 


DavidBowie'ㅅ')b
데이빗이 글씨 크기조정을좀
해야겠다그리고 왜한글이 더작아 무시하냐


간격도 넣어줍시다.

<table border ="1" style = "width:100%">


이렇게 하면 됨.


<table border ="1" style = "width:50%">


요러면 

DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니

넘는것...


쪼만해짐.


<style>
table, th, td {
    border: 1px solid black;
}
</style>


solid는 선 색깔 넣어줌 ㅇㅇ


DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...

<style>

table, th, td{

border: 10px solid orange;

}

</style>



이렇게 예쁘게 한번에 만들 수 있음.



2. border-collapse: collapse;


<style>
table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
}


쟤 생긴거 보면 중간에 비어있는 - 약간 뜬... 그건데

보더-콜랍스 : 콜랍스 하면 저 간격이 없어짐


DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...


아까 위에 애랑 같은 애인데 collapse 하니까 이렇게 보임




이제 <TH> 를 해봄

뜻: 헤더 셀을 정의해줌

응 셀 첫번째 줄 이브게 하는거임



<style>

table, th, td {

border: 10px solid orange;

border-collapse: collapse;

}


th, td {

padding: 5px;

}

</style>


요렇게 바꾸고

맨 윗줄을

<tr>
<th>David</th>

<th>Bowie</th>

<th>'ㅅ')b</th>

</tr>

이렇게 td를 th로 써주면 

DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...



이렇게 중간정렬 + 굵기 바꿔줌

padding 은 cell 안쪽의 중심으로 border 준다는 얘기...인...데...


ㅎㅎ 5px만큼 글씨 위아래 띄워주는 거래...


저거 th라고 안 쓴 td 애들도 적용이 됨 :>




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


2시간째! :>


html은 FireFox 같은 걸로 많이 쓰는데 얘는 웹 표준을 준수하는 양반임

- 그래서 결제가 안된다고!!!!! 으아아 액티브 앢쓰


-ㅅ-


익스플로러 - 우리의친구

크롬 - 애매한 우리의친구


그러니 크롬을 써야 합니다 라고 선생님이 그랬습니다.

그래도 결제할 때는 익스플로러를 쓰고싶다!


야! 마이크로소프트 소리 안들리게 해라!


ㅇㅇ 어쨌든 


  <colgroup>
    <col span="2" style="background-color:red">
    <col style="background-color:yellow">
  </colgroup>


col span = "n"  : n개를 병합하세요

콜... = 콜럼 = 컬럼 의 스타일


DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...


table, th, td {
border: 10px solid green;
border-collapse: collapse;
}

줄의 굵기를 더하고 녹색을 끼얹은 뒤


<colgroup>

<col span = "2" style = "background-color: yellow">

<col style ="background-color:red">

</colgroup>

둘째 컬럼 까지는 노랑색으로 남기고 다른 애들은 뻘건 색을 주고

글씨는 기본 색인 검정 색으로 남겨두어

수박 콜라보 완성


어 다양한 바리에이션으로


DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...


이렇게 만들어도 됨 ㅋㅋㅋㅋㅋㅋㅋ


ㅇㅇ 그리고 이제




cell padding 할거임


보더 안쪽: 패딩

보더 바깥쪽: 마진


DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...

th, td {
padding: 15px;
}

DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...

이건 
th, td {
padding: 1px;
}

ㅇㅇ 안쪽에 공간을 줬다뺐었다 하는 것



근데 우리의 친구

border-spacing도 있음


okay... yes we can...

DavidBowie'ㅅ')b
샘스미스앨범
사고싶다1알콜머니넘는것...

왜 아무 일도 없나요

테이블 속성이 두개여서 입니다


전체 복붙을 할만한 가치가 있는 코드


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>html1 연습</title>


<style>

/*table, th, td {

border: 1px solid lightgreen;

border-collapse: collapse;

}*/



table{

border-spacing: 15px;


}

</style>


</head>

<body>

<table>

<colgroup>

<col span = "2" style = "background-color: red">

<col style ="background-color:yellow">

</colgroup>

<tr>

<td>David</td>

<td>Bowie</td>

<td>'ㅅ')b</td>

</tr>


<tr>

<td>샘</td>

<td>스미스</td>

<td>앨범</td>

</tr>


<tr>

<td>사고싶다</td>

<td>1알콜머니</td>

<td>넘는것...</td>

</tr>


</table>

<p>왜 아무 일도 없나요 </p>

<p>테이블 속성이 두개여서 입니다</p>

</body>

</html>


주석이 /**/ 이란 것


이제 새로운 html을 만들 겁니다.


잘있어라!



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

table, th, td {
    border: 1px solid black; //씨꺼먼선
    border-collapse: collapse; //어...한줄로만드는거십니다
}
th, td {
    padding: 5px;
    text-align: left;    // 기본값이 굵고 / 가운데 ㅋㅋㅋㅋㅋ 인데 강제로 왼쪽으로 보내는 것 ㅋㅋㅋ
}


이름전화
빌게이츠555 555 333

666 666 333


이 예제는 왜 이렇게 나오냐면


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style>

table, th, td {

border: 1px solid purple;

border-collapse: collapse

}


th, td {

padding: 5px;

text-align: left;

}

</style>



</head>

<body>

<table>

<tr>

<th>이름</th>

<th colspan="2">전화</th> - column 두개를 합치는 것...

</tr>



<tr>

<td>빌게이츠</td>

<td>555 555 333</td>

<td>666 666 333</td>

</tr>

</table>



</body>

</html>



근데 만약에 colspan을 2로 해놓고 

밑에 column을 5개 주면 


이름전화
빌게이츠555 555 333666 666 333666 666 333666 666 333


이렇게 빠짐


+ 왜이렇게 귀가 가렵냐



그리고 로우스팬은



<!DOCTYPE html>

<html>
 
<head>
<style>
table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
}
th, td {
    padding: 5px;
    text-align: left;    
}
</style>
</head>
 
<body>
 
<h2>Cell that spans two rows:</h2>
<table style="width:100%">
  <tr>
    <th>Name:</th>
    <td>Bill Gates</td>
  </tr>
  <tr>
    <th rowspan="2">Telephone:</th> - 얘 밑으로는 (어 이건 그 줄 합치는거라서) - th가 없어야함
    <td>555 77 854</td>
  </tr>
  <tr>
    <td>555 77 855</td>
  </tr>
</table>
 
</body>
</html>

내가 썼는뎅


내가 h2라고 무시하냐

ㅇㅇ

이름:도날드 트럼프
전화:123 123 1234
123 345 6789

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table, th, td {
border: 1px solid purple;
border-collapse: collapse;
}

th, td {
padding: 5px;
text-align: left;
}
</style>

</head>
<body>
<h2>내가 h2라고 무시하냐</h2>
<h1>ㅇㅇ</h1>

<table>
<tr>
<th>이름:</th>
<td>도날드 트럼프</td>
</tr>

<tr>
     <th rowspan="2">전화:</th> 
     <!--  얘가 아랫줄 애까지 캐리합니다 -->  저게 주석
<td>123 123 1234</td> <!-- 나는야 한줄 -->
</tr>

<tr>
<td>123 345 6789</td> <!-- 나는야 둘째줄 -->
</tr>
</table>

</body>
</html>



로우 스팬이 살짝 더 헷갈림!

-ㅅ-


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


아! 이제 표에 색상 넣는 거 할건데

색상표 editplus 에서 지원하기는 하는데 

저는 색덕후이기 때문에 인터넷에서 찾아서 쓸겁니다.




<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>tired of typing title</title>

<style>

table, th, td {

border: 10px solid purple;

border-collapse: collapse;

}


th, td {

padding: 5px;

text-align: left;

}


table#t01 {

width: 50%;

background-color: #f1f1c1;

}

</style>



</head>

<body>


<!--4행 3열짜리 표인데 복붙할겁니다. -->

<table style="width: 100%">

<tr>

<th>First Name</th>

<th>Last Name</th>

<th>Points</th>

</tr>

<tr>

<td>Jill</td>

<td>Smith</td>

<td>50</td>

</tr>

<tr>

<td>Eve</td>

<td>Jackson</td>

<td>94</td>

</tr>

<tr>

<td>John</td>

<td>Doe</td>

<td>80</td>

</tr>

</table>



<br>

<!-- 왜 2개인지 모르겠...이아니라 아 아이디 비교군 -->


<table id="t01"> - 요렇게 쓰면 아까 쓰타일 만들어놓은거 적용 가능

<tr>

<th>First Name</th>

<th>Last Name</th>

<th>Points</th>

</tr>

<tr>

<td>Jill</td>

<td>Smith</td>

<td>50</td>

</tr>

<tr>

<td>Eve</td>

<td>Jackson</td>

<td>94</td>

</tr>

<tr>

<td>John</td>

<td>Doe</td>

<td>80</td>

</tr>

</table>

</body>

</html>


First NameLast NamePoints
JillSmith50
EveJackson94
JohnDoe80


First NameLast NamePoints
JillSmith50
EveJackson94
JohnDoe80

이렇게 생겼음.

table#t01 {
width: 50%;
background-color: orange;
color:white;
}

그냥 폰트 칼라 이름은 칼라였습니다 (간단)

table#t01 tr:nth-child(even) {
background-color: #eee;
}

table#t01 tr:nth-child(odd) {
background-color: #fff;
}
이거 새로 배웠는데

이거는 even일 경우 - 짝수줄
odd 일 경우 - 홀수줄에 적용이 되는 겁니다.

First NameLast NamePoints
JillSmith50
EveJackson94
JohnDoe80

First NameLast NamePoints
JillSmith50
EveJackson94
JohnDoe80

이렇게 생긴 표를 출력 가능 :>


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<style>

table {

width: 100%;

}

/* 왜 스타일에서는 이게 주석일까

어쨌든 저건 기본 테이블 스타일입니다.*/

table, th, td {

border: 1px solid black;

border-collapse: collapse;

}


th, td {

padding: 5px;

text-align: left;

}


table#t01 {

background-color: black;

color: white;

}


/*

처음 보는 양반

*/

table#t01 tr:nth-child(even) {

background-color: #eee;

}


table#t01 tr:nth-child(odd) {

background-color: #fff;

color: black;

}

</style>



</head>

<body>

<table>

<tr>

<th>First Name</th>

<th>Last Name</th>

<th>Points</th>

</tr>

<tr>

<td>Jill</td>

<td>Smith</td>

<td>50</td>

</tr>

<tr>

<td>Eve</td>

<td>Jackson</td>

<td>94</td>

</tr>

<tr>

<td>John</td>

<td>Doe</td>

<td>80</td>

</tr>

</table>


<br>


<table id="t01"> - 위에서 다 선언 해놓으면 이렇게 id만 가져다가 쓰면 되니까 편합니다 :>

<tr>

<th>First Name</th>

<th>Last Name</th>

<th>Points</th>

</tr>

<tr>

<td>Jill</td>

<td>Smith</td>

<td>50</td>

</tr>

<tr>

<td>Eve</td>

<td>Jackson</td>

<td>94</td>

</tr>

<tr>

<td>John</td>

<td>Doe</td>

<td>80</td>

</tr>

</table>

</body>

</html>


JillSmith50


이게 웹브라우저에서는 하얀색인데 왜 복붙하면 까만색 되는지 의문...



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


3시간째 :>



리쓰트



이런것입니다.


리스트 뜻: 리스트


약자가 li임 -_-;; 

<ul>  <li> </li> </ul> 이런 식으로 만들면 됨

unordered list라서 ul인것 -똑똑한 데이빗 (x) -> 그냥 써있었던 것... -.-


마치 테이블과 같이 만들면 됨



지금 기본 예제는 인라인 유형으로 만들거임.


  • 커피
  • 앤
  • 티비
  • 밀크
  • 앤
  • 북
  • 뉴스
  • 앤
  • 브래드
  • 핸드폰
  • 엔
  • 라면


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<ul style = "list-style-type:disc">

<li>커피</li>

<li>앤</li>

<li>티비</li>

</ul>

<ul style = "list-style-type:circle">

<li>밀크</li>

<li>앤</li>

<li>북</li>

</ul>

<ul style = "list-style-type:square">

<li>뉴스</li>

<li>앤</li>

<li>브래드</li>

</ul>

<ul style = "list-style-type:none">

<li>핸드폰</li>

<li>엔</li>

<li>라면</li>

</ul>


</body>

</html>



응 별게 없군요

별로 안 예쁘잖아요


그러니까 순서가 있는 리스트를 배워봅니다.


Ordered HTML Lists래

OL! - 오피스 레이디가 아닙니다.



넘나 좋은 끌어다가 놓기 ㅋㅋㅋㅋㅋ


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<ol type="1">

<li>잉</li>

<li>왜</li>

<li>워닝이</li>

</ol>


<ol type = "A">

<li>뜨는</li>

<li>걸까</li>

<li>의심</li>


</ol>


<ol type = "a">

<li>스럽다</li>

<li>타이핑</li>

<li>오류</li>


</ol>


<ol type = "I">

<li>인가</li>

<li>알수가</li>

<li>없네</li>


</ol>

<ol type = "i">

<li>이런</li>

<li>슬픈</li>

<li>일이</li>


</ol>

</body>

</html>


왜 워닝이 뜨는 지 모르겠지만 잘 나오긴 하는군요.


  1. 잉
  2. 왜
  3. 워닝이
  1. 뜨는
  2. 걸까
  3. 의심
  1. 스럽다
  2. 타이핑
  3. 오류
  1. 인가
  2. 알수가
  3. 없네
  1. 이런
  2. 슬픈
  3. 일이


Attribute (type) is obsolete. Its use is discouraged in HTML5 documents.

응 그래요 ^^


얘가 하란 대로 해도 안 되니까 그냥 씁시다




그리고 나서는 Description Lists를 배우겠습니다.


<dl> tag defines a description list. -얘가 디스크립션 리스트 
<dt> tag defines the term (name) - 얘가 리스트명
<dd> tag defines the data (description). - 얘가 리스트 데이타 인것


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1>나는 H1로 쓰고싶다!</h1>

<h2>Description List는 자판기같은것</h2>

<dl>

<dt>코피</dt>

<dd>믹스로 통일</dd>

<dd>뭘 눌러도 같은 맛</dd>

<dt>우유</dt>

<dd>어린이용(분유)</dd>

</dl>


</body>

</html>


나는 H1로 쓰고싶다!

Description List는 자판기같은것

코피
믹스로 통일
뭘 눌러도 같은 맛
우유
어린이용(분유)


Description List가 가장 맘에 드는군

정렬이 훌륭해


4. lists inside lists

복붙!


<!DOCTYPE html>
<html>
<body>
 
<h2>A Nested List</h2>
 
<ul>
  <li>Coffee</li>
  <li>Tea
    <ul>
    <li>Black tea</li>
    <li>Green tea</li>
    </ul>
  </li>
  <li>Milk</li>
</ul>
 
</body>
</html>

이렇게 하면 밑에것처럼 나옴

A Nested List

  • Coffee
  • Tea
    • Black tea
    • Green tea
  • Milk

<!DOCTYPE html>

<html>

<body>


<h2>A Nested List</h2>


<ul>

<li>Coffee</li>

<li>Tea

<ul>

<li>Black tea</li>

<li>Green tea

<ul>

<li>ice green tea</li>

<li>hot green tea</li>

</ul>

</li>

</ul>

</li>

<li>Milk</li>

</ul>


</body>

</html>



A Nested List

  • Coffee
  • Tea
    • Black tea
    • Green tea
      • ice green tea
      • hot green tea
  • Milk

더 깊게 만들 수도 있음 'ㅅ'



5. Horizontal Lists


얘는 메뉴 만들 때 좋음 :>!


오 예쁜데?


ul#menu li { <- 여기 메뉴 담에 한칸 띄운 게 li를 하위요소로 갖는 걸 표현함 :>
    display:inline; - 옆으로 표현할래! (리스트인데도 밑으로 안감)
}
ㅇㅇ 어쨌든 다시 ㄱㄱ


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
ul#menu li{
display:inline;
}
</style>
</head>
<body>
<h2>Horizontal List</h2>
<ul id ="menu">
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
<li>PHP</li>
</ul>


</body>
</html>

Horizontal List

  • HTML
  •  
  • CSS
  •  
  • JavaScript
  •  
  • PHP
리스트인데도 옆으로 갑니다.
위의 사진처럼 예쁘게 만드려면 이제 쓰타일을 더 줍니다.

 
ul#menu li a {
    background-color: black;
    color: white;
    padding: 10px 20px; - 위 아래 패딩
    text-decoration: none; - 줄 긋기 없는것
    border-radius: 4px 4px 0 0; - 어... 이거 둥글게 처리하는건데 위 두군데 (뒤에 0 0은 밑 두군데)  
}

이거는 li안에 a라는 하위요소가 또 있는 것

앵커 테이블은
a href = "" 라는 식으로 쓰는데 href 라는 속성을 통해서 쓰는 것

The href attribute specifies the URL of the page the link goes to.

If the href attribute is not present, the <a> tag is not a hyperlink.


래! :> 
URL 로 링크할 때 쓰는 것
근데 크롬 - 익스플로러 - 파이어폭스 - 오페라 - 사파리만 지원함

Syntax

<a href="URL">
이렇게 생김

출처: http://www.w3schools.com/tags/att_a_href.asp

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
u#menu{
padding:0; /* 패딩제로! = 보더값 0인것! -.-)*/
}

ul#menu li{
display:inline;
}

ul#menu li a{
background-color: black;
color: white;
padding: 10px 20px;
text-decoration : none;
border-radius: 4px 4px 0 0;
}

ul#menu li a:hover{ /*hover쓰니까 마우스 대면 이걸로 색이 바뀜*/
background-color: yellow;
color: blue;

}


</style>
</head>
<body>
<h2>Horizontal List</h2>
<ul id ="menu">
<li><a href = "/html/html.jsp">HTML</a></li>
<li><a href ="">CSS</a></li>
<li><a href ="">JavaScript</a></li>
<li><a href ="">PHP</a></li>
</ul>


</body>
</html>

Horizontal List

  • HTML
  •  
  • CSS
  •  
  • JavaScript
  •  
  • PHP

여기선 안 움직이는데 a의 hover 속성때문에 html 파일로는 색 잘 바뀜.

list04.html


이렇게.


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

오예 4시간!

이거 끝나면 점심입니다


HTML FORMS!


뽐은 그... 입력값 받는 거임

사용자님이 입력을 받으면 -> 이걸 써버로 보내야함


그러기 위해서 


 - <form> 요소로 선언한다.
 - 다른 type의 <input>요소를 가진다. checkboxes, radio buttons, submit buttons
   등등 


그렇습니다


1. <form>요소의 중요속성
 - action 속성 : 사용자가 입력한 값을 
 server-side script로  보내면서 요청할 webpage를
   선언한다. - 응 그러니까 내가 쓴걸 서버로 보내는 기능 (=데이타 넘어가유)


 - method 속성 :  사용자가 입력한 값을 Server-Side Script로 보낼때 HTTP Method를
   설명한다(GET or POST) -


   GET  - 민감한 정보를 보내지 않고 페이지 요청시 사용함, 주소에 서브밋되는 정보가
            노출됨 - 보이면 안될까 하는 생각을 하지만 일단 ㅇㅋㅇㅋ

   POST- 민감한 정보를 보내면서 페이지 요청시 사용함, 주소에 서브밋되는 정보가
            노출되지 않음. - 얘가 더 세심한 레이디인가봄... 노출금지...

  <form action="action_page.jsp" method="GET">   이경우 말고도 GET 방식의 페이지
                                                                      요청이 많음 ㅇㅇ 

근뎅 암것도 안쓰면 걍 get임 


  <form action="action_page.jsp" method="POST"> 이경우만 POST 방식의 페이지 요청임

그러니까 post를 많이 쓰는 것인가 봅니다.



2. Grouping Form Data with <fieldset>

- <fieldset> 폼안에서 관련있는 data를 분류

- <legend> <fieldset>의  타이틀

그렇습니다. 이것은 그루핑하려고 있는 폼의 필드셋 입니다. - 해보면 압니다.




<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>form test 1</title>

</head>

<body>

<form action = "action_page.php">

<fieldset> <!-- 필드셋은 데이터를 분류해줌 마치 네모처럼 -->

<legend>개인 정보: </legend> <!-- 얘는 필드셋 제목임 -->

First name:<br>

<input type = "text" name = "firstname" value="미키"> <- 얘는 폼의 하위 요소인 인풋인데 

얘 타입에 따라서 이름도 쓰고 뭐도 하고 그러는 거임 얘는 텍스트니까 미키 적어도 됨


<br>

Last name:<br>

<input type = "text" name = "lastname" value="마우스">

<br><br>

<input type = "submit" value = "확인"> <- 얘는 버튼 모양임 근데 연결을 안해놔서 눌러놔도 별거 없음다

</fieldset>

</form>

</body>

</html>


개인 정보:First name:
 
Last name:
 



여기선 네모가 빠졌는데 사실 



이렇게 생김 이게 필드셋!


두개하면 네모가 두개!



+ 버튼친구들과의 시간


<input type = "submit" value = "확인">

<input type = "button" value = "무늬만">


이게 둘다 똑같이 생겼는데

써브밋 - 기능이 있음

버튼 - 버튼 모양인데 얘만 있어서는 기능이 없시다


 


그래서 action 기능을 써야함 - onclick="뭔행동을하라고!" - 이런거 쓸 떄 씁니다.


<input type = "button" value = "무늬만" onclick= "david.php"> <- 이런 식으로 사용하세요


그리고 이런 애도 있음 <input type = "reset" value = "취소">

- 얘는 기본값 말고 썼던 애들 다 취소해줌 :>


이런 애도 있음 <input type = "image" src = "iguana.gif">



서브밋 - 얘는 누르면 ㅇㅋ 데이타 ㄱㄱ해줌

버튼 - 얘는 액션 기능 필수

리셋 - 리셋 기능

이미지 - 얘도 서브밋처럼 기능 있음


<input type = "image" src = "cat.gif" style = "width: 150px">

이렇게 하면 크기도 조절 가능





그리고 샘플


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style type="text/css">

table {

width: 80%;

}


table, th, td {

border: 1px solid black;

}

</style>

</head>

<body>

<table>

<tr>

<th>이름:</th>

<td><input type="text"></td>

</tr>


<tr>

<th>성별:</th>

<td><input type="radio"> 남자 <input type="radio">

여자</td>

</tr>


<tr>

<th>보유기술:</th>

<td><input type="checkbox"> JAVA <input type="checkbox">

JSP <input type="checkbox"> MVC <input type="checkbox">

SPRING <input type="checkbox"> jQuery</td>

</tr>


<tr>

<th>취미:</th>

<td><select>

<option>기술 서적 읽기

<option>게임

<option>영화감상

<option>보드타기

</select></td>


</tr>

<tr>

<th>자기소개: </th>

<td>

<textarea rows = "5" cols = "45"></textarea>

</td>

</tr>


</table>


</body>

</html>


이름:
성별: 남자  여자
보유기술: JAVA  JSP  MVC  SPRING  jQuery
취미:
자기소개:



요런 거 하고 있음 :>


<tr>

<th>성별:</th>

<td><label><input type="radio" name = "gender">남자</label>

<label><input type="radio" name = "gender">여자</label></td>

<!-- 이렇게 label로 감싸고 - 이름을 gender로 안 하면 두 개 다 체크 가능하니까 이름을 지정해준다! :> -->

</tr>


여기 고쳤음


레이블을 사용하면 문자열을 클릭해도 - 굳이 체크박스 쪼만한거 안 눌러도 체크가됨! :>

사용자 배려하쉬는것


html은 db 연결도 못 하고 구졌습니다 - 그리고 그의 친구 javascript도 db 연결도 못하고 구졌습니다.

그래서 내가 CSS (-서버 스크립트 ... s...)를 배워서 이거랑 연결해야함!


야! 잘만들었으면 내가 1개만 배우면 되잖아! -_-+


어 그래서 벌써 css 배워야함 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


기본만 배우고 검색잼으로 배워야합니다.


http://www.w3schools.com/tags/att_a_href.asp


ㅇㅇ... w3필수쉰것


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




밥먹고 나니까 렉쩔어서 새로 만들었음

아까는 HTML


이번엔 html with css


CSS 씬택스




이런거 함 



선언 -_-;; 디크라레이션...

프로퍼티: 밸류



<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style>

h1{background-color: #6495ed;}


p{background-color: #e0ffff;}


div{background-color: #b0c4de;}




</style>


</head>

<body>


<h1>시에스에스 백그라운드 칼라 이그잼플</h1>

<div>

디스이스 어 택스트 인사이드 어 디아비 앨리맨트

<p>디즈 패래그래프 해즈 이스 오운 백그라운드 컬러</p>

위아 스틸 인 더 다이브이 에리멘트


</div>


</body>






<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style>

body {

background-image: url("tree.jpg"); /* 이미지를 백그라운드에 깔아줌*/

background-repeat: no-repeat; /* 반복없다 */

}

</style>


</head>

<body>

<h1>Hello World!</h1>

<p>W3Schools background image example.</p>

<p>The background image is only showing once, but it is disturbing

the reader!</p>



</body>

</html>




이렇게 반복없이 1번 나옴



이걸 이렇게 수정하면


body {

background-image: url("tree.jpg");

background-repeat: no-repeat;

background-position: right top;

margin-right: 200px;

}




이렇게 오른쪽 위로 붙음 - 크기를 올려도 저기 끝에 붙어있음




그리고 자바스크립트랑 같이 하는 거는




<!DOCTYPE html>

<html>

<head>

<style> 

#myDIV {

    width: 300px;

    height: 300px;

    background: lightblue url('tree.jpg') no-repeat;

    color: white;

    overflow: auto;

}

</style>

</head>

<body>

 

<p>Click the radio buttons and scroll the DIV element to see the effect of the background-attachment property:</p>

 

<form name="myForm">

  <input type="radio" name="myAtt" value="scroll" onclick="myFunction()" checked>scroll

  <input type="radio" name="myAtt" value="local" onclick="myFunction()">local

</form>

 

<div id="myDIV">

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

  <h1>Hello</h1>

</div>

 

<script>

function myFunction() {

    if (document.forms["myForm"]["myAtt"][0].checked) {

      document.getElementById("myDIV").style.backgroundAttachment = "scroll";

    } else {

      document.getElementById("myDIV").style.backgroundAttachment = "local";

    }

}

</script>

 

</body>

</html>

 


이거 ... -_-);;

scroll 하면 - 나무가 위에 붙은게 따라서 움직이고

local -하면 나무가 그냥 위에 붙어있고 안움직임!


css - 액션 작업 해주는 것

 

<form name="myForm">

  <input type="radio" name="myAtt" value="scroll" onclick="myFunction()" checked>scroll

//on으로 시작하는건 자바 스크립트 함수 호출 - myFunction이라는 것 호출함 - 밑에 내가 만들었음

//걔가 checked 되어있으면 밑에 myFunction 함수가 



  <input type="radio" name="myAtt" value="local" onclick="myFunction()">local

</form>




<script>

function myFunction() {

//도움 객체(도큐먼트 접근 가능한 객체).이 도큐멘트 안의 폼들로 인해 생긴 객체를 접근 하겠다는 얘기임...

//그중에서 myForm이라는 애를 접근함 (아까 쟤) 의 myAtt인애를 접근함

    if (document.forms["myForm"]["myAtt"][0].checked) {// = myform->myatt가 체크되어있으면

      document.getElementById("myDIV").style.backgroundAttachment = "scroll";

//아이디가 myDiV라는 애를 찾는 메소드

    } else { //첫번째 거가 체크가 안 되어 있으면 2번째 거가 체크되어있을 경우니까 local을 의미함

      document.getElementById("myDIV").style.backgroundAttachment = "local";

    }

}

</script>




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




인터넷이 짱 느립니다.

<style>

div{

background-color: lightgrey;

     width: 300px;

     padding: 25px;

     border: 25px solid navy;

     margin: 25px;

}


</style>






<!DOCTYPE html>

<html>

<head>

<style>

p {

    background-color: yellow;

}

 

p.ex {

    margin-top: 100px;

    margin-bottom: 100px;

    margin-right: 150px;

    margin-left: 50px;

}

</style>

</head>

<body>

 

<p>This is a paragraph with no specified margins.</p>

<p class="ex">This is a paragraph with specified margins.</p>

 

</body>

</html>


이러면 margin이 들어가서 하나는 그냥 쭉------------

하나는 중간에 삑


margin 들어가는 순서- top right bottom left - 시계방향!

위 - 오른쪽 - 아래 - 왼쪽



마진 - 패딩 들어가는 순서


1234 = 위오른쪽아래왼쪽

123 = 위 (오른쪽왼쪽) 아래

12 = (위아래) (오른쪽왼쪽)

1 = 모두 같은 것


p.padding {

background-color: green;

    padding-top: 25px;

    padding-right: 50px;

    padding-bottom: 25px;

    padding-left: 50px;

}

이거하고

p.padding {

background-color: green;

    padding: 25px 50px;

}


이거하고 같은 결과값인 것이다.




이제 border의 스타일...







<!DOCTYPE html>

<html>
<head>
<style>
p {
    border-top-style: dotted;
    border-right-style: solid;
    border-bottom-style: dotted;
    border-left-style: solid;
}
</style>
</head>
<body>
 
<p>2 different border styles.</p>
 
</body>
</html>



이런 것도 있음


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style>

p{

border: 3px solid orange;

outline: green dotted thick;

} 

</style>

</head>

<body>


<p><b>Note:</b> IE8 supports the outline properties only if a !DOCTYPE is 

specified.</p>

 


</body>

</html>



이렇게 잘 나온다.





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


[09]CSS Display and Visibility


이제 이런거 함


<!DOCTYPE html>

<html>

<head>

<style>

h1.hidden {

    visibility: hidden;

}

</style>

</head>

<body>

 

<h1>This is a visible heading</h1>

<h1 class="hidden">This is a hidden heading</h1>

<p>Notice that the hidden heading still takes up space.</p>

 

</body>

</html>


이러면 클래스명이 hidden인거는 내용이 안보임 - 끝


<!DOCTYPE html>

<html>

<head>

<style>

h1.hidden {

    display: none;

}

</style>

</head>

<body>

 

<h1>This is a visible heading</h1>

<h1 class="hidden">This is a hidden heading</h1>

<p>Notice that the hidden heading does not take up space.</p>

 

</body>

</html>

 


얘도 그의 친구임




display:none - 공간도 안 잡고 그냥 없는 것

Visability: hidden - 공간은 가지고 있는데 안 보이는 것


2.CSS Display - Block and Inline Elements


역시 사진으로 올리니까 렉이 없군



  

<!DOCTYPE html>

<html>
<head>
<style>
li {
    display: inline;
}
</style>
</head>
<body>
 
<p>Display a list of links as a horizontal menu:</p>
<ul>
<li><a href="/html/default.asp" target="_blank">HTML</a></li>
<li><a href="/css/default.asp" target="_blank">CSS</a></li>
<li><a href="/js/default.asp" target="_blank">JavaScript</a></li>
</ul>
 
</body>
</html>

인라인 : 줄을 차지 하지 않는 요소 / 한 줄에 여러 요소를 시
화면에 표시되는 콘텐츠만큼만 영역을 차지하고 그 외의 공간에는 다른 요소가 와도 상관없음.
 


그래요




<!DOCTYPE html>
<html>
<head>
<style>
strong {
    display:block;
}
</style>
</head>
<body>
 
<h1>This is a Heading</h1>
<p>This is a <strong>paragraph</strong>, with some words more <strong>important</strong> than others </p>
<p>This is another paragraph.</p>
 
</body>
</html>
 
  

그래요 - 스트롱이 들어가면 진하게 보입니다


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


[10]CSS overflow


[01] CSS overflow property

  - overflow, overflow-x, overflow-y

  - contents 가 Box 영역을 벗어났을때 처리되는 방법을 나타냄.


  



스크롤 - 오토 - 비슷한 것

이니셜 - 기본값

히든 - 안보기

인헤릿 - 부모대로


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<style>

div.scroll{

background-color: #00ffff;

width: 100px;

height: 100px;

overflow: scroll;

}

div.hidden{

background-color: #00FF00;

width: 100px;

height: 100px;

overflow: hidden;

}


</style>

</head>

<body>

 

<p>The overflow property specifies what to do if the content of an element exceeds the size of the element's box.</p>

 

<p>overflow:scroll</p>

<div class="scroll">You can use the overflow property when you want to have better control of the layout. The default value is visible.</div>

 

<p>overflow:hidden</p>

<div class="hidden">You can use the overflow property when you want to have better control of the layout. The default value is visible.</div>

</body>

</html>


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


<!DOCTYPE html>

<html>

<head>

<style>

div {

    color: red;  

}

 

h1  {

    color: initial; 

}

</style>

</head>

<body>

 

<div>

  <h1>Initial</h1>

  <p>The header and this text is inside a DIV element, which has the color property set to "red". The header element has its color property set to "initial", which in this case is "black".</p>

</div>

 

<p><b>Note:</b> The initial keyword is not supported as a property value in Internet Explorer, or in Opera before version 15.</p>

 

</body>

</html>




이거 할떄 졸았음 - 빨간색


<!DOCTYPE html>
<html>
<head>
<style>
span {
    color: blue;
    border: 1px solid black;
}
.extra span { // 엑쓰트라를 먼저 찾고 - 그담에 자식요소 인것
    color: inherit;
}
</style>
</head>
<body>
 
<div>
Here is <span>a span element</span> which is blue, as span elements are set to be.
</div>
 
<div class="extra" style="color:green">
Here is <span>a span element</span> which is green, because it inherits from its parent.
</div>
 
<div style="color:red">
Here is <span>a span element</span> which is blue, as span elements are set to be.
</div>
 
</body>
</html>





http://webdir.tistory.com/347


졸은거 땜빵!

overflow

요소의 박스에 콘텐츠가 넘칠때 표현방법을 지정한다.

CSS
div {
  width: 150px;
  height: 150px;
  overflow: scroll;
}
  • overflow-x와 overflow-y 속성에 대한 축약 속성이다.
  • 이 속성의 두 번째 값은 선택적이며, 하나의 값만 지정할 경우 overflow-x와 overflow-y 속성에 모두 적용된다.

속성값

  • visible : 넘치는 콘텐츠를 자르지 않고 요소의 박스를 넘어 표시한다. 기본값이다.
  • hidden : 넘치는 콘텐츠를 자르고 보이지 않게 한다.
  • scroll : 무조건 스크롤을 보여준다
  • auto : 자동으로 넘쳤을 때 스크롤을 보여준다 - ㅏ니면 스크롤 없음.
  • inherit : 부모 요소로부터 값을 상속 받는다.
http://www.w3schools.com/cssref/playit.asp?filename=playcss_overflow

요기서 볼 수 있음
이거는 수업임


<!DOCTYPE html>
<html>
<head>
<style> 
#myDIV {
    border: 1px solid black;
    background-color: lightblue;
    width: 200px;
    height: 210px;
    white-space: nowrap;
}
</style>
</head>
<body>
 
<p>Click the "Try it" button to change the overflow-x property of the DIV element:</p>
 
<button onclick="myFunction()">Try it</button>
 
<div id="myDIV">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,<br> sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.<br> Ut wisi enim ad minim veniam,<br> quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
</div>
 
<script>
function myFunction() {
    document.getElementById("myDIV").style.overflowX = "scroll";
}
</script>
 
</body>
</html>
 
 <!-- 트라이잇을 누르면
 마이뻥션 클래스를 호출해서 저걸 실행함 ㅇㅇ
 원래 박스 밖에서 자유롭게 글씨가 쳐져 있는데 -> 트라이잇 버튼 누르면 -> myFunction실행 -> 그럼 myDIV 실행 -> 그럼 그...그거해줌...ㅇ...
 안에 예쁘게 오버플로우 처리 해주는것 
 
  -->

    white-space: nowrap; 이게 뭐냐고 - 노랩 (줄 바꿈 없음)
    white-space: pre-wrap; - 그럼 이건 줄 바꿔줌
style.overflowX  요 부분 바꿔주면 (X->Y) - x축 y축 바꾸는것!!


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

어느새 float를 하고있다 - 거의 끝났다


나는 inline 부터 다시 봐야 한다


으아아

오늘 1. 티스토리가 구림

2. 인터넷이 구림


난 둘 다~인가

어휴




적절한 동영상



<!DOCTYPE html>

<html>

<head>

<style>

.thumbnail {

    float: left; /*왼쪽부터 채우기! :-)*/

    width: 110px;

    height: 90px;

    margin: 5px; 

}

</style>

</head>

<body>

 

<h3>Image Gallery</h3>

<p>Try to resize the browser-window to see what happens when the images do not have enough room.</p>

<img class="thumbnail" src="klematis_small.jpg" width="107" height="90">

<img class="thumbnail" src="klematis2_small.jpg" width="107" height="80">

<img class="thumbnail" src="klematis3_small.jpg" width="116" height="90">

<img class="thumbnail" src="klematis4_small.jpg" width="120" height="90">

<img class="thumbnail" src="klematis_small.jpg" width="107" height="90">

<img class="thumbnail" src="klematis2_small.jpg" width="107" height="80">

<img class="thumbnail" src="klematis3_small.jpg" width="116" height="90">

<img class="thumbnail" src="klematis4_small.jpg" width="120" height="90">

 

</body>

</html>


http://www.w3schools.com/html/tryit.asp?filename=tryhtml_images_float 이런 거 참조


--------------------------------------------------얘의 친구 같은 것



<!DOCTYPE html>

<html>

<head>

<style>

.thumbnail {

    float: left;

    width: 110px;

    height: 90px;

    margin: 5px;

}

 

.text_line {

    clear: both; /*이거 float 지우고 줄 표시하느라 쓰는 것 - 안쓰면 이것도 이어서 나옴 ㅠㅠ*/

    margin-bottom: 2px;

}

</style>

</head>

<body>

 

<h3>Image Gallery</h3>

<p>Try to resize the browser-window to see what happens when the images does not have enough room.</p>

<img class="thumbnail" src="klematis_small.jpg" width="107" height="90">

<img class="thumbnail" src="klematis2_small.jpg" width="107" height="80">

<img class="thumbnail" src="klematis3_small.jpg" width="116" height="90">

<img class="thumbnail" src="klematis4_small.jpg" width="120" height="90">

 

<h3 class="text_line">Second row</h3>

<img class="thumbnail" src="klematis_small.jpg" width="107" height="90">

<img class="thumbnail" src="klematis2_small.jpg" width="107" height="80">

<img class="thumbnail" src="klematis3_small.jpg" width="116" height="90">

<img class="thumbnail" src="klematis4_small.jpg" width="120" height="90">

 

</body>

</html>

 







5. 수업

진도: 

hw: 


6. 할것




'Programming' 카테고리의 다른 글

160406: 18회차  (3) 2016.04.06
160405: 17회차  (3) 2016.04.05
160401: 15회차  (5) 2016.04.01
160329: 12회차  (3) 2016.03.29
160328: 11회차  (5) 2016.03.28
Posted by DAVID

160401: 15회차

Programming 2016. 4. 1. 09:58

종료하기 전 티스토리 네이버 로그아웃 할 것



쨜.zip














That's what we have! :>


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


이제 

 WAS(Web Application Server)

SQL


이거 함 :>

pw: model1


[01] Oracle XE 11g 설치, Eclipse Data Management Oracle 설정


이거 할거임


  • Oracle Database 11g Express Edition
    • 이걸로 깐댕 :> 


      이거 되게 오래걸려... 심심해서 신상짤을 모았습니다.


         - 드라이버 위치 
           . XE : C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc5.jar 

         - ojdbc14.jar(10g) 또는 ojdbc5.jar(11g) 파일을 복사하여 "/lib"에 붙입니다. 



      깐담에 복사해야함 :>


      run sql command line! 실행하고


      connect 

      하고

      system - 1234


      로 만들었음 :>


      GRANT connect, resource to soldesk; <- soldesk 계정에 권한 부여

      ----------


      이클립스에 드라이버 연결할 때 11 - thin driver  <- 로 선택









      파일 연결 x  -> 실행만 한번 하는 용도로 저거 쓰면 됨


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


      [01] 테이블(itpay) 생성, 구조 수정, 삭제 

       
       
      1. 테이블 구조
       
      DROP TABLE itpay PURGE;
      // 얘는 라이센스가 없어서 (XE)라서 지운거 살리기 못하는데
      // 비싼거(돈 주고 쓰는 것) 은 퍼지명령어 안쓰면 도로 살릴 수도 있음 :>
      // 그래서 퍼지 쓰면 그... 살리기 위한 데이터도 완벽하게 지울 수 있음 ㅇㅇ
      // 안쓰면 데이터 살리기용(복원용) 데이터가 있음맨

       
      CREATE TABLE itpay(
      payno   NUMBER(7)   NOT NULL,  -- 1 ~ 9999999
      //넘버(크기) - 만약에 크기 안 적으면 18됨 :> - 
      // 오토언더바인크리먼트 이런거 없음 -.-) 오라클인것...

      //헐 우유 바코드 ㅋㅋㅋㅋㅋ 귀여움

          part    VARCHAR(20) NOT NULL,  -- 부서명
          sawon   VARCHAR(10) NOT NULL,  -- 사원명
          age     NUMBER(3)   NOT NULL,  -- 나이, 1 ~ 999
          address VARCHAR(50) NOT NULL,  -- 주소
          month   CHAR(6)     NOT NULL,  -- 급여달, 200805
          gdate   DATE        NOT NULL,  -- 수령일
          bonbong NUMBER(8)   DEFAULT 0, -- 본봉  
          tax     NUMBER(7)   DEFAULT 0, -- 세금
          bonus   NUMBER(7)       NULL,  -- 보너스
          family  NUMBER(7)       NULL,  -- 가족 수당
          PRIMARY KEY(payno)

      //널은 입력한 게 없는 것 - 기본 값도 없음
      // 디폴트는 입력 안하면 0
      // 낫널은 입력 안하면 안되는것 :>
      // 오라클은 프라이머리키를 밑에서 선언해줌 좋은것
      );
       
       
       
       
       
       
      2. 기초 데이터 추가
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(1, '개발팀', '가길동', 27, '경기도 성남시',
             '200801', sysdate, 1530000, 0, 0);
             
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(2, '개발팀', '나길동', 30, '인천시 계양구',
             '200801', sysdate-5, 1840000, 0, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(3, '객체설계팀', '다길동', 34, '경기도 성남시',
             '200801', sysdate-3, 2690000, 0, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(4, '객체설계팀', '라길동', 36, '경기도 부천시',
             '200802', sysdate-1, 3070000, 0, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(5, 'DB설계팀', '마길동', 38, '경기도 부천시',
             '200802', sysdate-0, 3460000, 0, 0);
       
      SELECT * FROM itpay;
       //한번 찍어보고! :>
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(6, '기획설계팀', '바길동', 40, '서울시 강서구',
             '200802', sysdate-0, 3840000, 0, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(7, '개발팀', '사길동', 42, '인천시 계양구',
             '200803', sysdate-0, 4230000, 0, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(8, 'DB설계팀', '김길동', 42, '경기도 부천시',
             '200803', sysdate-1, 4610000, 0, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax, bonus)
      VALUES(9, 'DB설계팀', '이길동', 42, '서울시 강서구',
             '200803', sysdate-1, 5000000, 0, 0);
        
       
      // sysdate 는 now() 하면 시간 제공해주는것처럼 그냥 그런 거임 ㅇㅇ
      // sysdate-5 = 5일전
      // sysdate-1 = 어제
      // sysdate-0 = 오늘 =.=

      SELECT * FROM itpay;
       
       
      -- null 컬럼값 추가
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax)
      VALUES(10, '개발팀', '신길동', 33, '서울시 관악구',
             '200804', sysdate, 3000000, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax)
      VALUES(11, '개발팀', '최길동', 31, '서울시 관악구',
             '200804', sysdate, 2500000, 0);
       
      INSERT INTO itpay(payno, part, sawon, age, address,
                        month, gdate, bonbong, tax)
      VALUES(12, '개발팀', '마길동', 29, '서울시 관악구',
             '200804', sysdate, 2200000, 0);

      //보너스가 아예 없는 슬픈 개발팀 ㅠㅠ
      //야! DBA 소리 안들리게 해라씪씪
      //아예 null이야
      // 라는 것을 표현하기 위해 보너스에 null값을 넣어 보았어

      SELECT * FROM itpay;
       
       
       
      2. 컬럼 추가
       
      ALTER TABLE itpay
      ADD (test VARCHAR2(9));
       
      //두근 알터를 사용하다니
      //varchar2랑 varchar랑 거의 동일한 애임 ㅇㅇ
      // 어쩄든 9바이트짜리 column추가한거심니다



      요렇게 하나 더 추가됨

      DESCRIBE itpay; <- 얘는 왜 안되는지 모름 -_-)

      얘는 SQL Command Line에서 실행해봄
       


       

       
      3. 컬럼 수정
       
      ALTER TABLE itpay
      MODIFY (test VARCHAR2(30));

      // 수정은 딱히 권장을 안 하는데
      // 좁을 때 늘려야 하기 때문에 -_-);; - 큰걸 줄이는 건 권장하지 않음.
       
       


      요렇게 늘어남.



       
      4. 컬럼 삭제
       
      ALTER TABLE itpay
      DROP COLUMN test;
       


      요렇게 TEST 컬럼 없어짐
       
       
      5. 테이블 삭제
       
      DROP TABLE itpay;
       
      -- DROP TABLE itpay PURGE; -- 테이블 완전 삭제
       
      // XE는 공짜라서 괄시하기 때문에 PURGE 기능은 지원 안하는 것 같다
      // 야! 학생용으로 좀 줘봐 ㅠㅠ... 돈 버는 데 안쓸게...

       
      6. 테이블 복구
      FLASHBACK TABLE itpay TO BEFORE DROP;
       
      SELECT * FROM itpay;
       
       
       
       
      7. 휴지통 비우기
      PURGE RECYCLEBIN;
       
       
      // 이런 퍼지님 기능은 쓸 수가 없어요 XE라서 -_-)



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



      1. 모든 컬럼, 모든 레코드 SELECT

       

      SELECT * 

      FROM itpay;


      //모든 레코드 값을 가져와버린다

       

       

       

      2. SELECT 할 레코드 정의

      SELECT payno, part, sawon, age

      FROM itpay;

       

      //나는 골라서 가져와버린다

       

       

      3. SELECT문에 산술 연산자 적용

      SELECT payno, part, sawon, bonbong, bonbong * 13 as 연봉

      FROM itpay;

       

      -- 급여 12개월에 퇴직금해당하는 급여 달 추가 

      SELECT payno, part, sawon, bonbong, 

             bonbong * (12 + 1) as 연봉

      FROM itpay;

       

       

      //오라클님은 산술연산도됨 -_-ㅋㅋ





      이렇게 컬럼명 같이 보이게 as 쓸 수도 있음



       


      4. null 컬럼의 산술식 적용(null 컬럼은 연산이 되지 않음)

       

      SELECT payno, part, sawon, bonus, 

             bonus + 200000 as 보너스

      FROM itpay;

       

       



      이러면 null값은 그냥 null값 된다는 얘기임




      5. 연결기호 ||, 컬럼값이 합쳐짐

       

      SELECT payno, part, sawon, bonus, 

             '(' || (bonus + 200000) || ')' as 보너스

      FROM itpay;

       

      // 요거는  ( 랑 )가 찍힘

      (200000) <- 이런 식으로


      //그러니까 || 를 연결 부호로 씀 <- 마치 자바의 + 처럼

       

      SELECT sawon || '님의 급여는 ' || bonbong || '입니다.' as 급여

      FROM itpay;

       

       //이것도 David님의 급여는 200000000000입니다 <- 처럼 나옴


       

      6. 중복 컬럼값의 출력

      SELECT * FROM itpay;

       

      -- 부서만 출력

      SELECT part FROM itpay;


      //요러면 사원들의 부서명이 다 나오니까 중복된 값이 많음


       

      -- 부서명을 고유하게 출력

      SELECT DISTINCT part FROM itpay;

       //DISTINCT 쓰면 부서명 중복된 거 제거해서 나옴



       

       

      -------------------------------------------뭔가 폭풍진도




      1. WHERE절의 사용

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay;

       

       

      -- 12번 레코드만 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE payno = 12;


      //기본키가 index로 등록되어져서 기본키로 검색하면 빠름

      //다른 걸로 찾아도 나오긴 하는데 index는 사전처럼 등록이 되어져있어서 빠름 :>

       

       

      -- '가길동'만 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE sawon = '가길동';

       

       

      -- 급여가 1500000 ~ 2000000만 출력       

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE bonbong >= 1500000 and bonbong <= 2000000;


      //이렇게 연산을 where에 넣어줄 수도 있음

       

       

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE bonbong BETWEEN 1500000 AND 2000000;

       //위에 애랑 같은 건데 between and 쓰면 그냥 값만 넣어주면 됨... 

      //둘중에 뭐가 더 좋은 건 없음맨

             

             

             

      2. IN 명령어의 사용

      -- 부서가 '개발팀'이나 '객체설계팀'인 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE part='개발팀' or part='객체설계팀';


      // 개발팀이랑 객체설계팀 다 데려옴  :>

       

       

      -- 부서가 '개발팀'이나 '객체설계팀'인 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE part IN('개발팀', '객체설계팀');

       // or이랑 같은 것 :>


       

      -- 부서가 '개발팀'이나 '객체설계팀'이 아닌 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE part NOT IN('개발팀', '객체설계팀');

       //이건 개발이랑 객체설계 아닌 것 모두 출력

       

       

      3. LIKE

       

      -- 주소가 정확히 '서울시 관악구'인 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address = '서울시 관악구';


      //얘는 search 에 "" 씌운 것 같은 느낌임

      // 근데 =을 왜 안쓰냐면 % 이런  애들을 <- 를 쓸 수 있어서 그럼

       

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '서울시 관악구';

       

       

      -- 주소가 경기도로 시작하는 직원 전부 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '경기도%';


      // 얘는 경기도로 시작하는 아무데나 가능

      // %뜻이 그런건가바 :>

      // =하고 다른 이유는 시작 + % = 시작하는 무언가 가능

       

       

      -- 주소가 부천시로 끝나는 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '%부천시';


      //얘는 부천시로 끝나는 무언가 찾기

       

       

      -- 주소가 인천시인 직원 전부 출력 

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '%인천시%';


      //얘는 중간에 인천시가 들어가는 무언가들 찾기

       

       

      -- 주소 컬럼에 2번째 단어가 '기'가 들어간 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '_기%';

       

       // ㅇㅇ 암거나기% = 두번째에 기가 들어간 주소를 가진 무언가를 찾기

       

        -- 주소 컬럼에 3번째 단어가 '도'가 들어간 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '__도%';

      //내가 해봤는데 이런것도 됨 ㅇㅇ 그러니까 자리수인가바 :>





      4. NULL 컬럼만 출력

       

      -- ERROR

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE bonus = NULL;

      //얘는 안됨

       

       

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE bonus IS NULL;

      //얘는 됨

      // NULL값 검색시에는 IS NULL

       

       

       

      5. OR

      -- 서울이나 인천에 거주하는 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '%서울%' OR address LIKE '%인천%'; 

       //오 -.-

       

       

      6. AND

      -- 서울에 거주하면서 급여가 300만원 이상인 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '%서울%' AND bonbong >= 3000000; 

       

       

      -- 개발팀 직원중에 서울에 거주하면서 급여가 300만원

         이상인 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE part = '개발팀' AND address LIKE '%서울%' 

            AND bonbong >= 3000000; 

      // and니까 조건을 모두 만족시켜야함 

       

       

      7. OR, AND의 조합

      -- 부서가 '개발팀'이거나 '객체설계팀' 직원중에 급여가 300만원

         이상인 직원 출력

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE (part='개발팀' OR part='객체설계팀')

            AND bonbong >= 3000000;    

       //이렇게 조건 여러개면 괄호로 묶어주는 편이 정신에 낫겠다

       

       

       

      8. 정렬

      -- 이름순으로 오름차순 정렬

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

      //근데 asc는 생략해도 됨 - 기본이 오름차순이래 

       

      -- 수령 급여순으로 오름차순 정렬

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY bonbong ASC;

       

       

      -- 부서별 오름차순, 수령 급여순으로 오름차순 정렬

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY part ASC, bonbong ASC;


      //아 1. 부서별로 오름차순 정리 -> 정리한 것 중에서 2. 급여순으로 오름차순 정리

       

       

      -- 나이별로 내림 차순, 부서별 오름차순

         , 수령 급여순으로 오름차순 정렬

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY age DESC, part ASC, bonbong ASC;

       //1. 나이를 내림차순 정리 -> 2. 파트별로 오름차순 정리 -> 연봉별로 오름차순 정리  

        

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






      오늘 적절한 움짤

      복붙 프린트밖에 하는 게 없따 :<






      1. UPPER, LOWER

       

      -- 소문자로 변경

      SELECT payno, LOWER(part), sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;



      //part명을 소문자로 바꿔줌 _-_

       

       

      -- 대문자로 변경

      SELECT payno, UPPER(part), sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

       

       

      //part명을 대문자로 바꿔줌 -_-

       

       

      2. CONCAT

      SELECT payno, CONCAT(part, '-' || sawon), age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;




      이런 식으로 연결해줌 :>

       

       

       

      3. SUBSTR, index는 1부터 시작


      -- 3번째 문자이후부터 출력

      SELECT payno, SUBSTR(address,3),

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

       



      경기/도

      12 /3

      를 출력





       

      -- 1~5번째 문자 출력

      SELECT payno, SUBSTR(address, 1, 5), address

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

       


      경기도 성

      12 3 4 5/




       

       

      -- 2번째 문자부터 4문자 출력

      SELECT payno, SUBSTR(address, 2, 4),

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

       

       

       

      4. LENGTH

      //길이!

       

      SELECT payno, address, LENGTH(address),

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

       

      //7임

      왜냐면

      경기도 성남시 (빈칸까지 ) - 7개


       

       

      5. INSTR, index는 1부터 시작

       - 문자열이 포함되어 있는지를 조사하여 문자열의 위치를 반환합니다. 

       - 지정한 문자열이 발견되지 않으면 0이 반환 됩니다. 

       

      SELECT payno, address, INSTR(address, '천'),

             month, gdate, bonbong, tax, bonus

      FROM itpay

      ORDER BY sawon ASC;

       



      조렇게!


       

       

      6. LPAD, RPAD 참고

        - LPAD - 왼쪽에 문자열을 끼어 놓는 역할을 합니다. 

        - 10은 반환되는 문자열의 전체 길이를 나타내며, 

        - RPAD 오른쪽에 문자열을 끼어 놓는 역할을 합니다. 

       

      SELECT bonbong, LPAD(bonbong, 10, 0)

      FROM itpay

      ORDER BY sawon ASC;

      //600일경우 000000600이런식

       

       

      SELECT bonbong, RPAD(bonbong, 10, 0)

      FROM itpay

      ORDER BY sawon ASC;


      //600일경우 60000000이런식 ㅋㅋㅋㅋㅋ

       

       

       

      7. REPLACE

      SELECT payno, address, REPLACE(address, '계양구','남동구'),

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE address LIKE '%인천%'

      ORDER BY sawon ASC;

       



      이런 식으로 바꿔서 보여줌



       

      8. ROUND

      -- 소수 둘째 자리까지 반올림

      SELECT ROUND(55.634, 2), ROUND(55.635, 2)

      FROM dual;

      //dual은 하나의 컬럼 & 하나의 레코드만 존재하는 기본 테이블 :>

      //암것도 없어서 구냥 암거나 쓴거임... -.- 

      //그냥 select 해서 보여주려고 빈 테이블 쓴거십니다 



      어쩄든 앞의 라운드는 반올림 못해서 55.63

      뒤에거는 55.64




       

      -- 1의 자리, 10의 자리에서 반올림

      SELECT ROUND(23541, -1), ROUND(23541.25, -2)

      FROM dual;

       

       


      -1은 첫번째 (1)의자리

      -2는 두번째 (10)의 자리


      그래서 첫번째 라운드는 23540 / 두번쨰 라운드는 23500


      그래서 -3인 100의 자리는

      첫번째 두번쨰 자리 24000 만듬 ㅇㅇ



       

      9. TO_CHAR(): 날짜의 출력 및 비교

      -- 현재 날짜 출력

      SELECT sysdate FROM dual;

      //옿 ㅎㅅㅎ 초도 가져옴

       

       

      -- 2008-05-19일에 급여를 받는 사람 출력

      SELECT gdate, SUBSTR(gdate, 1, 10)

      FROM itpay;

       

      //쳇 -_-) sysdate에서 뽑아와도 이쁘게는 못뽑아옴 

      //그래서 to_char() 사용해서 문자형태로 바꾼 뒤에 뽑아야함 ㅇㅇ




       

      -- TO_CHAR() 함수를 통한 문자열 형변환

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus

      FROM itpay

      WHERE TO_CHAR(gdate, 'yyyy-mm-dd') = '2008-05-19';

       




      ㅇㅇ 이렇게 


       

      10. 두 날짜 사이의 차 출력

      SELECT MONTHS_BETWEEN(sysdate+1, sysdate) FROM dual;

      //이거 갈비지값처럼 보이는 결과값 나옴... -_-);;


       

       

      SELECT MONTHS_BETWEEN(sysdate+31, sysdate) FROM dual;

       //심지어 얘도 갈비지같이 생겼지만 1.어쩌구야... - 1달 차이난단 얘긴가벼

       

       

      11. 월 더하기

      SELECT ADD_MONTHS(sysdate, 1) FROM dual;

       

       

      12. 돌아오는 월요일의 날짜 출력

      SELECT NEXT_DAY(sysdate, '월요일') FROM dual;


       

      13. 이번달의 마지막날 출력

      SELECT LAST_DAY(sysdate) FROM dual;


      NEXT_DAY랑 LAST_DAY는 쫌 쓸모있음 :> 


       

      14. TO_CHAR

      SELECT TO_CHAR(sysdate, 'yyyy-mm-dd hh:mi:ss') FROM dual;

       

      SELECT TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss') FROM dual;


      //hour = hh -> 이거에 24 붙이면 24시간 형태로 나옴 ... 근데 지금이 11시라섴ㅋㅋㅋㅋ 구졌습니다



       

      SELECT TO_CHAR(1500, '0999999') FROM dual;

      //앞에가 빈 거를 0으로 채워준것 :>


       

      SELECT TO_CHAR(150000, '9,999') FROM dual;

       

      SELECT TO_CHAR(150000, '999,999') FROM dual;

       

      SELECT TO_CHAR(150000, 'S999,999') FROM dual;


      //s는 음수 양수 표시 :> +150,000 <- 이런 식으로 나옴! :>

       

      SELECT TO_CHAR(1500.55, '9,999.99') FROM dual;

       

      SELECT TO_CHAR(1500.55, '9,999.9') FROM dual;

       

      SELECT TO_CHAR(1500.5, '9,999.999') FROM dual;


      //뒤에 소수점은 0으로 채워짐 ..

       

       

       

      15 NVL 함수★ - 얘는 좀 외우실것


      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, bonus,

             family

      FROM itpay;

       

       

      //요거는 그냥 노오말한 출력 (-_-)

      // null값을 그냥 null로 계산해줌


      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax, 

             NVL(bonus, 0) + 500000 as bonus,

             NVL(family, 0)

      FROM itpay;


      //NVL(ㅁㅁㅁ,0) <- 혹시 ㅁㅁㅁ가 null값이 있으면 0으로 바꿔줘라

      //     NVL(bonus, 0) + 500000 as bonus, - 그리고 50을 더해라 


      아 물론 실제 데이터를 건드리는 것은 아님 ㅇㅇ

      그래서 이거 0 안넣고 그냥 NVL(bonus, 돈돈돈돈) <- 이런거 써도 됨 

        

      null value... l...? <- 널 밸류 값을 ㄹ....해주는것

      null value Logic <- 이래 -_-)


      출처: http://stackoverflow.com/questions/28935971/why-are-nvl-functions-called-nvl



       

       

      16. CASE 문

      SELECT payno, part, sawon, age, address,

             month, gdate, bonbong, tax,

             CASE part WHEN '개발팀' THEN 1.4*bonbong

                       WHEN '객체개발팀' THEN 1.3*bonbong

                       WHEN 'DB설계팀' THEN 1.2*bonbong

             ELSE 1.1*bonbong END bonus

      FROM itpay;



      CASE part when 컬럼명 then 리턴할 수식수식

      ELSE 리턴할 수식수식 END 이거 리턴할 컬럼명



      같이 생겼음


      - 선생님이 알리아스 어쩌구를 설명했는데 ㅁㄺㄷ

      이거 볼 것 ... - 나중에 할 때 붉은 글씨 고칠 것



      출처: http://joke00.tistory.com/103


      보려고 좀 복붙했음


      [ORACLE] CASE WHEN ~ THEN ~ ELSE END

      POSTED AT 2010.04.20 20:17 | POSTED IN DATABASE/ORACLE SQL

      Oracle 뿐만 아니라 DB2 에서도 실행되는(?) 수행되는 이라고 해야 맞으려나?? - -;; 암튼...
      이번엔 JAVA 의 IF ~ ELSE  문과도 같은 CASE WHEN 문에 대해서 알아 봅시다.


      CASE ~ WHEN ~ THEN ~ ELSE ~ END

      [형식]
      CASE
       컬럼명 | 표현식 WHEN 조건식1 THEN 결과1
                                      WHEN 조건식2 THEN 결과2
                                                       .......
                                      WHEN 조건식n THEN 결과n 
                                      ELSE 결과
                   END

      조건문과 조건문 사이에는 콤마(,) 를 사용하지 않는다.
      CASE 문은 반드시 END 로 끝내야 한다.
      CASE 표현식은 ANSI SQL 형식도 지원한다.
      결과 부분은 NULL 을 사용해서는 안된다.

      case when x = y then a else b end 
      : 조건 x  =y 가 true 일 경우 a 이고 그렇지 않으면 b

      case when x < y then a when x = y then b else c end
      : 조건 x<y 가 true 일 경우 a 로, 조건 x = y 일 경우엔 b 로 그렇지 않으면 c 로 변경

      case XYZ when 'foo' then 'moo' else 'bar' end
      :  XYZ 가 foo  일 경우  moo 로 변경,  그렇지 않으면  bar   로 변경

      예제 만들기!

      CREATE TABLE TEST_CASE_WHEN (A VARCHAR2 (5), B VARCHAR2 (5));

      INSERT INTO TEST_CASE_WHEN VALUES ('*','*');
      INSERT INTO TEST_CASE_WHEN VALUES ('+','+');
      INSERT INTO TEST_CASE_WHEN VALUES ('-','-');
      INSERT INTO TEST_CASE_WHEN VALUES ('.','.');

      COMMIT;

       
      토드나 SQLPLUS 혹은 SQLGATE 에서 Qurey 를 날려 봅시다.
      자, Alias 인 as B  를 붙이므로  좀더 Grid 의 컬럼이 보기 깨끗해집니다. ^^

      SELECT a, CASE
                   WHEN b = '*' THEN 'star'
                   WHEN b = '+' THEN 'plus'
                   WHEN b = '-' THEN 'minus'
                   ELSE '????'
                END AS B
        FROM test_case_when;

      결과 >>>>




      출처 : http://www.adp-gmbh.ch/ora/sql/case_when.html


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

      6이 없어서 7을 하도록 ... -_-);;



      오늘은 저것 + 예쓰아이캔 같은 느낌입니다



      1. WHERE문에 서브쿼리의 사용

       

      -- 개발팀의 평균 급여(2550000)

      SELECT AVG(bonbong)

      FROM itpay

      WHERE part='개발팀';

       

      // 오우 AVG 함수를 기본적으로 제공하는군!



       

      -- 개발팀의 평균 급여보다 급여가 많은 직원 출력 

      SELECT *

      FROM itpay

      WHERE bonbong >= (

                        SELECT AVG(bonbong)

                        FROM itpay

                        WHERE part='개발팀'

      );


      //

      1. where의 서부쿼리에서 개발팀의 평균 급여를 구함 

      2. 걔보다 큰 걸 비교함

      3. 걔네를출력함


      개발팀 로동자는 DBA님에게 집니다

      위대하신 룡도자급임 


      아 DBA 월급 보니까 열폭하고싶다

      근데 개발자도 프리랜서는 돈 많이 벌던데 부럽맨




       

       

      2. 조건의 중첩

       

      -- 가길동의 부서 출력

         SELECT part

         FROM itpay

         WHERE sawon='가길동'

       

       

      -- 가길동과 같은 부서의 평균 급여 출력, 2550000

         SELECT TRUNC(AVG(bonbong))

         FROM itpay

         WHERE part = (SELECT part

                       FROM itpay

                       WHERE sawon='가길동');

       

      // 길동이 부서를 구해서 - 서부쿼리

      // 그거를 찾아서

      // 걔네 부서의 평균값을 구함

      // 트렁크는 뭐람


      TRUNC

      얘는 소수점자리 찍어주려고 쓰는 건데 암것도 안쓰고 저렇게 쓰면 그냥 ,0이랑 같은 거임 :>

      몇째자리까지 나오나 할떄 


      321321321321321.3333333333333, 2

      하면 323321321321.33 <- 이런 식으로 나옴


      ㅇㅇ problem solved




       

      -- 가길동과 같은 부서에 근무하면서 그 부서의 평균급여 보다

         급여가 많은 직원 출력

         SELECT * 

         FROM itpay

         WHERE (

                bonbong > (

                           SELECT AVG(bonbong)

                           FROM itpay

                           WHERE part = (SELECT part

                                         FROM itpay

                                         WHERE sawon='가길동'

                                        )

                           )

               )

               AND

               (

                part = (

                        SELECT part

                        FROM itpay

                        WHERE sawon='가길동'

                       )

               )                        

       

      //서부쿼리 and 서부쿼리 인것 -_-);;

      // 가길동의 부서를 뽑아내고

      //걔네[ 부서의 평균값보다 돈 많이 받는 사람 뽑아서 -> 걔네 부서에서 일하는 사람 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ




       

       

      3. Subquery + ROWNUM 컬럼을 이용한 레코드 추출

       

      SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus, rownum

      FROM itpay;



      rownum : 오라클에서 제공하는 시스템 변수

      인데 지금 불러온 데이터들을 순서대로 올려놓음




      이렇게 인덱스를 붙여줌 :< 근데 이게 밑에서 보시져 - 문제가 있음



       

      -- rownum이 생성되고 난후 정렬됨으로 정보로서의 가치가 떨어짐

      SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus, rownum

      FROM itpay

      ORDER BY sawon;


      근데 이게 정렬하고 나서 안 쓰면 막 순서가 꼬임 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ






      -- 먼저 정렬을 수행하고 rownum을 추가합니다.

      SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus, rownum as r

      FROM (

             SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus

             FROM itpay

             ORDER BY sawon

           )

      -- WHERE r >= 1 and r <= 10

      -- ORA-00904: "R": invalid identifier

      -- 저거 추가하면 r을 인식하지 못함 -_-)

      where rownum >= 1 and rownum <=10

      -- 근뎅 이건 또 된다?

      -- 그리고 이건 안됨 ㅋㅋㅋㅋ

      -- where rownum >= 3 and rownum <=10

      -- 1부터 읽어오기 필수인것

      -- 그래서 저 1에서 10까지 빼고는 다 **임미다


           

           

      -- rownum 컬럼 값에 따른 레코드 추출

      SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus, rownum as r

      FROM (

             SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus

             FROM itpay

             ORDER BY sawon

           );

       

       

       

      -- rownum 컬럼 값에 따른 레코드 1~3 추출

      SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus, r

      FROM(

           SELECT payno, part, sawon, age, address, month, 

                  gdate, bonbong, tax, bonus, rownum as r

           FROM (

                  SELECT payno, part, sawon, age, address, month, 

                  gdate, bonbong, tax, bonus

                  FROM itpay

                  ORDER BY sawon

                )

          )

      WHERE r >= 1 AND r <= 3;     

           

           

           

           

      -- rownum 컬럼 값에 따른 레코드 4~6 추출

      SELECT payno, part, sawon, age, address, month, 

             gdate, bonbong, tax, bonus, r

      FROM(

           SELECT payno, part, sawon, age, address, month, 

                  gdate, bonbong, tax, bonus, rownum as r

           FROM (

                  SELECT payno, part, sawon, age, address, month, 

                  gdate, bonbong, tax, bonus

                  FROM itpay

                  ORDER BY sawon

                )

          )

      WHERE r >= 4 AND r <= 6;     


      이렇게 삼중쿼리를 써서 rownum - 을 이름을 또 바꿔서 r(이라던가 david라던가) 이걸로 쓰면 됨ㅋㅋㅋㅋㅋㅋㅋㅋ

      게시판 사용시 쓰면 됨미다 :>

           

           

           

      4. IN의 사용: Subquery의 결과가 2개 이상일 경우 사용

         - 급여가 350만원 넘는 사람과 같은 나이를 가지고

           있는 직원의 급여 내역을 출력하세요.

       

      -- 급여가 350만원이 넘는 직원의 나이를 출력합니다.     

      SELECT DISTINCT age 

      FROM itpay

      WHERE bonbong >= 3500000;

       

       

      -- 그 나이에 해당하는 직원의 정보를 모두 출력합니다.

       

      SELECT *

      FROM itpay

      WHERE age IN(

                   SELECT DISTINCT age 

                   FROM itpay

                   WHERE bonbong >= 3500000

                  );

                       


                     

      남의 도움을 받읍시다.

      출처: http://smeffect.tistory.com/entry/120830-Oracle-%EC%97%B0%EC%82%B0%EC%9E%90-INNOT-INANDORBETWEEN


      아


      where 검색할 때 

      where first_name in ('데이비드', '김'); <- 이런식으로 사용함 ㅇㅇ


      not in은 데이비드 김 빼고 다른애 다나옴




           

       

      *** 부서별 본봉의 평균값의 최대값 보다 높은 본봉을 받는 사람들을 출력하는데 

            그중에서 나이가 40세 이상인 직원들을 출력해보세요     

       

      그룹바이로 쓰랭 :>

            

      select * from itpay


      where 

      bonbong >= (  

      SELECT trunc(max(avg(bonbong)))

      FROM itpay

      group by part

      ) 

      and

      (age >= 40)


      이거 망함 ㅠㅠ

      group by 개념이 뭘까

       GROUP BY는 데이터를 그룹핑해서 그 결과를 가져오는 경우 사용한다.

      집계함수를 사용하여 특정 그룹으로 구분 할 때는GROUP BY 절을 사용하며, 특정 그룹 구분없이 중복된 데이터를 제거할 경우에는 DISTINCT 절을 사용 하도록 하자


      http://www.gurubee.net/lecture/1032




      출처2 http://smeffect.tistory.com/entry/120830-Oracle-%EC%97%B0%EC%82%B0%EC%9E%90-INNOT-INANDORBETWEEN


      이 티스토리가 최고야 사랑해

      Group by는 칼럼의 값이 같은 다수의 컬럼을 하나의 그룹으로 묶어서 처리하는 방법~!!!!


      select 컬럼 컬럼 from 테이블명 where 컬럼 group by 컬럼; <- -_-)? 같이 사용함


      응 그래


      select department_id employee_id

      from employees

      where department_id in (50,80) 하면 

      50과 80부서의 id가 나옴


      근뎅 id의 개수를 세고 싶은데 안 세지니까

      함수랑 컬럼을 같이 쓰려면 group by 쓰면 됨


      select department_id, count(employee_id)

      from employees

      where department_id in (50,80)

      group by department_id; <- 이렇게 쓰면 id 개수 세짐 ㅇㅇ


      어 그래도 어렵당 2번 더 볼 것 -_-);;




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

      [01] Manipulating Data(DML)

       

      1. NULL 값의 추가

       

       

      INSERT INTO itpay(payno, part, sawon, age, address,

                        month, gdate, bonbong, tax, bonus, family)

      VALUES(13, '개발팀', '가길동', 29, '서울시 관악구',

             '200805', sysdate, 2500000, 0, NULL, NULL);

       

       

      SELECT * FROM itpay;

       

       

       

      2. 날짜의 추가

      -- 날짜 형식에 문자열을 추가할 수 없습니다.

      INSERT INTO itpay(payno, part, sawon, age, address,

                        month, gdate, bonbong, tax, bonus, family)

      VALUES(14, '개발팀', '나길동', 29, '서울시 관악구',

             '200805', 

             '2008-05-20 17:17:30',

             2500000, 0, NULL, NULL);

       

       

      SELECT * FROM itpay;

       

      -- 24 시간제 추가

      INSERT INTO itpay(payno, part, sawon, age, address,

                        month, gdate, bonbong, tax, bonus, family)

      VALUES(14, '개발팀', '나길동', 29, '서울시 관악구',

             '200805', 

             TO_DATE('2008-05-20 17:17:30', 'yyyy-mm-dd hh24:mi:ss'),

             2500000, 0, NULL, NULL);

       

      SELECT * FROM itpay;

       

       

      -- 12 시간제 추가

      INSERT INTO itpay(payno, part, sawon, age, address,

                        month, gdate, bonbong, tax, bonus, family)

      VALUES(15, '객체설계팀', '다길동', 34, '경기도 성남시',

             '200805', 

             TO_DATE('2008-05-20 05:17:30', 'yyyy-mm-dd hh:mi:ss'),

             2300000, 0, NULL, NULL);

       

      SELECT * FROM itpay;

       

       

       

      //갑자기 슝슝 내려옴 

       

      3. 특정 테이블의 결과를 특정 테이블로 추가

      CREATE TABLE itpay_copy(

      payno   NUMBER(7)   NOT NULL,  -- 1 ~ 9999999

          part    VARCHAR(20) NOT NULL,  -- 부서명

          sawon   VARCHAR(10) NOT NULL,  -- 사원명

          address VARCHAR(50) NOT NULL,  -- 주소

          PRIMARY KEY(payno)

      );



       



      INSERT INTO itpay_copy(payno, part, sawon, address)

      SELECT payno, part, sawon, address

      FROM itpay

      WHERE part='개발팀';

       

      SELECT * FROM itpay_copy;

       

       

       

      4. UPDATE

         - WHERE조건을 동반하지 않을시 모든 레코드가 수정됨으로

           주의합니다.

      -- 개발팀의 급여를 10% 인상하세요.

      UPDATE itpay

      SET bonbong = bonbong * 1.1

      WHERE part='개발팀';

         

       

      SELECT AVG(bonbong)

      FROM itpay

      WHERE part='개발팀';

       

       

       

      5. 개발팀에서 나이가 35세 이상되는 직원들의 급여를 

         'DB설계팀'의 평균 급여로 인상하세요.

       

      SELECT * FROM itpay;

       

      -- DB설계팀의 평균 급여

      SELECT AVG(bonbong) FROM itpay WHERE part='DB설계팀';       

       

      -- 35세이상되는 개발팀의 평균 급여

      SELECT AVG(bonbong) FROM itpay 

      WHERE part='개발팀' and age >= 35;       

       

       

      UPDATE itpay

      SET bonbong = (

                     SELECT AVG(bonbong) 

                     FROM itpay 

                     WHERE part='DB설계팀'       

                    )

      WHERE part='개발팀';

       

       

       

       

      6. 삭제

         - WHERE조건을 동반하지 않을시 모든 레코드가 삭제됨으로

           주의합니다.

           

      DELETE FROM itpay WHERE payno=15;

       

      SELECT * FROM itpay;

       

       

      DELETE FROM itpay 

      WHERE sawon='가길동' and address='서울시 관악구';

       

       


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


      빨간 거랑 아까 못 푼거 마저 풀어보기 :>


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


      아니 밥먹고 그냥 뻗음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


      다시하쉬는것


      출처: http://dkatlf900.tistory.com/87


      DBMS의 중요한 목적 중 하나는 데이터를 효율적으로 관리하는 것이다. 그래서 개별 테이블을 만들어 가급적 중복성을 피해서 꼭 필요한 데이터를 저장하게 된다. 하지만 각각의 테이블 하나만 놓고 본다면 그안에 들어있는 데이터는 정보로서의 가치가 많이 떨어진다. 하지만 각각의 테이블에 분리되어 있는 연관성 있는 데이터들을 연결하거나 조합하여 데이터를 사용할 수 있다면 중요한 정보로서 가공될수 있다. 

      이런 작업들을 조인(Join)이라고 한다.



      1. WHERE 절


      조인에 대해 알아보기 전에 먼저 WHERE 절 에 대해 살펴 봐야 한다.

      WHERE 절은 SELECT, UPDATE, DELETE 등 여러 DML 문장에서 사용되어 특정 조건을 처리하는 필터 역할을 수행한다. 그리고 조인에 사용되는 조건들 역시 WHERE 절에 기술한다. SQL 문장을 얼마나 잘 작성하느냐의 척도는 WHERE 절을 얼마만큼 잘 사용하느냐에 달려 있다.



      IN


      BETWEEN ..AND 조건과는 다르게 여러 개의 값을 동시에 비교해야 할 경우에는 IN 을 사용한다.

      IN연산자는 OR 연산자와 동일한 기능을 수행하며 비교할 값들이 많을때 IN 을 사용하면 문장이 짧아진다.


      부서 ID가 30 OR 60 OR 90 인 사원들만 구하겠다 할때 사용할 수 있다.



      EXISTS


      IN과 비슷한 용도로 EXISTS 조건이 있다 어떤 값에 포함되는지 여부를 체크하는 것이 IN 이라면 EXISTS는 특정 컬럼값이 존재하는지 여부를 체크한다. IN은 괄호 안에 비교할 값이 올 수도 있고 서브쿼리가 올 수도 있는 반면에 EXISTS는 오직 서브쿼리만 올 수 있다.



      테이블 부서ID가 30, 60, 90인 사원을 구하고 싶을때 EXISTS를 사용했다.

      결과는 IN을 사용했을때와 동일하면서 SQL 문장은 더 길어졌다 왜 사용할까?

      EXISTS는 IN보다 탁월한 성능을 발휘한다 그만큼 쿼리결과가 빨리나온다. 문장은 길어졌지만 오라클 SQL 엔진 입장에서는 EXISTS가 더빨리 처리 되는 것이다. 이것에 대해서는 SQL튜닝과 관련된 곳에서 공부를 더 해야 한다.







      ※ employee, pay 테이블을 기준으로 합니다.

        

      DROP TABLE employee PURGE;

      DROP TABLE pay PURGE;

       

      CREATE TABLE employee(

          employeeno CHAR(6)     NOT NULL, -- IT-001

          name       VARCHAR(10) NOT NULL, -- 홍길동

          tel        VARCHAR(14) NOT NULL, -- 1111-1111-1111

          part       VARCHAR(10) NOT NULL, -- 전산부

          job        VARCHAR(10) NOT NULL, -- 과장

          mgr       CHAR(6)        NULL,   -- 담당 매니저

          CONSTRAINT employee_pk_employeeno PRIMARY KEY (employeeno) 

      );


      // CONSTRAINT employee_pk_employeeno  얘는 안 써도 되는데 그냥 제약 조건의 이름을 명시하는거임

      // 이 뭔소리냐면 fo...rein? -_- <- 포?린 ? 키를 찾아서 이름 변경해야 할 떄 귀찮으니까

      //그냥 얘의 이름을 주는 거임 ㅇㅇ 근데 우리는 로우 라이프라 안써도 됨 ㅇㅇ


       

      CREATE TABLE pay(

          payno      NUMBER(7)   NOT NULL, -- 1~9999999

          pay        NUMBER(8)   NOT NULL, -- 1~99999999

          month      CHAR(6)     NOT NULL, -- 200801~

          employeeno CHAR(6)     NOT NULL, -- IT-001

          CONSTRAINT pay_pk_payno PRIMARY KEY (payno),

          CONSTRAINT pay_fk_employeeno 

          FOREIGN KEY (employeeno) REFERENCES employee(employeeno)

      //포린키 (부모) 참조한다 부모테이블(부모테이블의 스타-일)

      );

       

      // ^^ ㅎㅎ 


      업무적으로 연관성이 있는 것: 관계

      그중에 하나는 부모 - 하나는 자식 

      ^^ㅎㅎ


      우리의친구 급입니다

      근데 부모랑 자식에 둘다 pk라는 애가 있음 ㅇㅇ

      그러면 자식은 부모를 참조함 


      응 근데 자식이 뭔지 어떻게 아냐면

      Foreign key가 있어서 그럼 ㅇㅇ - 얘 생긴게

      //포린키 (부모) 참조한다 부모테이블(부모테이블의 아이들)


      이렇게 생김 


      아 이거 전에 한거 같은데 데이터베이스의 머시기 책 읽으면 기억날듯 ㅇㅇ

      집에있음


      꺄


       

      CREATE SEQUENCE pay_seq

          START WITH   1       --시작번호

          INCREMENT BY 1       --증가값

          MAXVALUE     9999999 --최대값, NUMBER(7)일경우

          CACHE 2              --시쿼스 변경시 자주 update되는 것을 방지하기위한 캐시값

          NOCYCLE;      

         

      // 노싸이클 : 재사용 아님 :> 



          

          

       

       

      2. 기초데이터의 추가

       

      INSERT INTO employee(employeeno, name, tel, part, job)

      VALUES('IT-001', '나대표', '02-111-1111', '임원', '대표');

      INSERT INTO employee(employeeno, name, tel, part, job,mgr)

      VALUES('IT-002', '김과장', '02-222-2222', '개발부', '과장','IT-001');

      INSERT INTO employee(employeeno, name, tel, part, job,mgr)

      VALUES('IT-003', '박과장', '02-222-2222', '기획부', '과장','IT-001');

      INSERT INTO employee(employeeno, name, tel, part, job,mgr)

      VALUES('IT-004', '홍길동', '03-333-3333', '개발부', '사원','IT-002');

      INSERT INTO employee(employeeno, name, tel, part, job,mgr)

      VALUES('IT-005', '홍길순', '03-333-3333', '개발부', '사원','IT-002');

       

      INSERT INTO employee(employeeno, name, tel, part, job,mgr)

      VALUES('IT-006', '김길동', '03-333-3333', '기획부', '사원','IT-003');

      INSERT INTO employee(employeeno, name, tel, part, job,mgr)

      VALUES('IT-007', '박길순', '03-333-3333', '기획부', '사원','IT-003');

       

      SELECT employeeno, name, tel, part, job,mgr FROM employee;

       

       

      INSERT INTO pay(payno, pay, month, employeeno)

      VALUES(pay_seq.nextval, 6000000, '200201', 'IT-001');

      INSERT INTO pay(payno, pay, month, employeeno)

      VALUES(pay_seq.nextval, 3000000, '200801', 'IT-002');

      INSERT INTO pay(payno, pay, month, employeeno)

      VALUES(pay_seq.nextval, 3000000, '200801', 'IT-003');

      INSERT INTO pay(payno, pay, month, employeeno)

      VALUES(pay_seq.nextval, 2300000, '200802', 'IT-004');

      INSERT INTO pay(payno, pay, month, employeeno)

      VALUES(pay_seq.nextval, 2400000, '200802', 'IT-005');

      INSERT INTO pay(payno, pay, month, employeeno)

      VALUES(pay_seq.nextval, 2500000, '200802', 'IT-006');

       

      // 넥스트발은 *발이 아닙니다

      // 이게 어디다 쓰는 거냐면

      // 잘 모르게따


      :-D


      NEXTVAL : Sequence가 1개 증가된다. 

      랭 ^^ ㅎㅎ 아오



      SELECT payno, pay, month, employeeno FROM pay;

       

       

       

      1. Equi JOIN(INNER JOIN)

         - 가장 많이 사용하는 조인방법입니다.

         - WHERE 조건에서 두개 이상의 테이블에 공통으로 들어가 있는

           컬럼의 값이 일치되는 행을 연결하여 생성하는 조인방법입니다.

       

       

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e, pay p

      //썔랙트의 e랑 p를 선언을 왜 밑에서 해줄까 이쌍하당

      //구냥 employee.emloyeeno 해도 됨 ㅇㅇ - 근데 기니까 짱 귀찮음

      //그래서 그냥 이렇게 알...알리앙스... (얼라이언스? -_-) - 하면됨


      WHERE e.employeeno = p.employeeno;

       

       

       

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e, pay p

      WHERE e.employeeno = p.employeeno

      AND e.name='홍길동';

       

       

       


      //아! 포린키 쓰는 이유 - 부모의 프라이머리키를 가져다가 슴 ㅇㅇ - 이예


       

       

      2. NOT Equi 조인

         - 조인 조건에 특정 범위 내에 있는지를 조사하기 위해서 WHERE절에

            조인조건을 = 연산자 이외의 비교연산자를 사용합니다.

       

       

       - 실습용 salgrade table를 생성합니다.

       

       CREATE TABLE salgrade (

          grade      CHAR(1)     NOT NULL, -- 1,2,3,4,5

          losal       NUMBER     NOT NULL, -- 등급별 최저급여

          hisal       NUMBER     NOT NULL, -- 등급별 최고급여 

          CONSTRAINT salgrade_pk_grade PRIMARY KEY (grade) 

      );

        

       INSERT INTO salgrade(grade, losal, hisal)

       VALUES('1',1500000,2500000);

       INSERT INTO salgrade(grade, losal, hisal)

       VALUES('2',2600000,3500000);

       INSERT INTO salgrade(grade, losal, hisal)

       VALUES('3',3600000,4500000);

       INSERT INTO salgrade(grade, losal, hisal)

       VALUES('4',4600000,5500000);

       INSERT INTO salgrade(grade, losal, hisal)

       VALUES('5',5600000,6500000);

       

       

       

        - 사원 테이블과 급여 등급테이블을 조인해서 사원의 급여 등급을 지정합니다.

          

         SELECT  e.name, p.pay, s.grade

        FROM      employee e, salgrade s, pay p

        WHERE   e.employeeno = p.employeeno

        AND     p.pay >= s.losal AND p.pay <= s.hisal;

       

        또는,

       

         SELECT  e.name, p.pay, s.grade

        FROM      employee e, salgrade s, pay p

        WHERE   e.employeeno = p.employeeno

         AND      p.pay  BETWEEN s.losal AND s.hisal;

       

       

      3. SELF JOIN

         - 같은 테이블내에 존재하는 사원과 사원매니저를 출력하기 위해서는 

            SELF JOIN을 이용해야 합니다.

        

       

           SELECT e.name || '의 담당매니저는' || m.name || '입니다'

           FROM  employee e, employee m

           WHERE  e.mgr = m.employeeno ;

       

      //이너조인이면서 셀프조인인것 -_-)

       

       

       

       

      2. LEFT OUTER JOIN (아우터 조인 중 가장 많ㅇ니 씀)

       

      ⓐ 좌측 테이블의 레코드 전부 출력

         - 해당하지 않는 PK도 전부 출력

       

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e, pay p

      WHERE e.employeeno = p.employeeno(+);

      //요러면 부모한테는 있는데 자식한테는 없는 거도 나옴... -_-)


      //부모:11개 가능

      //자식: 10개 ok / 12개 x -> 자식이 부모보다 많으면 안됨! :>

         

       

      ⓑ ANSI 표준 SQL(모든 DBMS 지원)

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e 

      LEFT OUTER JOIN pay p

      ON(e.employeeno = p.employeeno);

       

       

       

         - 응용 (SELF Join에서 대표의 결과값이 배제되었지만 outer join을 통해서

                    대표의 결과값도 출력할 수 있습니다.)

       

           SELECT e.name || '의 담당매니저는' || m.name || '입니다'

           FROM  employee e, employee m

           WHERE  e.mgr = m.employeeno(+) ;

       

       

       

       

      4. RIGHT OUTER JOIN(사용 안됨)

         - PK 컬럼에 등록되지 않은 값은 FK 컬럼에 등록할 수 없음으로

           사용할 수 없음.

       

      ⓐ 오른쪽 테이블의 레코드 전부 출력

         - 해당하는  PK만 출력

       

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e, pay p

      WHERE e.employeeno(+) = p.employeeno;

         

       

       

       

      ⓑ ANSI 표준 SQL(모든 DBMS 지원)

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e 

      RIGHT OUTER JOIN pay p

      ON(e.employeeno = p.employeeno);

       

       

       

       

      5. FULL OUTER JOIN

       

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno 

      FROM employee e 

      FULL OUTER JOIN pay p

      ON(e.employeeno = p.employeeno);

       

      //ㅇㄱㄹㅇ... ㅎㅎ...

      // 양쪽 다 -_-)? 


      아니 조인 아우터 조인부터 멘붕당함 ㅋㅋㅋㅋㅋㅋㅋ


       

       

       

       

       

       

      [02] 테이블 3개 이상의 JOIN

       

      1. 테이블 생성

       

         DROP TABLE dev PURGE;

       

         CREATE TABLE dev(

             devno      NUMBER(7)    NOT NULL, -- 일련 번호

             lang       VARCHAR2(50) NOT NULL, -- 사용 언어

             db         VARCHAR(50)  NOT NULL, -- 사용 DB

             employeeno CHAR(6)      NOT NULL, -- IT-001

             CONSTRAINT dev_pk_devno PRIMARY KEY (devno),   -- PK

             CONSTRAINT dev_fk_employeeno 

             FOREIGN KEY (employeeno) REFERENCES employee(employeeno)

         );

       

       

      CREATE SEQUENCE dev_seq

          START WITH   1           --시작번호

          INCREMENT BY 1           --증가값

          MAXVALUE     9999999     --최대값

          CACHE        2           --시쿼스 변경시 자주 update되는 것을 방지하기위한 캐시값

          NOCYCLE;             

       

       

      INSERT INTO dev(devno, lang, db, employeeno)

      VALUES(dev_seq.nextval, 'JAVA, JSP', 'Oracle, MySQL', 'IT-001');

       

      INSERT INTO dev(devno, lang, db, employeeno)

      VALUES(dev_seq.nextval, 'JAVA, C++', 'Oracle, MySQL', 'IT-002');

       

      INSERT INTO dev(devno, lang, db, employeeno)

      VALUES(dev_seq.nextval, 'JAVA, VC++', 'Oracle, MySQL', 'IT-003');

       

      SELECT devno, lang, db, employeeno FROM dev;

       

       

       

       

       

      2. 3개 이상의 테이블 JOIN 

       

         - Pattern 1

         

               직원                      급여                개발정보

             employee                 pay                  dev

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

           PK                           PK                     PK

           employeeno  ◁─┐    payno                devno

                                   │                    

                                   │     FK                     FK

                                   ├─▷employeeno    ┌─▷ employeeno

                                   │                          │

                                   └─────────┘

       

      SELECT e.employeeno, e.name, e.tel, e.part, e.job, 

             p.payno, p.pay, p.month, p.employeeno, 

             d.devno, d.lang, d.db, d.employeeno

      FROM employee e, pay p, dev d

      WHERE (e.employeeno = p.employeeno) 

            and (e.employeeno = d.employeeno);

       

       

       

         - Pattern 2

         

             설문조사            설문조사항목              챠트이미지

             research            researchItem            researchImage

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

           PK                      PK                            PK

           researchnum   ◁─┐    researchitemnum◁─┐    researchimageno

                                    │                                │    

                                    │    FK                         │    FK

                                    └─▷researchnum          └─▷researchitemnum

       

       

      SELECT r.researchnum, r.content, i.researchitemnum, 

             i.num, i.content, m.imagefile 

      FROM research r, researchItem i, researchImage m

      WHERE (r.researchnum = i.researchnum) and      

            (i.researchitemnum = m.researchitemnum);

            



      졸았음 



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


      [01] Transaction

         - 데이터 파일의 내용에 영향을 미치는 모든 거래

       

         - INSERT, UPDATE, DELETE 쿼리가 사용되는 경우 Transaction

           상태가 됩니다.

       

         - 데이터 변형되면 상황에 따라 복구되어야 하는 상태가 필요한 경우

           명령어를 이용하여 최초 상태로 데이터를 돌릴 수 있습니다.

       

         - COMMIT WORK(COMMIT): 변경된 데이터 확인후 데이터 영역에 적용

       

         - ROLLBACK WORK(ROLLBACK): 변경된 데이터를 취소하고 원래대로 

           복구합니다.     


      //

      트랜잭션 ; 하나로 묶은것


       


       

      CREATE TABLE pay2(

          name varchar(10) NOT NULL,

          pay  number(7)   NOT NULL,

          tax  number(6)   DEFAULT 0

      );

      SELECT * FROM tab;

       

       

       

       

      2. COMMIT

      INSERT INTO pay2(name,pay,tax) VALUES('왕눈이', 2000000, 100000);

      SELECT * FROM pay2;

      COMMIT;

       

       

       

       

       

      3. ROLLBACK

      DELETE FROM pay2 WHERE name='왕눈이';

      SELECT * FROM pay2;

       

      -- 삭제된 레코드가 복구 됩니다.

      ROLLBACK WORK;

      SELECT * FROM pay2;

       

       

       

       

      4. 여러단계의 복구

       

      DELETE FROM pay2 WHERE name='왕눈이';

      SELECT * FROM pay2;

       

      -- 아로미 추가

      INSERT INTO pay2(name,pay,tax) VALUES('아로미', 2200000, 120000);

      SELECT * FROM pay2;

       

      -- 아로미의 급여를 10% 인상합니다.

      UPDATE pay2 SET pay=pay * 1.1 WHERE name='아로미';

      SELECT * FROM pay2;

       

       

      -- 아로미의 세금을 11% 인상합니다.

      UPDATE pay2 SET tax=tax * 0.11 WHERE name='아로미';

      SELECT * FROM pay2;

       

       

      -- 최초 상태로 돌아갑니다.

      ROLLBACK WORK;

      SELECT * FROM pay2;

       

       

       

       

      5. SAVEPOINT

         - 특정 지점을 ROLLBACK할 수 있는 기능을 제공합니다.

       

      -- 원본 데이터 상태

      SAVEPOINT first

       

       

      INSERT INTO pay2(name,pay,tax) VALUES('아로미', 3000000, 300000);

      SELECT * FROM pay2;

       

      UPDATE pay2 SET pay=3500000, tax=350000;

      SELECT * FROM pay2;

       

      SAVEPOINT second;

       

      INSERT INTO pay2(name,pay,tax) VALUES('투투', 4000000, 400000);

      SELECT * FROM pay2;

       

       

      -- SAVEPOINT second 지역으로 복구합니다.

      ROLLBACK TO SAVEPOINT second;

      SELECT * FROM pay2;

       

      ROLLBACK TO SAVEPOINT first;

      SELECT * FROM pay2;

       

       

       

       

       

      6. READ Consistency(읽기 일관성)

         - iSQL+ 는 브러우저를 닫으면 COMMIT 됩니다.

         - SQL+는 창을 닫으면 ROLLBACK 됩니다.

         - SQL+는 exit명령을 내리면 COMMIT됩니다.

           따라서 로그아웃시에는 반드시 명시적으로 ROLLBACK, COMMIT명령 

           사용을 권장 합니다.

       

       

         USER 1 --- 임시 영역 ---+   +--- COMMIT  ----- Data Area

                                 +---+ 

         USER 2 --- 임시 영역 ---+   +--- ROLLBACK

       

       

      --user1(DBEdit)

      SELECT * FROM pay;

      INSERT INTO pay(name, pay, tax) VALUES('아로미', 2200000, 110000);

      SELECT * FROM pay;

       

       

      --user2(Toad), 변경된 데이터를 읽을 수 없습니다.

      SELECT * FROM pay;

       

       

      --user1(DBEdit)

      COMMIT;

       

       

      --user2(Toad), COMMIT이 되었음으로 변경된 데이터를 읽을 수 있습니다.

      SELECT * FROM pay;

       

       

       

       

       

       

       

      [02] Sequecne

       

      DROP TABLE emp;

       

      CREATE TABLE emp(

          num           number(5)   not null,

          name          varchar(10) not null,

          salary        number(7)   not null,

          department_id number(4)   not null

      );

       

      CREATE SEQUENCE emp_seq

          INCREMENT BY 1

          START WITH   1

          MAXVALUE     99999

          CACHE 20

          NOCYCLE;

          

       

          

      DROP SEQUENCE emp_seq;

       

       

       

      INSERT INTO emp(num,name, salary,department_id)

      VALUES(emp_seq.NextVal,'aaa', 1000000, 20);

      INSERT INTO emp(num,name, salary,department_id)

      VALUES(emp_seq.NextVal,'bbb', 1100000, 20);

      INSERT INTO emp(num,name, salary,department_id)

      VALUES(emp_seq.NextVal,'ccc', 1200000, 20);

       

       

      SELECT * FROM emp;

       

       

      COMMIT;

       

       

       

       

      SELECT sequence_name, min_value, max_value,increment_by,

              last_number

      FROM user_sequences;

       

      --12-8, 다음 sequence값을 볼 수 있으나 계속적으로 값이

      --증가됩니다.

      SELECT emp_seq.nextval as seq FROM dual;

       

      --현재 sequence를 봅니다.

      SELECT emp_seq.currval FROM dual;

       

       

       

       

       

       

       

      [03] INDEX 생성

       

      --WHERE조건에 나오는 컬럼을 대상으로 합니다.

      --PK컬럼은 자동으로 인덱스가 생성됩니다.

      --하나의 index는 테이블 용량의 5%~20%까지도 점유할 수 있음으로

      --과도한 인덱스 생성을 피해야합니다.

      --index가 많아지면 Transaction시간이 길어집니다.

      CREATE INDEX emp_num_idx

      ON emp(num);

       

       

       

       

       

      SELECT ic.index_name, ic.column_name,

             ic.column_position col_pos, ix.uniqueness

      FROM user_indexes ix,user_ind_columns ic

      WHERE ic.index_name = ix.index_name

      AND ic.table_name = 'EMPLOYEES';

       

       

       

       함수기반 인덱스

      CREATE INDEX emp_name_idx

      ON emp(UPPER(name));

       



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

      이제 오라클 끝남 ㅋㅋㅋㅋㅋ

      머리아파서 끝나고 좀 잤습니다... -_-


      HTML :>






      요새는 4.0하고 5씀 - 4.0이나 4.01이나

      아 피곤해 -_-

      3:48분 - 6시 30분에 끝나니까 - 3시간 정도 남은 거임ㅇㄴㅁㅇㄴㅁㅇㄴㅁ


      새로 javadb에다가 web -> workspace 만듬





      ㅇㅇ 이렇게 세팅하면 됨






      그담에


      WebContent -> 새 폴더 만듬(이름:html) -> 파일 만듬 (test.html)

      만들 때 html 파일 생성으로 만들어야함 -_-






      하는 법 보고 따라해보기 -_-);;

      크롬에서 결과값 보이게 하기





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


      그리고 폭풍 진격으로 2차 넘어감


      1. HTML Headings

      Headings are defined with the <h1> to <h6> tags.

      <h1> defines the most important heading. <h6> defines the least important heading.


      응 그냥 h1이 크고 h6이 작단 얘기여


      2. HTML Paragraphs

      The HTML <p> element defines a paragraph.
      브라우저는 문단 앞,뒤에 자동으로  빈줄을 추가한다.


      그리고 <hr>은 밑줄 그어주는 태그



      <!DOCTYPE html>

      <html>

      <head>

      <meta charset="UTF-8">

      <title>Insert title here</title>

      </head>

      <body>

      <p>This paragraph contains a lot of lines in the source code, but

      the browser ignores it.</p>


      <p>This paragraph contains a lot of spaces in the source code, but

      the browser ignores it.</p>


      <p>The number of lines in a paragraph depends on the size of the

      browser window. If you resize the browser window, the number of lines

      in this paragraph will change.</p>



      </body>

      </html>


      요렇게 엔터 들어간것같이 입력해도 <p></p> 안하면 그냥 한 덩어리인것 입니다


      으아 오라클을 몇시간만에 조졌더니 혼파망 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ



      <!DOCTYPE html>

      <html>

      <head>

      <meta charset="UTF-8">

      <title>Insert title here</title>

      </head>

      <body style="background-color: lightgrey">

      <h1>This is a heading</h1>

      <p>This is a paragraph</p>

      </body>

      </html>


      속성값은 :<-로 해줌 = 말고 :>



      >>>> style3.html

      <!DOCTYPE html>
      <html>
      <body>
       
      <h1 style="text-align:center">
      Centered heading</h1>
       
      <p>This is a paragraph.</p>
       
      </body>
      </html>

      중앙정렬인것

      아 ㅆㅌㄹㅆ

      1.  HTML  elements 에 Style을 적용하기 위한  3 ways
      • Inline - using a style attribute in HTML elements //지금까지 썼던 것
      • Internal - using a <style> element in the HTML <head> section //쓰타일만 따로 빼서 쓸수 있음
      • External - using one or more external CSS files //아예 다른 파일에 쓰는것



      스타일은 헤드 안에 있음 ㅇㅇ



      >>>> External Styling (External CSS)

      <!DOCTYPE html>
      <html>
      <head>
      <link rel="stylesheet" href="styles.css">
      </head>
       
      <body>
      <h1>This is a heading</h1>
      <p>This is a paragraph.</p>
      </body>
       
      </html>
       

      이거는 styles.css 만들어줘야함



      <!DOCTYPE html>

      <html>

      <head>

      <meta charset="UTF-8">

      <title>Insert title here</title>


      <style>

      h1{

      color:blue;

      font-family: verdana;

      font-size: 300%

      }

      p{ color:red;

      font-family:courier;

      font-size:160%}


      </style>

      </head>

      <body>

      <h1>제목제목</h1>

      <p>내용내용</p>

      </body>

      </html>


      이거는 폰트 모양도 바꿔줌


      근뎅 이렇게 짜면 h1 다 저거되고

      p 다 저거되니까 


      아이디 /클래스 속성을 줘서 바꿀 수 있음


      >>>> ex01.html

      <!DOCTYPE html>
      <html>
       
      <head>
      <style>
      p#p01 {  //p는 그냥 p- 인데 # 넣으면 p중에서 id 속성이 - p01인거를 이걸로 바꿔준다거
          color: blue;
      }
      </style>
      </head>
      <body>
       
      <p>This is a paragraph.</p>
      <p>This is a paragraph.</p>
      <p>This is a paragraph.</p>
      <p id="p01">I am different.</p>
       
      </body>
      </html>
       


      얘의친구는


      <!DOCTYPE html>
      <html>
       
      <head>
      <style>
      p.error {                            얘는 클래스 속성인데 . <- 으로 표현함 ㅇㅇ class 이름ㅇㅣ error 
          color:red;
      }
      </style>
      </head>
      <body>
       
      <p>This is a paragraph.</p>
      <p>This is a paragraph.</p>
      <p class="error">I am different.</p>
      <p>This is a paragraph.</p>
      <p class="error">I am different too.</p>
       
      </body>
      </html>



      그러니까 id: #이고 .: 클래스 속성이고


      id는 p#p01{ color: blue; font-size: 300%;}

      class는 p.error1 { color:red; } 이렇게 선언하고


      id는 이렇게 연결하고 <p id = "p01">내용내용2</p>

      class 는 이렇게 연결하고 <p class = "error1">내용내용2</p>


      ㅇㅇ

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

      <!DOCTYPE html>

      <html>

      <head>

      <style>

      a:link {

      color: #000000;//꺼먼색

      background-color: transparent; //기본

      text-decoration: none;    //밑줄 안그어

      }


      a:visited {

      color: #000000;

      background-color: transparent;

      text-decoration: none;

      }


      a:hover {

      color: #ff0000;

      background-color: transparent;

      text-decoration: underline;

      }


      a:active {

      color: #ff0000;

      background-color: transparent;

      text-decoration: underline;

      }

      </style>

      <meta charset="UTF-8">

      <title>Insert title here</title>

      </head>

      <body>

      <p>You can change the default colors of links</p>


      <a href="html_images.asp" target="_blank">HTML Images</a>


      </body>

      </html>


       이제 또 혼파망함

      이예~~~~~~~~~~~~~~~~


      <!DOCTYPE html>

      <html>

      <head>

      <meta charset="UTF-8">

      <title>Insert title here</title>

      </head>

      <body>

      <h2>SPECTACULAR MOUNTAINS</h2>

      <img src ="" alt ="안보일 때 대신 보여주는 글자" style ="width:304px;height:228px" >


      </body>

      </html>





      src는 그냥


      <!DOCTYPE html>

      <html>

      <head>

      <meta charset="UTF-8">

      <title>Insert title here</title>

      </head>

      <body>

      <h2>SPECTACULAR MOUNTAINS</h2>

      <img src ="https://45.media.tumblr.com/e99114292c92b67b79894909d2965bee/tumblr_o1u7ekgA0B1v5dqido1_400.gif" alt ="안보일 때 대신 보여주는 글자"  >


      </body>

      </html>


      난 이렇게 했는데

      D:\javadb\web\workspace\css_html\WebContent\html


      에다가 넣어줘도됨 ㅇㅇ



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




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




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



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




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




      5. 수업

      진도: 

      hw: 


      6. 할것

      뻘건 것을 퍼렇게 고쳐두기


      'Programming' 카테고리의 다른 글

      160405: 17회차  (3) 2016.04.05
      160404: 16회차  (4) 2016.04.04
      160329: 12회차  (3) 2016.03.29
      160328: 11회차  (5) 2016.03.28
      160325: 10회차  (0) 2016.03.25
      Posted by DAVID
      이전페이지 다음페이지
      블로그 이미지

      by DAVID

      공지사항

        최근...

      • 포스트
      • 댓글
      • 트랙백
      • 더 보기

      태그

      글 보관함

      «   2016/04   »
      일 월 화 수 목 금 토
      1 2
      3 4 5 6 7 8 9
      10 11 12 13 14 15 16
      17 18 19 20 21 22 23
      24 25 26 27 28 29 30

      링크

      카테고리

      PC (112)
      Programming (109)

      카운터

      Total
      Today
      Yesterday
      방명록 : 관리자 : 글쓰기
      DAVID's Blog is powered by daumkakao
      Skin info material T Mark3 by 뭐하라
      favicon

      PC

      • 태그
      • 링크 추가
      • 방명록

      관리자 메뉴

      • 관리자 모드
      • 글쓰기
      • PC (112)
        • Programming (109)

      카테고리

      PC화면 보기 티스토리 Daum

      티스토리툴바