잡동사니에도 사랑을

총정리 본문

정리

총정리

luvforjunk 2021. 9. 10. 20:06
728x90
반응형

Eclipse 설치

www.eclipse.org

 

데이터베이스(Database)

서로 관련되는 데이터들을 일정한 체계와 순서로 모아 놓은 데이터의 집합을 의미 한다

 

DBMS(Data Base Management System)

데이터베이스 관리 시스템(DBMS)은 데이터베이스(Database)를 관리하는 소프트웨어를 의미

하며, 대표적인 기능은 데이터의 정의(Define), 생성, 조작, 공유, 보호, 유지 보수가 있다.

 

Oracle Express 18c 설치

www.oracle.com

 

컴퓨터이름이나 계정이 모두 영문(한글X), 공백X, 반드시 관리자 계정 이어야한다

1. 설치

OracleXE184_Win64.zip 압축풀기

     ↓

setup.exe 더블클릭

     ↓

암호 : 『oracle』 입력 (sID : xe 기본설정)

     ↓

 

 

 

2. 확인

① 시작 → 제어판 → 시스템 및 보안 → 관리도구 → 서비스

② 내PC → 우클릭 → 관리 → 서비스

OracleServiceXE시작됨자동

OracleOraDB18Home1TNSListener시작됨자동

 

3. Listener 확인

: 2개의 파일에서 [HOST = pc이름][PORT = 1521] 확인한다

C:\app\bitcamp\product\18.0.0\dbhomeXE\network\admin

 

- listener.ora (서버)

: 클라이언트가 오라클 서버에 접속하기 위해서 서버 컴퓨터에 하는 설정

- tnsnames.ora (클라이언트)

: 클라이언트에서 오라클 서버에 접속할 때 필요한 설정

 

SQL

1. 방법

① 시작 → Oracle-OraDB18Home1 → SQL Plus

사용자명 입력: system

비밀번호 입력: oracle

 

SQL> show user;

USER은 "SYSTEM"입니다

 

SID (데이터베이스명) 확인

SQL> select name from v$database;

NAME

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

XE

 

② 시작 → 실행 → cmd

C:\Users\user> sqlplus

사용자명 입력: system

비밀번호 입력: oracle

 

C:\Users\user> sqlplus system/oracle

 

③ 웹

http://localhost:5560/isqlplus ← Enterprise용

http://localhost:8080/apex ← Express용

https://localhost:5500/em ← Express 18c

Oracle Express 18c에서는 port가 5500 이다.

 

2. hr 계정

: 반드시 관리자 계정(system)에서 해야 한다

: cmd(관리자 권한으로 실행)

 

>sqlplus system/oracle

 

SQL> select * from all_users;

hr계정이 안보인다

예전에는 lock으로 설정되어 있어서 unlock으로 풀어 써지만 지금은 hr 계정이 존재하지 않기 때문에 hr계정을 만들어서 사용해야 한다

 

SQL> alter session set "_ORACLE_SCRIPT"=true;

세션이 변경되었습니다.

 

12c를 11g처럼 동작하게 만드는 것

컨테이너 데이터베이스를 만들지 않고 11g와 같은 사용자를 만들려면 12c 트릭은 문서화 되지 않은 매개 변수 _ORACLE_SCRIPT 를 true 로 설정하는 것

 

SQL> @?/demo/schema/human_resources/hr_main.sql

human_resources 폴더가 존재하는 위치

C:\app\bitcamp\product\18.0.0\dbhomeXE\demo\schema\human_resources

 

specify password for HR as parameter 1:

1의 값을 입력하십시오: hr

 

specify default tablespeace for HR as parameter 2:

2의 값을 입력하십시오: users

 

specify temporary tablespace for HR as parameter 3:

3의 값을 입력하십시오: temp

 

specify log path as parameter 4:

4의 값을 입력하십시오: $ORACLE_HOME/demo/schema/log

 

다운로드가 시작된다...................................

 

PL/SQL procedure successfully completed.

 

not spooling currently

 

다운로드가 완료된다

 

SQL> conn hr/hr

연결되었습니다.

 

SQL> show user;

USER은 "HR"입니다

 

3. 사용자 계정 만들기

: 반드시 관리자 계정(system)에서 해야한다

계정명 : c##java (12c부터)

비밀번호 : bit

① SQL> create user 계정 identified by 암호;

SQL> grant create session, create table, create sequence, create view to 계정;

③ SQL> alter user 계정 default tablespace users; -- users (테이블스페이스 명)

④ SQL> alter user 계정 quota unlimited on users;

-- UNLIMITED는 사용자가 USERS 테이블스페이스가 완전히 채워질 때까지 데이터를 저장할 수 있음을 지정하는 키워드

 

4. 사용자 계정 만들기 - C##를 붙이지 않고

: 반드시 관리자 계정(system)에서 해야 한다

계정명 : java (12c부터)

비밀번호 : bit

SQL> alter session set "_ORACLE_SCRIPT"=true;

세션이 변경되었습니다.

SQL> create user java identified by bit;

SQL> grant create session, create table, create sequence, create view to java;

SQL> alter user java default tablespace users; -- users (테이블스페이스 명)

SQL> alter user java quota unlimited on users;

SQL> conn java / bit

 

SQL> conn system / oracle

SQL> drop user java;

drop user java

*

1행에 오류:

ORA-28014: 관리 사용자를 삭제할 수 없습니다.

 

SQL> alter session set "_ORACLE_SCRIPT"=true;

SQL> drop user java;

사용자가 삭제되었습니다.

 

테이블스페이스(TableSpace) 정의

테이블이 저장되는 공간입니다.

오라클 에서는 테이블스페이스라고 해서 테이블이 저장될 공간을 먼저 만들고 나서 테이블을 생성합니다. 각각의 테이블을 테이블스페이스별로 나누어서 관리와 퍼포먼스의 향상을 가지고 오는 것입니다.

테이블스페이스를 생성하면 정의된 용량만큼 미리 확보한 테이블스페이스가 생성되어지고 생성되어진 테이블스페이스에 테이블의 데이타가 저장됩니다.

예를 들면 많은 데이터가 쌓일 게시판 테이블은 기본용량 100MB, 자동 확장 10MB로 테이블스페이스를 만들어서 그곳에 게시판 테이블을 만들어 쓰면 게시판 데이터는 그곳에 100MB 까지 데이터가 저장되고 용량 초과 시 자동적으로 10MB 단위로 테이블 스페이스의 크기는 확장됩니다.

 

5. 계정 삭제

: 반드시 관리자 계정(system)에서 해야 한다

 

SQL> drop user 계정명

: 계정에 데이터(테이블)가 없을 경우

 

SQL> drop user 계정명 cascade;

: 계정에 데이터(테이블)가 있을 경우

 

6. 테이블 생성

create table 테이블명(필드명 필드타입, 필드명 필드타입,...);

: 테이블명, 필드명 한글 가능

 

[ex]

create table 연산(

x int, -- 고정형, int는 소수이하 자른다(반올림 된다)

y number, -- 가변형, number는 소수이하 놔둔다

z number(10,3));

 

SQL> select * from tab;

SQL> desc 연산;

 

create table dbtest(

name varchar2(15), -- char(고정형), varchar2(가변형)

age number,

height number(10,2),

logtime date);

 

 

Enterprise 한글 1자 = 2byte

Express 한글 1자 = 3byte

 

7. 레코드 추가

insert into 테이블명(필드명,...) values(값,...);

insert into 테이블명 values(값,...); ← 테이블의 필드순서가 일치하면 필드명은 생략가능

 

[ex]

insert into 연산(x, y, z) values(25, 36, 12.34567);

insert into 연산(x, y, z) values(25.34567, 36.34567, 12.34567);

insert into 연산(x, y) values(25.666, 36.88888);

insert into 연산(z,y,x) values(1, 2, 3); -- 순서가 바뀌어도 된다

 

insert into 연산 values(25, 36, 12.34567);

-- 필드명 생략 가능하게 되면 필드를 빠짐없이 순서대로 입력해야한다

insert into 연산 values(25, 36, 1234567.3456); -- 유효숫자는 최대7자리

insert into 연산 values(25, 36, 12345678.3456); -- error

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

insert into dbtest(name,age,height,logtime) values('홍길동',25,185.567,sysdate);

insert into dbtest(name,age,height,logtime) values('Hong',30,175.56,sysdate);

insert into dbtest(name,age) values('희동이',3);

insert into dbtest(name, height) values('홍당무', 168.89);

insert into dbtest values('분홍신',5,123.5,sysdate);

insert into dbtest(name) values('진분홍');

 

8. 트랜잭션

: commit을 하기 전까지의 모든 명령어

 

insert, update, delete에 lock이 걸려있다

① commit - 갱신

② rollback

 - 취소

 - commit한 이후의 시점으로 돌아간다

 - 현재 트랜잭션이 취소된다.

 

9. 레코드 추출

select 필드, 필드,.. from 테이블명;

select * from 테이블명;

select * from 테이블명 order by 필드명 asc; → 오름차순(asc는 생략가능)

select * from 테이블명 order by 필드명 desc; → 내림차순

 

select * from 테이블명 order by 필드명 asc, 필드명 desc;

→ 첫번째 필드에 똑같은 데이터가 존재하면 두번째 필드로 정렬한다.

select * from 테이블명 where 조건;

 

select name, age from dbtest;

select * from dbtest;

select * from dbtest where name='홍길동';

select * from dbtest where name like '홍%';

select * from dbtest where name like '_홍%';

select * from dbtest where name like '__홍%';

select * from dbtest where name='hong'; -- 데이터는 대소문자 가린다

select * from dbtest where lower(name) = 'hong'; -- upper() 대문자

select * from dbtest where name like '%동%' and age<20;

select * from dbtest where age is null;

select * from dbtest where age is not null;

 

10. 레코드 수정

update 테이블명 set 수정할 내용 where 조건

update dbtest set age=0 where name='홍당무';

update dbtest set age=0, height=0 where name='진분홍';

update dbtest set age=age+1;

update dbtest set age=age+1 where name='홍길동';

 

11. 레코드 삭제

delete 테이블명; ← 모든 레코드 삭제

delete 테이블명 where 조건;

 

12. 테이블 삭제

drop table 테이블명;

drop table 테이블명 purge; ← 휴지통을 거치지 않고 바로 삭제

 

flashback table 테이블명 to before drop; ← 복원

purge recyclebin; ← 휴지통비우기

select * from recyclebin; → 휴지통에 테이블 정보 검색

show recyclebin;

 

시퀀스 객체

 : 순차적으로 정수값을 자동으로 생성하는 객체

 

create sequence 시퀀스명

[increment by 증가값]

[start with 시작값]

[maxvalue 최대값 | minvalue 최소값]

[cycle | nocycle]

[cache | nocache]

  - increment by 증가값 : 증가/감소 간격(기본값 : 1)

  - start with : 시작번호(기본값 : 1)

  - maxvalue/minvalue : 시퀀스의 최대/최소값 지정

  - cycle/nocycle : 최대/최소값에 도달 시 반복여부 결정

  - cache/nocache : 지정한 수량 만큼 메모리 생성여부 결정

                     (최소값 : 2, 기본값 : 20)

 

 

SQL> create sequence test increment by 2 start with 1 maxvalue 9 cycle nocache;

Sequence created.

SQL> select test.nextval from dual; -- dual 가상 테이블명

SQL> select test.currval from dual;

SQL> select * from user_sequences;

SQL> drop sequence test;

Sequence dropped.

 

 

JDBC (Java DataBase Connectivity)

1. Driver Loading - 1번 (*.jar이 필요)

2. Connection - URL, USER, PASSWORD

3. Statement - SQL(insert, delete, update, select...)

   PreparedStatement

 

ojdbc8.jar

필요한 Project의 lib에 넣기

 

[실습]

Java Project : dbtest

Package : dbtest.dao

Class : InsertTest.java

          UpdateTest.java

          SelectTest.java

 

[문제]

Project : student

Package : com.dao

Class : Student.java

 

# 테이블 작성

create table student(

name varchar2(15) not null, -- 이름

value varchar2(15), -- 학번 or 과목 or 부서

code number -- 1이면 학생, 2이면 교수, 3이면 관리자

);

 

menu()

****************

   관리

****************

  1. 입력

  2. 검색

  3. 삭제

  4. 종료

****************

  번호선택 : 4

프로그램 종료합니다

 

 

1번인 경우

insertArticle()

****************

   1. 학생

   2. 교수

   3. 관리자

   4. 이전메뉴

****************

   번호선택 :

 

1번 학생인 경우

이름입력 :

학번입력 :

 

2번 교수인 경우

이름입력 :

과목입력 :

 

3번 관리자인 경우

이름입력 :

부서입력 :

 

2번인 경우

selectArticle()

****************

   1. 이름 검색 (1개 글자가 포함된 이름은 모두 검색)

   2. 전체 검색

   3. 이전메뉴

****************

   번호선택 : 1

 

1번 경우

검색할 이름 입력 : 이

이름=희동이학번=2015

이름=이교수과목=JAVA

 

3번인 경우

deleteArticle()

삭제를 원하는 이름 입력 : (정확하게 3개의 글자가 모두 입력된 상태)

 

[문제]

Project : friend

Package : friend.action

Class : FriendManager.java

Package : friend.dao

Class : FriendDAO.java

Package : friend.bean

Class : FriendDTO.java

 

# 테이블 생성

create table friend(

seq number primary key, -- 기본키(not null, unique)

name varchar2(15) not null,

tel1 varchar2(5),

tel2 varchar2(5),

tel3 varchar2(5),

gender number, -- 남자는 0, 여자는 1

read number default 0, -- 선택해제 0, 선택 1

movie number default 0,

music number default 0,

game number default 0,

shopping number default 0);

 

# 시퀀스

create sequence seq_friend nocycle nocache;

 

 

* Apache

: 아파치 소프트웨어 재단의 오픈소스 프로젝트이다.

: 웹서버로 불려진다

: 클라이언트 요청이 왔을 때만 응답하는 정적 웹페이지에 사용된다. (HTML, CSS, 이미지 등)

: 웹서버 - 80번 포트로 클라이언트 요청(POST, GET, DELETE)이 왔을 때만 응답

 

* Tomcat

: Servlet이나 JSP의 컨테이너

: WAS(Web Application Server)

: 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부른다

: dynamic(동적)인 웹을 만들기 위한 웹 컨테이너

 

 

* 언어별 웹서버 구성

(JAVA) JSP, Servlet -> 아파치 톰켓 -> WAS 서버 (WEB서버 내장)

(C,C++) PHP -> RWAPM -> WAS 서버 (WEB서버 내장)

(MFC, .NET) ASP, ASPX -> IIS ->WAS 서버 (WEB서버 내장)

 

1. 다운로드

tomcat.apache.org

apache-tomcat-9.0.44.exe

 

2. 설치

apache-tomcat-9.0.44.exe 더블클릭 → C:\Tomcat 9.0 위치 선택

 

Tomcat이 설치되는 default위치

C:\Program Files\Apache Software Foundation\Tomcat 9.0

 

3. 서비스

① 시작 - 제어판 - 관리도구 - 서비스

② 내PC - 관리 - 서비스

시작유형 : 수동

서비스 : 중지

 

4. 서버실행

C:\Tomcat 9.0\bin\Tomcat9.exe 더블클릭

 

5. Tomcat의 메인화면

http://localhost:8080

http://localhost:8080/index.jsp

http://127.0.0.1:8080

 

* 환경변수

JAVA_HOME (JDK의 위치)

C:\Program Files\Java\jdk-11.0.10

 

TOMCAT_HOME or CATALINA_HOME (Tomcat의 위치)

C:\Tomcat 9.0

 

[실습] hello.html

default Context : ROOT

                 webapps

http://localhost:8080/Context명/파일

 

http://localhost:8080/ROOT/hello.html - X ← default Context명 ROOT는 쓰시면 안된다

http://localhost:8080/hello.html - O

ROOT가 아닌 다른 Context일 경우에는 반드시 URL에 써 주어야 한다.

 

Servlet

: 웹에서 실행하는 프로그램

: html in JAVA

: public static void main(String[] args) 메소드가 없다

: 주기함수(Life Cycle)

: 반드시 public 이어야한다.

: new X

: 서버안에 저장

 

# 주기함수(Life Cycle)

init() : 맨처음에 1번만 호출

  ↓

service() - doGet() : 클라이언트가 요청시마다 호출

         - doPost()

  ↓

destroy()

 

서비스

1. get방식

: default

: 주소표시줄(Query String)를 통해서 이동

: 이동되는 데이터가 보인다

: 이동되는 데이터가 문자열만(String) 처리

 

2. post방식

: 클라이언트가 post로 요청 시에만 적용

: 내부적으로(페이지단위) 이동

: 이동되는 데이터가 안 보인다.

: 대량데이터

 

[실습]

Project : helloServlet

Package : com.hello

Servlet : HelloServlet

 

[실습]

Context : testServlet

Package : com.param

Servlet : ParamServlet.java

Folder : exam

File : parameter.html

 

[실습]

회원가입과 로그인

Project : memberServlet

Folder : member

File : writeForm.html

        loginForm.html

 

Package : member.service

Servlet : WriteServlet.java

 

Package : member.dao

Class : MemberDAO.java

 

Package : member.bean

Class : MemberDTO.java

 

테이블 작성

create table member(

name varchar2(30) not null,

id varchar2(30) primary key, --기본키, unique, not null, 무결성 제약 조건

pwd varchar2(30) not null,

gender varchar2(3),

email1 varchar2(20),

email2 varchar2(20),

tel1 varchar2(10),

tel2 varchar2(10),

tel3 varchar2(10),

zipcode varchar2(10),

addr1 varchar2(100),

addr2 varchar2(100),

logtime date);

 

 

[실습]

방명록

Project : guestbookServlet

Folder : guestbook

File : guestbookWriteForm.html

   

Package : guestbook.service

Servlet : GuestbookWriteServlet.java

          GuestbookListServlet.java

 

Package : guestbook.dao

Class : GuestbookDAO.java

 

Package : guestbook.bean

Class : GuestbookDTO.java

 

테이블 작성

create table guestbook(

seq number primary key,

name varchar2(30),

email varchar2(30),

homepage varchar2(35),

subject varchar2(500) not null,

content varchar2(4000) not null,

logtime date);

 

시퀀스

create sequence seq_guestbook nocycle nocache;

 

 

JSP (Java Server Page)

: 웹에서 실행하는 프로그램

: java in HTML

 

# 선언문

<%! 전역변수 or 메소드 - 1번 처리 %> init()

 

# 스크립트릿 (scriptlet)

<% 지역변수 or service처리 - 요청시 마다 처리 %> service()

 

# 출력

<%= 값 or 변수 %>

 

[실습]

Context : testJSP

File : hello.jsp

 

http://localhost:8080/testJSP/hello.jsp

 

hello.jsp

   ↓

hello_jsp.java (서블릿)

   ↓ 내용이 바뀔때만 컴파일

hello_jsp.class

 

내장객체

1. request : javax.servlet.http.HttpServletReqeuest

2. response : javax.servlet.http.HttpServletResponse

3. out : javax.servlet.jsp.JspWriter

4. session : javax.servlet.http.HttpSession

5. application : javax.servlet.ServletContent

6. pageContent : javax.servlet.jsp.PageContext

7. page : javax.servlet.jsp.HttpJspPage

8. config : javax.servlet.ServletConfig

9. exception : java.lang.Throwable

 

주석

1. Java

// 1줄

/*

    2줄 이상

*/

 

2. HTML

<!--

   웹브라우저에는 안보이나 소스보기(F12)하면 보인다

   내부적으로는 처리( <% %> <%= %> 수행한다)

-->

 

3. JSP

<%--

   웹브라우저에도 안보이고 소스보기(F12)해도 안보인다

--%>

 

[실습]

회원가입과 로그인

Project : memberJSP

 

Package : member.bean

Class : MemberDTO.java

Package : member.dao

Class : MemberDAO.java

 

Folder : member

File : writeForm.jsp

        write.jsp

        loginForm.jsp

        login.jsp

        loginOk.jsp

        loginFail.jsp

Folder : js

File : member.js

Folder : css

File : member.css

 

 

우편번호

1. 테이블 작성

create table newzipcode (

zipcode varchar2(7),

sido varchar2(20),

sigungu varchar2(30),

yubmyundong varchar2(20), -- 읍면동

ri varchar2(20),

roadname varchar2(100),

buildingname varchar2(100));

 

2. 다운로드 (덤프파일)

http://www.wdev.co.kr/zip/data.asp

   1) (2017-01-26)all.zip 압축풀기 - zrc5_all.txt

   2) Excel에서 zrc5_all.txt 열기 - CSV 형식으로 다시 저장한다 (newzipcode.csv)

 

3. 우편번호 테이블(newzipcode)에 레코드 입력

1) 파일을 작성하여 직접 입력하기

   가. newzipcode.ctl 파일 작성

      C:\app\bitcamp\product\18.0.0\dbhomeXE\bin\newzipcode.ctl

      load data

      infile 'D:/java_ee/lib/newzipcode.csv'

      insert into table newzipcode

      fields terminated by ","

      trailing nullcols

      (zipcode,

      sido,

      sigungu,

      yubmyundong,

      ri,

      roadname,

      buildingname)

 

   나. 실행 – cmd

     C:\app\bitcamp\product\18.0.0\dbhomeXE\bin>

                     sqlldr userid=c##java/bit control=newzipcode.ctl log=newzipcode.log

 

2) sqldeveloper에서 import 하기

 

 

JSP directive (지시자)

JSP 페이지를 해당 서블릿으로 어떻게 변환하는지 웹 컨테이너에게 알려주는 메시지이다

응답에 대한 설정을 부여하는 것이다

- JSP page directive <%@ page %>

- JSP include directive <%@ include %>

- JSP taglib directive <%@ tablib %>

 

1. JSP page directive

현재 페이지에 대한 설정

 

JSP page directive 속성

• import

• contentType

   HTTP 응답의 MIME(Multipurpose Internet Mail Extension) 타입을 정의

   기본값(default)은 “text/html; charset=ISO-8859-1”

• extends

   extends 속성은 생성된 서블릿에서 상속할 상위클래스를 정의한다

   extends는 거의 사용되지 않는 속성이다

• info

   서블릿 인터페이스의 getServletInfo()에 의해 검색될 JSP 페이지의 정보를 설정한다

• buffer

    JSP 페이지에 의해 생성될 결과를 처리하기 위한 버퍼 사이즈를 KB단위로 설정한다.

   기본값(default)는 8KB 이다.

• language

• isELIgnored

   default=false이므로 EL이 사용되도록 설정되어 있다

   JSP에서 EL(Expression Language)를 무시하도록 한다

• isThreadSafe

   default=true

   JSP와 서블릿(servlet)은 모두 멀티쓰레드가 된다.

   속성을 false로 설정하면, 웹 컨테이너는 다수의 요청(request)을 순차적으로 실행할 것이다.

   즉, 하나의 요청에 대해 JSP가 응답한 후에 그 다음 요청을 하나씩 차례대로 수행하는 것이다

• autoFlush

   default=true

   출력할 내용이 굉장히 많아서 버퍼 용량을 넘을 경우, 자동으로 flush해서 자동으로 클라이언트에게 정보를 내보내게하는 속성이다

   버퍼가 기본값이면 autoFlush가 적용될 일이 없기 때문에 보통 false로 준다.

• session

   default=true

   로그인 정보 저장

• pageEncoding

   default=ISO-8859-1

• errorPage

   에러 페이지를 지정한다.

   현재 페이지에 exception이 발생하면 설정된 에러 페이지를 호출한다.

• isErrorPage

   현재 페이지가 에러 페이지임을 선언한다

 

2. JSP include directive

JSP, HTML, TEXT 등의 리소스 파일을 불러올 때 사용한다.

include는 페이지 번역(translation) 시 리소스 파일의 실제 내용을 불러온다

똑같은 이름의 변수가 존재하면 error

 

3. JSP taglib directive

태그가 정의되어 있는 태그 라이브러리(tag library)를 지정할 때 사용한다.

태그를 정의하기 위해서는 TLD(Tag Library Descriptor)파일을 사용한다

 

 

JSP Action Tag

JSP 페이지 내에서 자바 코드를 기술할 때 가독성을 높이기 위한 방법

JSP 페이지간 흐름 제어

 

1. useBean

   클래스 객체를 생성하고 사용할 범위를 지정한다

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

 

   * scope 속성

   가. scope="page"

   - default

   - 현재 페이지에서만 적용

   나. scope="request"

   - request호출 관계에 있는 페이지간의 객체 공유

   - forward를 통한 페이지를 이동 했을 때

   다. scope="session"

   - 동일 브라우저(같은 세션)내에 표시되는 페이지간의 객체 공유

   라. scope="application"

   - 동일 서버내에서 서비스되어지는 페이지간의 객체 공유

 

2. setProperty

   useBean의 setter메소드 호출

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

 

3. getProperty

   useBean의 getter메소드 호출

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

 

4. include

   다른 페이지를 현재 페이지에 포함한다

   <jsp:include page="" />

<jsp:include page="" /> 는 포함될 페이지를 먼저 실행하고 결과만 포함한다. 그래서 변수명이 똑같아도 error가 안난다

<%@ include file="" %> 는 먼저 포함하고 컴파일한다 그래서 변수명이 똑같으면 error가 난다

 

5. forward

   현재 페이지의 제어를 다른 페이지로 전달

   <jsp:forward page="" />

 

 

HTTP 프로토콜은 클라이언트의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않는다.(Connectionless)

 

쿠키

: 생성된 쿠키는 클라이언트의 웹브라우저에 저장

: 웹사이트에 접속할 때 생성되는 정보를 담은 임시파일(4KB)

: ID 기억 - 다음에 접속시 별도의 절차없이 빠르게 연결

: 쿠키 삭제는 시간을 0으로 셋팅

: 사생활 침해

: 팝업창의 오늘 하루창 띄우지 않음

  새로고침으로 조회수 늘리는 걸 방지할 때

  최근 본 목록

 

쿠키생성

Cookie cookie = new Cookie("쿠키명", 값);

cookie.setMaxAge(3);//초 단위

 

세션

: 웹서버쪽의 웹컨테이너에 상태를 유지하기 위한 정보가 저장

: 세션은 기본 시간 1800초(30분)

: 각 클라이언트 고유 Session ID를 부여한다

  Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공

 

세션생성

HttpSession session = request.getSession();

session.setMaxInactiveInterval(30*60); //초 단위

 

세션부여

session.setAttribute("세션명“, ”값“)

 

세션 얻어오기

session.getAttribute("세션명“)

 

세션 삭제

session.removeAttribute("세션명“)

 

모든 세션 삭제 - 무효화

session.invalidate()

 

 

Connection Pool

: 서버에 미리 Connection 를 설정해 놓는 것

: 데이터베이스와 연결된 커넥션을 미리 만들어서 풀(Pool)속에 저장해 두고 있다가 필요할 때 커넥션을 풀에서 가져다 쓰고 다시 풀에 반환(close)하는 기법

: Connection의 내용이 바뀌면 서버만 수정해주면 된다

: 풀속에 미리 커넥션이 생성 되어있기 때문에 커넥션을 생성하는데 드는 연결시간이 소비되지 않는다

: 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수는 많지 않다

: 오라클 주소, 드라이버, ID, PW를 서버에 숨겨 놓음으로 보안에 좋다

: 서버의 Connection 들을 얻어오려면 javax.sql.DataSource 를 이용

: server.xml에서 <Context></Context>에 추가해야하는데 따로 context.xml를 만들어서 사용해보자

 

: 필요한 라이브러리

commons-collections-3.2.1.jar

commons-dbcp-1.4.jar

commons-pool-1.6.jar 

 

maxActive - 커넥션 풀이 제공할 최대 커넥션 개수

maxIdle - 사용되지 않고 풀에 저장될 수 있는 최대 커넥션의 개수, 음수일 경우 제한을 두지 않음

maxWait - 커넥션 풀을 대기하는 대기시간, 음수일 경우 제한을 두지 않음

 

파일 업로드 / 다운로드

: cos-2020.4.jar

: 반드시 POST 방식이어야 한다

: enctype="multipart/form-data"를 기입

: <input type="file" >으로 설정해야한다

: Eclipse에서는 가상폴더, 실제폴더가 따로 있다

: <form name="" method="post" enctype="multipart/form-data" action="">으로 설정해야한다

 

 

EL (Expression Language)

EL은 JSTL에 소개된 내용으로 JSP 2.0에 추가된 기능이며 JSP의 기본문법을 보완하는 역할을 한다

  (1) EL에서 제공하는 기능

      JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용

      집합 객체에 대한 접근 방법 제공

      수치 연산, 관계 연산, 논리 연산자 제공

      자바 클래스 메소드 호출 기능 제공

      표현 언어만의 기본 객체 제공

             표기법 : ${ expr }

 

  (2) 표현언어에서 자바메소드를 사용

     - 자바클래스 작성하고 메소드는 static 설정

     - 태그라이브러리에 대한 설정정보를 담고 있는 tld(Tag Library Descriptor)파일을 작성

     - web.xml에 tld파일을 사용할수 있는 설정정보를 추가

     - 자바클래스에 접근하는 jsp파일을 작성

 

JSTL (Jsp Standard Tag Library)

2개의 jar파일이 필요

https://mvnrepository.com

jstl-1.2.jar

standard-1.1.2.jar

 

pageScope → requestScope → sessionScope → applicationScope 순으로 호출

 

page - pageScope

request - requestScope

session - sessionScope

application - applicationScope

 

- 메소드 호출시 접두사 set/get를 생략 할 수 있다

  메소드명을 변수명처럼 사용 할 수 있다

 

제공되는 태그의 종류

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

라이브러리URIPrefix(접두어)

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

Corehttp://java.sun.com/jsp/jstl/core c

XMLhttp://java.sun.com/jsp/jstl/xml x

국제화http://java.sun.com/jsp/jstl/fmt fmt

DBhttp://java.sun.com/jsp/jstl/sql sql

함수http://java.sun.com/jsp/jstl/functions fn

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

 

테이블 작성

create table usertable(

name varchar2(30) not null,

id varchar2(30) primary key,

pwd varchar2(30) not null);

 

모델1기법

: 로직(Java)과 프리젠테이션(html, javascript, css)이 섞여있는 상태

: 개발시간, 개발비용 단축

: 유지보수가 어렵다

: 단발성

 

모델2기법 (MVC - Model View Controller)

: 로직(Java)과 프리젠테이션(html, javascript, css)를 따로따로 분리

: 유지보수 - 확장성 좋다

: 재활용이 어렵다

 

 

게시판

테이블

CREATE TABLE board(

     seq NUMBER NOT NULL, -- 글번호 (시퀀스 객체 이용)

     id VARCHAR2(20) NOT NULL, -- 아이디

     name VARCHAR2(40) NOT NULL, -- 이름

     email VARCHAR2(40), -- 이메일

     subject VARCHAR2(255) NOT NULL, -- 제목

     content VARCHAR2(4000) NOT NULL, -- 내용

 

     ref NUMBER NOT NULL, -- 그룹번호

     lev NUMBER DEFAULT 0 NOT NULL, -- 단계

     step NUMBER DEFAULT 0 NOT NULL, -- 글순서

     pseq NUMBER DEFAULT 0 NOT NULL, -- 원글번호

     reply NUMBER DEFAULT 0 NOT NULL, -- 답변수

 

     hit NUMBER DEFAULT 0, -- 조회수

     logtime DATE DEFAULT SYSDATE

 );

 

시퀀스 객체

CREATE SEQUENCE seq_board NOCACHE NOCYCLE;

 

이미지 게시판

테이블

CREATE TABLE imageboard(

     seq NUMBER PRIMARY KEY,

     imageId VARCHAR2(20) NOT NULL, -- 상품코드

     imageName VARCHAR2(40) NOT NULL, -- 상품명

     imagePrice NUMBER NOT NULL, -- 단가

     imageQty NUMBER NOT NULL, -- 개수

     imageContent VARCHAR2(4000) NOT NULL,

     image1 varchar2(200),

     logtime DATE DEFAULT SYSDATE

 );

 

시퀀스 객체

create sequence seq_imageboard nocache nocycle;

 

 

 

 

 

728x90
반응형