일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- excel중복체크
- 1521
- 파일질라설치오류
- selectedIndex
- FileZilla설치
- calc.minus
- ctrl+/
- FileZilla다운로드
- push오류
- removeClass
- selectoptions
- SUB함수
- is_check
- 소스트리인증실패
- Math.round()
- Parent
- Excel
- hide
- 증가값
- addClass
- slideUp
- Git
- Math.ceil()
- 파일질라설치
- toFixed()
- 주석이 먹히지 않을 때
- calc.plus
- Math.floor()
- index %
- 파일질라다운로드
- Today
- Total
잡동사니에도 사랑을
총정리 본문
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파일이 필요
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;