2022. 10. 7. 17:01ㆍDev.Program/JSP & Javascript
지난시간 session/cookie 복습
> cookieDel.jsp 추가사항
쿠키값이 없는 경우에는 삭제할 필요가 없으니까 for문 돌리기 전에 if문으로 null값인지 아닌지 알아봄.
if(cookies!=null) { for문 }
⇒ null이 아닌 경우에만 for문이 돌아가도록.
======== cookieMain.jsp / cookiePro.jsp 문서 2개 새로 만들기
책 p. 290
cookieMain.jsp - 책에서 example1.jsp
cookiePro.jsp - 책에서 example2.jsp
언어가 한국어 설정이면 한국어만 보이게. 영어 설정이면 영어만 보이게.
⇒ 이런식으로 만들어 볼 예정
문제)
// lang 파라미터 값 가져오기
// 쿠키값 만들어주기 "clang", 위에 만든 lang 변수 값을 쿠키 값으로 설정
// 쿠키 시간 설정
// 클라이언트에 저장
// 쿠키값 생성 메세지
// 이동 cookieMain.jsp
풀어보기.
풀이 )
Cookie cookie = new Cookie("clang", lang);
new 선언 => cookie를 담을 기억장소 만들기
문제)
String language = "korea";
- 변수 설정 먼저(korea 값은 넣든 말든 상관없음. 어차피 쿠키값 저장시킬거라...)
// request에 쿠키값 가져오기
// 쿠키값 있으면(if)
// for문으로 쿠키값 뽑아오기
// if 뽑아온 쿠키이름 "clang" 비교
// 일치하면 language 변수에 쿠키값 저장
푼 답)
일단 바뀌긴 바뀌네…..ㅎ
⇒ 이렇게 풀어도 되고! 선생님처럼 <% %> 밖에 <h3>Hello~</h3>로 따로 빼줘도 되고!
(아래쪽에 선생님 풀이 코드 넣어놓음)
> Cookie[] cookies = request.getCookies();
원래 쿠키는 다 따로 떨어져서 돌아다니는데, 배열을 선언해주면서
a 쿠키(i=0번째) | b 쿠키(i=1번째) | c 쿠키(i=2번째) | ……. | n 쿠키(i=n번째) |
이런 식으로 쿠키들이 배열 정리 되는것.
(그래서 for 문을 돌려서 내가 찾는 쿠키가 몇 번째에 담겨있는지 알아보고 뽑아오는것)
선생님 코드. (아래쪽 if 문 보면 <h3></h3>는 <%%> 코드 바깥으로 따로 빼줌)
근데 실행화면을 잘 보면 영어로 설정되서 나오는데 라디오박스에는 체크가 안 되어있다!
> cookieMain.jsp
그래서 문제)
한국어가 설정되어 있으면 라디오 박스에 한국어 체크 되고,
영어가 설정되어 있으면 라디오 박스에 영어 체크 되도록 제어. (if문 사용)
> cookieMain.jsp
풀이) checked는 <% %> 안에 들어가면 안되기때문에 바깥으로.
→ 쿠키는 여기서 끝입니다….. 뒤에는 쿠키 안나옴. 뒤에는 이제 세션값만 나올거….
======== jsp1 파일에 testForm3.jsp / testPro3.jsp 문서 2개 새로 만들기
js2 파일의 test9.html 에서 바디부분 긁어와서 testForm3.jsp에 적기.
js2 파일의 a.jsp 에서 바디부분 긁어와서 testPro3.jsp에 적기.
취미선택은 다중선택이 가능하므로
<%=request.getParameter("hob")%> 이렇게만 가져오면 첫번째 값만 가져옴.
(여러개의 값을 가져오지 못함)
< testPro3.jsp >
변수를 설정해주는데, Values! 여러개기 때문에 이렇게 오류가 뜸.
배열변수로 설정해주면 여러개의 값도 가능하기 때문에 오류가 없어진다.
문제)
밑에 request도 여러개의 값을 가져오게끔 for문으로 작성.
푼 답)
(줄줄이 나오니까 뒤에 띄어쓰기 붙여주는 센스!)
vvvvvvvvvvvvvvvvvvvvv
>> 취미를 선택하지 않고 넘기면
- 이렇게 500 오류뜸!
⇒ null 인데 for문의 hob.length 만큼 돌리라니까 에러가 나는거.
그래서 if 문을 통해 null이 아닐 경우에만 for문을 돌리게끔 제어해준다.
> 배열을 가지고 테이블에 출력하는 것을 해보자
푼 답)
---------------------------------------------------------------------------------------------
저번에 했던 jsp 테스트(과제) 선생님이 코멘트 달아서 남겨놓음.
우편번호를 윈도우창으로 새로 열어야했다...ㅎㅎ
> cookie 복습
> 배열을 가지고 테이블에 출력하는 것을 해보자.
풀이 )
<table border="1">
<tr><td>번호</td><td>취미</td></tr>
<%for(int i = 0; i < hob.length; i++) { %>
<tr>
<td><%=i+1 %></td>
<td><%=hob[i] %></td>
</tr>
<%}%>
⇒ 이렇게도 가능(선생님답안)
< DB 연동 - MySQL>
시작 - 오른쪽버튼 - 실행 - cmd
mysql -u root -p
1234
데이터베이스 목록
show databases;
데이터베이스 선택
use world;
테이블 목록
show tables;
테이블 안에 데이터 조회
select * from country;
# 쇼핑몰 프로젝트
- 전체 프로젝트 데이터를 저장할 공간 만들기 - 데이터베이스(이론적으론 스키마) 만들기
- 데이터 베이스를 관리할 사용자 만들고, 역할 부여(권한 부여)
- 주제별로 저장할 공간 만들기 - 테이블 만들기(회원, 게시판, 상품 등등...)
시작 - 오른쪽버튼 - 실행 - cmd
- 윈도우 상태
- mysql -u root -p
- 1234
- 데이터 베이스 서버(mysql)로 들어간 상태
- 모든 권한을 다 가지고 있음.
|information_schema -시스템관련
| mysql -시스템관련
| performance_schema -시스템관련
| sakila -예제 관련
| sys -시스템관련
| world -예제 관련
- create database jspdb1;
⇒ 데이터 베이스 만들기: *DB에서 사용하는 언어 중 SQL 구문
- jspdb1 만들어진 걸 확인할 수 있음.
< * SQL언어 구문 >
정의어 - 공간만들기(create), 수정(alter), 삭제(drop)
제어어 - 권한 부여 : 일을 할수 있게끔(grant), 권한 해제(revoke)
★ 조작어(실제로 프로그램에서 가장 많이 사용)
- 공간안에 내용 ★ 저장(insert), 수정(update), 삭제(delete), 조회(select) ★
- use jspdb1; 데이터 베이스 선택
- 이 많은 목록 중에 나는 jspdb1 을 사용하겠다는 뜻
- show tables; 지금은 테이블이 비어있는 상태.
> create table 테이블 만들기
> 학생 테이블을 만들건데, 학생의 번호 이름 등등을 만들어야함.
> 우리는 일단 번호, 이름만 만들어보자.
- create table student(
num int,
name varchar(20)
);
- // DB에서 java 의 String 타입은 varchar !
- show tables;
- 우리가 만든 student 테이블 생김.
- desc student;
- student table 구조확인.
- 필드라고 해서 테이블 형태로 생김.
- select * from student; => student 테이블 안에 모든 내용 확인
- 테이블 안에 있는 내용 확인 (아직은 비어있음.)
- insert into student(num, name)
values(1, '홍길동'); // 우리는 아직 한글 설정을 안해서 error 가 뜸vvv.
- ERROR 1366 (HY000): Incorrect string value: '\xC8\xAB\xB1\xE6\xB5\xBF' for column 'name' at row 1
- 테이블 안에 데이터 저장하기(입력하기)
< 기본 문법 >
insert into 테이블이름(열이름1, 열이름2)
values(값1, ‘값2’); //문자열은 작은따옴표(‘’) 안에 넣어주기
- 영문으로 하니까 잘 들어감(한글설정은 나중에 할 거)
- select * from student;
- 넣고 다시 확인하면 잘 들어가있다.
- insert into student(num, name)
values(1, 'honggil');
- 다시 1, 홍길동 넣어봄.
- select * from student;
- 값이 동일하게 두 번 들어감.
- 기준키를 만들어줘야됨. name은 중복값이 있을 수 있으니까 num을 기준으로!
- 기준키(primary key) 설정.
- status => DB의 현재 상황을 볼 수 있다.
- Current database: jspdb1
- Current user: root@localhost ⇒ localhost로 root에 로그인 했다.
- Server characterset: latin1
Db characterset: latin1
⇒ 라틴어로 설정되어있어서 한글 안나옴.(UTF-8로 설정 바꿔줘야 함)
- ProgramData 안보이면 보기-숨김항목 체크
- C:\ProgramData\MySQL\MySQL Server 5.7 ⇒ my.ini
- 바로 수정이 안되기 때문에 복사해서 바탕화면으로 가져감(수정 후 덮어쓰기 할 예정)
- 에디터로 열어줌(Notepad++)
- 에디터로 열어줌(Notepad++)
- #은 주석 : 지워줄거임
- character-set-server=UTF8
- UTF-8 에서 -는 빼고 적기
- 다시 파일 옮기기 => 파일 덮어쓰기
- cmd 창 닫아주고 db 재시작 해주기
- 돌고래 모양 Restart
- mysql -u root -p
1234
- status
- utf8로 바뀐 것을 확인할 수 있다.
- show databases;
- 그 전에 만들어둔 게 나옴.
- use jspdb1
- status
- 이전에 만들어 둔 건 언어가 안바뀜. 지우고 다시 만들기.
- drop tables student;
- 테이블 삭제
- show tables;
- 삭제 확인
- drop database jspdb1;
- 데이터 베이스 삭제
- show databases;
- 조회하면 삭제된 거 확인 가능
- create database jspdb1;
- use jspdb1 // jspdb1 선택
- status
- 한글 설정 잘 됨. (확인)
- create table student(
num int primary key,
name varchar(20)
);
- num 으로 기준키(primary key)를 잡아줌. (name은 중복 가능하기 때문)
- show tables;
- 학생 테이블이 잘 만들어짐.
- desc student;
- num이 primary key 로 설정됨.
- insert into student(num, name)
values(1, '홍길동');
- select * from student;
- 한글 설정 해주니까 이제 한글도 잘 들어감!
- insert into student(num, name)
values(1, '홍길동');
- 이제 primary key를 설정했기 때문에 중복값은 안들어가짐.
- ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
- primary key(여기선 num)는 중복 되어도 ERROR, 안적어도 ERROR
- insert into student(num
values(3);
- 이름 빼고 num 값 만은 넣을 수 있다. 위에도 num 만 적어주기. 이름에는 NULL 값이 나옴.
- insert into student(name)
values('홍');
- ERROR 1364 (HY000): Field 'num' doesn't have a default value
- 이렇게 이름만 넣는 건 안됨 (num 이 primary key 이기 때문에 무조건 적어줘야 됨.)
- 5번 까지 차례대로 넣어 주기.
< 기본 문법 : 조건 >
select 열이름, 열이름 from 테이블이름
where 조건열=값;
- select * from student;
- * 은 전체열 뽑기
- select name from student;
- 원하는 열만 적으면 그 열만 뽑아서 볼 수 있다.
- select * from student
where num=2;
- where로 조건을 걸어서 num 번호가 2번인 사람만 가져올 수 있다.
문제 ) 이름이 유관순인 사람 가져오기
- select * from student
where name=’유관순’;
- 풀이
문제) 번호가 1번이면서 동시에 name이 홍길동 인 사람(and 연산자 사용)
- select * from student
where num=1 && name=’홍길동’;
- 풀이
< 기본 문법 : 정렬 >
select 열이름, 열이름 from 테이블 이름
order by 기준열 desc/asc;
정렬은 아무것도 안적을 경우 기준키(primary key)를 기준으로 오름차순 정렬 -default
문제) num을 기준으로 내림차순 정렬
- select * from student
order by num desc;
- 풀이
문제) name을 기준으로 오름차순 정렬
- select * from student
order by name [asc];
- 풀이. [asc] 는 생략가능
문제) name을 기준으로 내림차순, num 오름차순
- select * from student
order by name desc, num [asc];
- 풀이. [asc] 는 생략가능
< 기본 문법 : 데이터 수정 >
update 테이블이름 set 수정할 열이름 = 값, 수정할 열이름 = 값
where 조건열 = 값;
- update student set name = '김길동'
where num = 3;
- 3번 데이터를 김길동으로 수정
문제) 5번 학생을 학번은 7로, 이름은 ‘유길동’ 변경
- update student set num = 7, name = '유길동'
where num = 5;
- 풀이 (where를 안붙이면 모든 데이터가 다 바뀜)
< 기본 문법 : 데이터 삭제 >
delete from 테이블이름
where 조건열 = 값;
- delete from student
where num = 7;
- 7번 삭제
문제) 이름이 이순신 삭제
- delete from student
where name = ‘이순신’;
- 풀이
insert update delete => 결과값 없음 (컴퓨터에서는 같은 묶음으로 취급)
- Query OK, 1 row affected~~~~
select ⇒ 결과값 있음
- 결과값 출력
(책 428p) JSP => DB 연동
- 그냥 연동 안됨. java와 DB를 연결해주는 프로그램 필요. => JDBC 프로그램
- mysql-connector-java-5.1.47.jar => 우리가 쓸 JDBC 파일
- 여기 안에 전부 설치! (복사해서 넣어주면 알아서 설치됨)
StudyJSP - WebContent - WEB-INF - lib에
mysql-connector-java-5.1.47.jar 복사해서 넣기.
< JSP - DB 연동 >
1단계 ) JDBC 프로그램 설치 - 설치한 JDBC 안에 있는 드라이버 불러오기
2단계 ) 불러온 드라이버를 이용해서 DB 주소, DB 아이디, DB 비밀번호를 가지고 DB에 접속
⇒ 접속했을 때 연결이 유지가 되어야 하기 때문에 접속 정보를 저장.
3단계 ) 연결정보를 이용해서 SQL 구문을 만들고 실행할 수 있는 객체 생성
⇒ 실행할 수 있는 java 파일이 있음.
4단계 ) 객체 실행
⇒ SQL 구문이 실행되어짐. (눈에는 안보이지만 내부적으로 동작이 되어짐)
⇒ insert, update, delete (4단계로 마무리)
⇒ select 는 결과값이 있기 때문에 5단계(결과 저장) 과정으로 넘어감.
5단계 ) 결과를 처리하는 작업 (출력, 배열저장)
⇒ select
마무리 단계 ) 객체생성 기억장소 해제
WebContent - jsp3 폴더 새로 만들기.
jsp3 - jdbcTest.jsp 파일 새로 만들기.
- class를 관리하는 파일.
- forName이라는 기능이 있다.
- Class.forName(className);
⇒ className은 위치까지 다 알려줘야됨.
- com 폴더 속 mysql 폴더 속 jdbc 폴더 속에 Driver.class 가 있음.
com.mysql.jdbc.Driver => 폴더 속 구분은 . 으로 구분함!
.class는 없어도 됨. 우리는 class를 불러오는거기 때문에 확장자는 적어줄 필요 없다.
- DriverM + ctrl + space => DriverManager 엔터!
- <%@page import="java.sql.DriverManager"%>
- 맨 위에 나타남.
- java 폴더 안에 sql 폴더 안에 DriverManager 라는 게 들어가 있는걸 알려주는 표시.
- 우리는 java.sql 폴더 안에 있는 것만 쓸거.
- DriverManager : Driver를 관리하는 역할
- DriverManager.getConnection(디비주소, 디비아이디, 디비비밀번호);
- 우리는 디비주소가 다 길어서 String 변수에 따로 담아줄 거.
- String dburl = "jdbc:mysql://localhost:3306/jspdb1";
- ⇒ 3306 통로만 사용, 우리가 만든 jspdb1
- String dbuser = "root";
- String dbpass = "1234";
- DriverManager.getConnection(dburl, dbuser, dbpass);
- 접속 정보를 저장하는 변수에 담아줘야 함.
- Connection 도 java.sql 선택!
- <%@page import="java.sql.Connection"%>
- 맨 위에 나타남.
- Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);
- 실행화면
- 최종 코드
- <%
Class.forName("com.mysql.jdbc.Driver");
String dburl = "jdbc:mysql://localhost:3306/jspdb1"; // 우리가 만든 DB
String dbuser = "root"; // 우리가 쓰는 DB 아이디
String dbpass = "1234"; // 비밀번호
Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);
%>
<%="연결성공" %>
- ㅎㅎㅎㅎㅎ
insertForm.jsp 랑 insertPro.jsp 파일 새로 만들기
- <form action="insertPro.jsp" method="get">
학번 : <input type="text" name="num"> <br>
이름 : <input type="text" name="name"> <br>
<input type="submit" value="학생등록">
</form>
- request 파라미터 가져와서 변수에 저장
- int num = request.getParameter("num") ⇒ 이렇게 적으면 오류남!
- 형변환 꼭 해주기!!!!! 어쩐지 계속 오류 나더라 ㅎ.ㅎ
- <%
int num = Integer.parseInt(request.getParameter("num"));
String name = request.getParameter("name");
%>
학번 : <%=num %><br>
이름 : <%=name %><br>
'Dev.Program > JSP & Javascript' 카테고리의 다른 글
게시판(board) (0) | 2022.10.07 |
---|---|
JSP - DB 연동 (0) | 2022.10.07 |
내장객체 (0) | 2022.10.07 |
내장함수 / 객체지향 (0) | 2022.10.07 |
태그 / 주석 / function 함수 (0) | 2022.10.07 |