2020. 11. 24. 18:13ㆍBACK END/JSP
<모듈화에 관하여>
<Java Resource(자바 영역)>
-model(pkg) 생성
Emp.class
EmpDao.class
board.class
<webcontant(웹 페이지 영역)>
-example 폴더 생성(초간단 연습용 파일 저장소)
From00.jsp
From01.jsp
From02.jsp
To00.jsp
To01.jsp
To02.jsp
-common 폴더
공용 파일 저장소
-emp 폴더
회원 관련 파일 저장소
-board 폴더
게시물 관련 파일 저장소
**주문(order), 매출(sales) 등... 차후 필요에 따라 추가 생성
<2020/11/18>
<HTML 태그>
* pdf p.37
- 주요한 태그 : FORM(폼), TABLE(표), A 태그, HEAD, META, BODY 태그 등
- 태그는 <>로 시작하는 것들로, 여는 태그와 닫는 태그가 존재함
ㄴex. <head></head>, <body></body>, <html></html>
- 만약, 배경은 노란색, 글씨는 검정색 이라면,
body태그에 bg컬러는 yellow,
글자는 blackbg컬러와 글자는 속성이고,
yellow와 black은 속성값임.
<이클립스에서의 영역>
- jsp / java / oracle
1. jsp
- example 폴더에 우선 From01.jsp, To01.jsp 생성
- from과 to 파일의 역할
From01/02.jsp : 입력 양식 만들기
To01/02.jsp : 넘어온 데이터 저장해서 EmpDao.java에 넘겨서 처리하기
* jsp->java로 넘겨주려면 지시어가 필요함
2. java
- Java Resources > src > model.pkg > Emp.class / EmpDao.class 생성
- Emp와 EmpDao class 파일의 역할
- model.Emp.java : 데이터 1건을 처리해주는 bean 클래스,
VO(Value Object) 또는 DTO(Data Transfer Object) 객체
- model.EmpDao.java : Dao(Data Access Object) 클래스,
Dao클래스는 DB와 연동해 추가/수정/삭제/조회 등을 수정해줌.
3. 오라클 db
- emp테이블id, name, gender, hobby / salary / hiredate
---> 문자 / 숫자 / 날짜 등 데이터타입이 있음
위 5개 데이터는 11/19에 처리할 예정
<HTML 코딩 시작>
1. jsp영역
1) From01.jsp : 입력 양식 만들기
# 아래 그림은 From01.jsp에서 만든 입력 양식
- 전송(submit) 전 단계까지 완성- 실행은 항상 from.jsp에서 함
# 위 그림에 대한 <body> 태그 영역
<body>
<form action="To01.jsp" method="get">
아이디 <input name="id" type="text" value="hoho"><br>
성별
<input name="gender" type="radio" value="1" checked="checked">남자
<input name="gender" type="radio" value="2">여자
<br>
취미
<input name="hobby" type="checkbox" value="a">당구
<br>
<input type="submit" value="전송"> <br> <br>
<input type="reset" value="초기화"> <br> <br>
</form>
</body>
# 위 <body> 태그 설명
- <form>태그를 이용해 파라미터를 다른 페이지(To01.jsp)로 옮깁니다.
- action : 가기 위한 것, method : 갈 방식(get/post)을 정하는 것입니다.
- 파라미터 : id, name, gender, hobby, salary, hiredate 등과 같은 데이터집합
- name="내가명명"
- type="text/number/radio/checkbox/date"
- 타입의 속성에 따라 맡은 역할이 있음. 타입의 기본은 text임
- 기본값 설정 : value="" 또는 checked="checked"
- 추후 테이블의 이름과 emp데이터는 동일하게 기재
2) To01.jsp : 넘어온 데이터 처리하기
- <% %> : 스크립트릿, 자바 영역, 공백에는 변수나 메소드 기입
- <body></body> : <%= %> 기입
# 아래 그림은 To01.jsp에서 만든 입력 양식
- 전송(submit) 후 화면
# 위 그림에 대한 <body> 태그 영역
<%
String id=request.getParameter("id");
String name=request.gerParameter("name");
int _gender=Integer.parseInt(request.getParameter("gender"));
String(_gender)
switch(_gender) {
case 1 :
gender="남자";
break;
case 2 :
gender="여자";
break;
}
String hobby="";
String[] hobbies=request.getParameterValues("hobby");
if (hobbies == null) {
hobby="1개 이상을 선택하세요.";
} else {
for(int i=0; i < hobbies.length; i++) {
hobby += hobbies[i] + ""; ♣
}
}
int salary=Integer.parseInt(request.getParameter("salary")); ♣
String hiredate=request.getParameter("hiredate");
%>
<body>
아이디 : <%=id %><br>
이름 : <%=name %><br>
성별 : <%=gender %><br>
취미 : <%=hobby %><br>
급여 : <%=salary %>원<br>
입사일자 : <%=hiredate %><br>
</body>
# 위 <body> 태그 설명* 구체적인 설명은 저 아래 <파라미터코딩> 참고
- request : 페이지 입출력에 관련된 내장객체request에 파라미터가 들어가는데,
이걸 꺼내쓰려면 getter(getParameter)를 사용해야 함.
ㄴex. request.getParameter("salary")
- 표현식 : <%= 변수나 메소드 %>
- checkbox 타입은 if~else문 & 배열 for문 사용(파라미터 hobby)
- radio 타입은 switch문 사용(파라미터 gender)
<웹 페이지 주소 형식>
* pdf p.55 : 웹 페이지 주소 형식
- 쿼리(Query) 문자열(String) : 클라이언트에서 서버로 넘겨주는 파라미터들의 모음(일정형식의 데이터)
- 페이지 간에 정보의 교환이 필요한 경우가 있는데, 이를 위해 웹프로그래밍이 제공하는 기술
- ? : url과 쿼리문자열의 구분자
- & : 파라미터들의 구분자
- = : 파라미터의 이름과 값을 구분하는 구분자
- 공백은 + 으로 변환, 한글은 % + 16진수로 변환
<전송방식 get / post>
* pdf p.56 : 전송 방식, html의 method는 방식을 의미함.
1. get 방식
- 입력한 데이터를 URL에 붙여서 전송함. 이 시스템 구조를 알고 있어야 문자열 짜집기가 가능함
- post방식 보다 빠르지만, 데이터가 다 보이므로 보안에 취약함
- 사용이 간편함
- 길이가 256바이트를 넘을 순 없음
- 예시 : http://localhost:8989/Myweb/example/To01.jsp?id=a&name=n&gender=%EB%82%A8%EC%9E%90&hobby=%EB%8B%B9%EA%B5%AC&salary=10&hiredate=2020%2F11%2F19
2. post 방식
- 데이터(파라미터를 본문에 담음)가 header에 숨겨져 넘어감
- 입력한 데이터를 본문안에 포함해서 전송함
- 보안 관련 문제 발생이 적고, GET방식 보다 보안상 우수함
- 복잡한 형태의 데이터를 전송할 때 유용함
- 데이터 수에 제한이 없음
- 예시 : http://localhost:8989/Myweb/example/To01.jsp
<웹 프로그래밍의 흐름>
* pdf p.58 : 웹 프로그래밍의 흐름
<내장 객체>
* pdf p.85 ~ 88 : 내장 객체 (=빌트인객체)
내장 객체는 java의 system.out 이나 system.in 에서 out, in과 같음
마찬가지로, jsp에서의 내장객체는 자동으로 미리 만들어져 있는 객체임.
ex. request를 코딩할 때, 일부분 입력해도 자동생성 되는 걸 알 수 있음.
참고로 request와 같은 내장객체는 javax.selevet에 저장되어 있음.
이중에서도 페이지 입출력에 관련된 객체인 request/response가 제일 중요함!!!
<파라미터>
- 파라미터 : 클라이언트에서 서버로 넘겨주는 데이터들을 의미함
- form양식에서 (to로) 넘겨주는 데이터의 집합체
- ex. name = b ---> 파라미터이름 = 파라미터값
- ex. id, name, gender, hobby ... 등
- request는 소쿠리에 비유,이걸 To.jsp에서 오픈
- 이런 파라미터들을 넘기려면 전송 버튼이 필요함
전송(submit) : 어딘가로 보낸다는 것, To01로 보냄.
초기화(reset) : 넣었던 값들이 초기화됨
모두 같은 id 이름이지만,
1과 3은 파라미터의 이름이고 2는 자바의 변수
사용자가 보는 값은 "당구"
실제 넘어가는 데이터는 "a"
<out>
- out : 출력하기 위한 내장 객체 (pdf p.86)
- out.print("아이디 : " + id);
- 스크립트릿 <% %>은 jsp에서 자바코딩할 때 사용하는 태그
"out.print개념"이 활용도가 떨어져서 만든 게 바로 "표현식"
<스크립트릿(자바의 공간)>
* pdf p.71
- 스크립트릿 형식 : <% ~ %>
<표현식>
* pdf p.72
- out 개념이 활용도가 떨어져서 만든 게 "표현식"
- 스크립트릿을 출력하는 것들 :
1) out : <% 변수나 메소드 %>
2) 표현식 : <%= 변수나 메소드 %>
3) 파생변수도 가능(ex. 연봉) : <%= 12*salary %>
* 글자가 깨진다면?
---> 변수 선언하는 스크립트릿 블록 위 또는 제일 위에 encoding,
새로운 스크립트릿을 추가해 request.setCharacterEncoding("UTF-8"); 작성하면 됨
* 문서에 스크립트릿을 여러개 적을 수 있음
* jsp에서 nullpoint exception 발생하는 이유 : 파라미터이름이나 변수이름 중에 오타!!!!가 있어서
<파라미터 코딩>
<gender>
- 모든 파라미터(데이터)는 넘어가면서 전부 String이며,
따라서 숫자형태로 바꿔 줘야 합니다. (ex. 급여나 날짜)
- 이러한 변환은 받는 쪽에서(To01.jsp) 형변환합니다.
> String gender = request.getParameter("gender"); 가 아닌,
> int _gender = Integer.parseInt(request.getParameter("gender")); 로 작성함
ㄴgender에 아래와 같이 숫자 1이나 2가 들어오기 때문에 switch문으로 작성함
> switch(_gender){
case 1:
gender = "남자";
break;
case 2:
gender = "여자";
break;
}
성별 gender까지 완성.
<hobby>
- hobby는 체크박스로 생성
String[] getParameterValues(String name) ---> 배열
> String[] hobbies = request.getParameterValues("hobby");
- 0개 선택하면 null, 1개 이상은 not null
- 배열의 개수는 length로 구함
체크박스 2개 선택 시 2개가 아니라, hobbies.length개 라고 표현
- String[]는 배열이라 if~else, for문장이 함께 쓰임
if블록 : 0개 선택 시엔 체크 좀 해라
~else블록 : 몇 개 선택한 줄 모르니까 for문 사용
- getParameterValues체크박스는 동시에 여러개가 넘어오니까 getParameterValues를 씀.
2개 선택시 a,b 출력. 당구, 야구 로 나중에 변환 ♣
* request.getParameter("hiredate");는 어차피 String hiredate변수에 대입 되기 때문에,
<body>에서 입사일자를 hiredate 대신 request.getParameter("hiredate")를 넣어도 같은 결과
<오류발생>
- 성별 선택 안 하고 전송해서 에러뜸 ---> NumberFormatException : 숫자 올바른 형태로 넣어야함
- 에러 뜨는 이유 : 성별 선택 안 해서 숫자가 아닌 null이 넘어감
그런데 이 null을 숫자로 억지로 넘기려니까 NumberFormatException가 뜨는 것임
- 해결 : int _gender = Integer.parseInt(request.getParameter("gender"));
<디폴트, 기본값>
아이디 <input name="id" type="text" value="hoho"> <br>
이름 <input name="name" type="text" value="김철수"> <br>
성별 <input name="gender" type="radio" value="1" checked="checked"> 남자
취미 <input name="hobby" type="checkbox" value="b" checked="checked"> 야구
<To01.jsp의 <body>태그 작성>
아이디 : <%=id %>님<br>
이름 : <%=name %>님<br>
성별 : <%=gender %><br>
취미 : <%=hobby %><br>
급여 : <%=salary %><br>
연봉 : <%=12*salary %><br>
입사일자 : <%=hiredate %><br>
입사일자 : <%=request.getParameter("hiredate")%><br>
<위 코드로 아래와 같이 표(table) 만들기>* To02.jsp/From02.jsp<tr>은 행, <td>는 열
<body>
<form action="To02.jsp" method="post">
<table>
<tr>
<td>아이디</td>
<td><input name = "name" type = "text"></td>
</tr> ... <tr>
<td colspan="2" align="center">
<input type="submit" value="전송">
<input type="reset" value="초기화">
</td>
</tr>
</table>
- <td colspan="2" align="center">: 컬럼 두개 병합 & 가운데정렬
- 기본값 설정value="홍길동"checked = "checked"
* 서버의 응답 코드 : 64쪽
* pdf p.76 : 지시어<%@ %> : @가 붙어있으면 지시어
- JSP가 서블릿으로 변환될 때 전반적인 영향을 줄 수 있는 정보를 제공함
(참고로 위 문장에서의 서블릿은 자바를 의미함)
- 사용 형식 : <%@ page 속성1="값1" 속성2="값2" %> 크게 3가지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>- 사용 형식 : <%@ page 속성1="값1" 속성2="값2" %>
moderl패키지의 emp클래스 생성
import할때 페이지 지시어의 import.....emp, empdao class 생성....bean
To02 실행 -> 자바 인스턴스 변수의 기본값이 출력
Emp [id=null, name=null, gender=null, hobby=null, salary=0, hiredate=null]+)
의미있는 값 넣으려면 setter 사용
bean 출력 전에 셋팅
<참조사이트>www.w3schools.com/www.w3schools.com/html/html_forms_attributes.asp* target, method 속성www.w3schools.com/html/tryit.asp?filename=tryhtml_form_submit
* p.107~155
- XML 문서 작성법 design모드 / source모드 (source모드가 더 용이함)
- 엘리먼트(Element 태그)
- 네임스페이스(namespace)
- 액션태그
<네임스페이스(namespace)>
- namespace : 이름 충돌 방지
- xml(파일) + ns(namespace)
ㄴex. xmlns:="http://~"
ㄴex. xmlns:고객="http://~"
ㄴex. xmlns:상품="http://~"
---> " :고객 " 이부분은 db의 alias와 같음
<액션태그>
* pdf p.116, p.135
- 액션태그 : 태그를 이용해 객체를 만드는 것
- setProperty : 자바 빈의 속성값 저장(셋팅)
- getProperty : 자바 빈의 속성값 반환(리턴)
- useBean : 자바 빈 객체 생성 시 사용
---> set&get을 묶어서 자바 빈(java beans)을 구성함
<자바빈(JavaBean)>
* 자바빈 p.132~133
- 웹사이트는 디자이너/개발자가 협력하여 개발하지만,
jsp페이지에 개발코드가 들어있으면,
디자이너/개발자 효율성 떨어짐
- JavaBean 자바빈은 jsp의 디자인과 로직 부분을 분리하여,
프로그램의 재사용성 증가를 위한 방편으로 만든 개념임
1. JSP페이지: 디자인부분(jsp파일)과 로직 부분(javabean)을 분리할 수 있음
2. Java Beans: 자바 클래스 중 자바빈즈 규약에 맞게 설계된 클래스를 의미함
- 구성 : getter 와 setter (* javabeans 작성 규칙 항목 참고)
- 용도 : 값을 저장하는 용도(Value Object)
3. JavaBean과 액션태그 : javabean객체를 생성 / 사용하기 위한 태그
- 역할 : HTML -> JSP 데이터 전송 시 태그로 코드 작성이 가능함
- 효과 : 프로그램의 효율성 / 재사용성 증대
- DB테이블의 1건 수행 : 특정한 작업을 독립적으로 수행하는 컴포넌트
<액션태그>
* pdf p.116
- 정의 : 태그를 이용해 객체를 생성하고 사용하는 것,
클라이언트나 서버에게 어떤 행동을 하도록 지시하는 태그(new연산자 사용X)
- 액션태그의 용도 :
1) 자바빈의 속성을 읽고 쓰기 : <useBean>, <setProperty>, <getProperty>
2) 다른 페이지의 실행결과를 현재 페이지에 포함시키기 : <include>
3) 다른 페이지로의 흐름을 제어하기 : <forward>
4) 자바 애플릿 사용 액션 : <plugin>
- 특징 :
1) xml의 문법을 따르기 때문에 반드시 종료태그를 포함해야 함
2) 자바코드(스크립트요소)를 사용하지 않으므로 로직의 은닉 가능
3) 비즈니스 로직(프로그램 부분)과 프리젠테이션 부분(보여지는 영역, 보통 jsp파일)을 분리할 수 있음
<액션태그의 분류>
1) <useBean> : 자바빈 객체 생성 시 사용
2) <setProperty> : 자바빈의 속성값 저장
3) <getProperty> : 자바빈의 속성값 리턴
4) <include> : 다른 페이지를 현재 페이지에 포함
5) <forward> : 현재 페이지의 제어를 다른 페이지에 전달
6) <plugin> : 자바 애플릿 사용
<JavaBeans 작성 규칙>
* pdf p.134
1. 빈즈(Beans) 클래스 구성
- 빈즈 클래스도 java클래스로 기본적으로 java 클래스 규격을 따름
- 명명형태 : [테이블이름 + Bean]
2. 빈즈(Beans) 클래스 규칙
- property(멤버변수) 마다 별도의 get/set메소드가 존재해야 함
- get메소드와 생성자는 파라미터 존재하지 않음
- set메소드는 반드시 1개 이상의 파라미터가 존재해야 함
- 메소드 이름과 멤버변수 일치해야 함
- beans component(빈즈컴포넌트)의 속성은 반드시 읽기/쓰기가 가능해야 함
emp bean 클래스
< <jsp:useBean> 액션태그 >
* pdf p.135
- 용도 : <jsp.useBean>액션태그를 사용해 JSP를 사용할 자바빈 객체 생성
( setProperty + getProperty + 생성자 등 3개를 묶어서 자바빈 객체라고 함)
- 사용 문법 : < jsp:useBean id="빈이름" class="JavaBean클래스이름" scope="범위" />
- 자바에서의 <클래스이름> <객체이름> <=> <new> <생성자이름>(); 과 같음
- 속성 :
1) id : jsp페이지에서 자바빈 객체에 접근할 때 사용할 이름을 명시함
(이것을 자바에서는 객체(인스턴스) 라고 불렀음)
2) class : 패키지 경로를 포함한 자바빈 클래스의 완전한 이름(fullPath)
3) scope : 자바빈 객체가 저장될 영역을 지정함
- 예시1 :
1) dao 설정<jsp:useBean id="dao" class="model.EmpDao"/>
2) bean 설정<jsp:useBean id="bean" class="model.Emp"/>
3) 변수 셋팅<jsp:setProperty property="*" name="bean"/>
- 예시2 :
- 자바빈에서의 액션 태그
< jsp.useBean id="member" class="mypkg.Member" scope="request" />
- 동일한 의미의 자바 코드
<% Member member = (Member) request.getAttribute("member");
if (member == null) { member = new Member();
request.setAttribute("member", member); } %>
- 예시3 :
- 이클립스 To02와 To03에서 서로 같은 의미의 코드
- 자바bean객체 설정
<To02> ---> Emp bean = new Emp();
<To03> ---> < jsp:useBean id="bean" class="model.Emp" />
- dao객체 설정
<To02> ---> EmpDao dao = new EmpDao();
<To03> ---> < jsp.useBean id="dao" class="model.EmpDao" />
- 변수 셋팅
<To02> ---> bean.setGender(gender);
<To03> ---> < jsp:setProperty property="gender" name="bean" />
* property가 많을 땐, gender 대신 * 를 삽입합니다. ♣
예시3
예시3
< <jsp:setProperty>, <jsp:getProperty> 액션태그 >* pdf p.135~136
<jsp:setProperty> | <jsp:getProperty> | ||
설명 | |||
용도 | 액션태그를 이용해 자바빈 property의 값을 지정 |
액션태그를 이용해 자바빈 property의 값을 출력 |
|
사용문법 | < jsp:setProperty name="빈이름" property="이름" value="값" /> | < jsp:getProperty name="빈이름" property="이름" /> |
|
속성 | name | 프로퍼티 값을 지정할 자바빈 객체의 이름.<jsp:useBean> 액션 태그의 id속성에서지정한 값을 사용함. | <jsp:useBean> 액션 태그의 id속성에서지정한 자바빈 객체의 이름 |
property | 값을 지정할 프로퍼티의 이름.속성값으로 빈즈 클래스의setXxx 메소드와 대응할 속성값임.*를 사용하게 되면 모든 setXxx에 자동으로 대응됨. | 출력할 프로퍼티의 이름 | |
value | 프로퍼티의 값. 표현식을 사용할 수 있음. | 존재X | |
사용예시 | <jsp:useBean id="member" class="myPkg.Member"/><jsp:setProperty name="member" property="name" value="최범균"/> | <jsp:useBean id="member" class="myPkg.Member" /><jsp:getPropery name="member" property="name"/> | |
멤버변수에 값 셋팅 | id라는 멤버변수에 username이란 값 셋팅<jsp:setProperty name="user" property="id" param="username"/>user.setId(request.getParameter("username"));results라는 멤버변수에 i+1을 저장<jsp:setProperty name="results" property="row" value="<%=i+1%>" />results.setRow(String.valueOf( i+1 )); | ||
객체의 호출 | 빈객체의 속성을 문자열 타입으로 변환하여 out변수를 이용해서 출력, 빈의 getXxx()메소드가 호출member객체의getName() 호출<jsp:getProperty name="member" property="name" />동일한 결과를 출력하는 코드out.println(member.getName()); |
변수 한번만 선언함
1. [sql developer]에서 brds table 생성
[생성 순서 : Oracle table > Java bean > dao > jsp]
2. [이클립스]에서 Bean클래스 Brd 생성
[생성 순서 : table > bean > dao > jsp]
참고로 테이블 한개당 dao클래스 1개 매치함
Emp(DB table) <---> EmpDao(class)
Brds(DB table) <---> BrdDao(class)
1) 변수 선언
- 데이터베이스의 헤드와 동일하게 java Bean에도 변수를 선언함
ㄴex. no, writer, subject, content
- get&set, toString, 생성자 등 생성
3. Java BrdDao class 생성
[생성 순서 : table > bean > dao > jsp]
boList.jsp가 DB의 목록을 가져오려면 Java dao에 부탁하고,
dao는 DB에서 해당 데이터들의 목록을 가져옵니다.
public List<Brd> SelectAll(){
return null;
}
// 여기까지 작성 후 우선 boList.jsp에서 import 수행합니다.
// (java class를 가져오려면 일단 import 해야 하기 때문입니다.)
4. boList.jsp 생성
[생성 순서 : table > bean > dao > jsp]
- boList.jsp파일은 게시물 목록을 보여줄 페이지입니다.
- List에 "bo" 붙임으로써 구별하기
1) import 수행
<jsp:useBean id="dao" class="model.BrdDao" />
<%
List<Brd> mylist = dao.SelectAll(); /* dao에 생성한 selectAll메소드*/
out.print("데이터 개수 : " + mylist.size());
%>
2) 다시 BrdDao.class로 이동
5. BrdDao class에서 변수 선언 및 try~catch 구문 작성
[생성 순서 : table > bean > dao > jsp]
1) 데이터베이스 관련 변수 선언하기
* 추후 superDao 생성하면서
아래 작성한 변수를 superDao로 이동해 줍니다.
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "oraman";
String password = "oracle";
2) Try~catch 구문 작성하기
try {
super.conn = super.getConnection() ;
pstmt = conn.prepareStatement(sql) ;
rs = pstmt.executeQuery() ;
while(rs.next()) { ~ }
} catch (Exception e) {
e.printStackTrace() ;
} finally {
try { ~ } catch { ~ }
}
* 나머지 부분은 pdf p.260 참고하여 작성할 것
<JDBC 프로그래밍의 실행순서>
* JDBC 부분이 개인적으로 가장 헷갈림
- JDBC는 자바 기술
순서 | 문법 | 설명 |
1) 드라이버 로딩 | Class.forName( driver ); | 오라클을 지원하기 위한 드라이버 (oracle.jdbc.driver.OracleDriver)를 메모리에 로딩 |
2) connection 객체 생성 |
Connection conn = null; conn = DriverManager.getConnection(url, id, password); |
Connection : 데이터베이스 접속을 수행하는 객체 DriverManager : 드라이브 관리자 클래스 |
3) PreparedStatement 객체 생성 |
String sql = "어떤 문장"; PrepareStatement pstmt = null; pstmt = conn.prepareStatement( sql ); |
pstmt 객체 : sql문장을 db에 전달시켜서 실제 그 내용/액션을 수행하는 객체 |
4-1) DQL처리 ResultSet 객체 구하기 |
ResultSet rs = null; rs = pstmt.executeQuery(); |
ResultSet : 메모리에 존재하는 조회된 데이터의 결과물(xx행yy열), DQL의 조회된 데이터집합세트 |
4-2) DML | int cnt = -1; cnt = pstmt.executeUpdate(); |
cnt의 의미 1) insert : 추가된 행수(1건) 2) update : 수정된 행수(>=0) 3) delete : 삭제된 행수(>=0) |
1) conn.setAutoCommit( false ); 2) 성공 conn.commit(); 실패 conn.rollback(); |
||
5) 작업 마무리 (종료) |
finally{ try{ if(~){~} } catch ~{ } } | JDBC 프로그램이 끝난 후 모든 객체를 clear. 생성순서의 반대로 종료 시켜야 함 |
♣ 참고로 JSP를 배우기 위한 기술은 크게 3가지가 있음.
- ①자바 / ②JDBC(Connection, ResultSet, PreparedStatement) / ③Servlet(C)
---> JDBC는 자바와 데이터베이스와 연계를 위한 API입니다.
---> JDBC 드라이브 셋팅, 데이터 핸들링, 기초 SQL구문 등
♣ executeQuery
리턴타입 | 메소드이름 | 매개변수 | 설명 |
ResultSet | executeQuery | 문자열 | Select 질의(구문)를 하는 경우 사용(ResultSet객체반환) Select쿼리를 실행한 결과는 ResultSet에 저장됩니다. |
<로그인 화면 데이터 이동 순서>
↓① logFrom.jsp : 로그인(login) 시작
↓② logTo.jsp : 바인딩(binding)
↓③ boList.jsp : 인클루딩(including)
↓④ common : 로그인 정보가 담겨져있음
① logFrom.jsp : 로그인 시도
② logTo.jsp :
로그인 성공 시 SessionScope에 Bean을 바인딩 후, gotopage(boList)로 이동
로그인 실패 시 logFrom.jsp로 다시 이동(bean에 id와 name 정보가 null)
③ boList.jsp :
인클루딩(including), 테이블 생성함
♣ 지시어(Directive)
- include : 현재 파일(boList)에 다른 파일을 넣고자하는 경우,
공통적으로 사용되는 파일(common)을 별도로 만들고, 필요 시 insert하는 개념
④ common.jsp :
로그인 했는지 안 했는지 확인하는 창,
화면을 이동해도 로그인했다는 정보가 계속해서 유지 & 확인되게끔 함
♣ 위에서 이해가 안 가는 부분 Emp loginfo = (Emp)session.getAttribute("loginfo");
loginfo가 Object로 승급된 상태라서 Emp에 담기 위해선 위와 같이 강등시킨 것입니다.
왜냐면, 아래 캡쳐와 같이 session에 바인딩할 때, bean을 Object로 승급시켰기 때문입니다.
우선 데이터 전체를 가져올 땐 list 자료구조에 담아서 보여주고,
1명만 가져올 땐 데이터를 bean클래스에 담아두고 getter로 가져옵니다.
ㄴloginfo.getName() + "님";
bean클래스의 한 행은 bean클래스의 객체를 뜻하고,
어쨌든 이전에 loginTo파일에서 bean객체를 session영역에 담아두었습니다.
ㄴsession.setAttribute("loginfo", bean);
~~님 <---과 같이 출력되어야 하기 때문에,
그 session에 담아 놓은, 아까 지정한 그 loginfo를 꺼내야 합니다.
그런데 session에 담아 놓은 것이 bean객체니까
당연히 가져올 때도 bean클래스의 객체로 담는 것입니다.
<로그아웃 하기 링크 생성>
session에 바인딩된 상태, 즉 로그인 상태에서 "로그 아웃" 클릭하면 바인딩된 상태가 해지됩니다.
1. boList.jsp 에서 "로그 아웃" 을 위한 링크를 만듭니다.
* html 태그의 주요 태그 : form, table, a(앵커)
* href 속성 : 속성
- a 태그(=앵커 태그) 활용하기
<a href="logout.jsp">로그 아웃</a>
2. logout.jsp 생성 & 세션 소멸시키기
* pdf p.158
- 스크립트릿에서 아래 코드 작성
- 로그아웃 클릭 시,
loginTo에서 session.setAttribute한 것을 비우고,
다시 loginFrom으로 이동 후,
처음 로그인 시도 화면을 출력합니다.
<%
session.invalidate(); //세션을 비우고
response.senRedirect("loginFrom.jsp"); //loginFrom화면을 보여줌
%>
<JSTL>
스크립트릿을 사용하여 자바 코딩을 하면 길이가 너무 길어져서
<jsp:useBean ~ > 같은 액션태그를 사용해왔는데,
이제 그 다음 한 단계 진화된.. EL과 JSTL을 사용함
<연산문제 예시>
1. WebContent > eljstl 폴더 생성 > elOperator.jsp 파일 생성
(Operator는 연산자를 의미합니다.)
2. elOperator.jsp <body>에서 연산자 실습합니다.
* pdf p.6 & 10
- 역슬래시 \를 붙이면 사진찍듯 그대로 옮깁니다.
(식을 해석하거나 계산하지 않습니다.)
ㄴex. \${8-3} : ${8-3}
---> 출력값은 ${8-3} : 5
- gt는 grater than을 의미하여 > 기호와 같습니다.
ㄴex. \${5 gt 10} : ${5 gt 10}
---> 출력값은 ${5 gt 10} : false,
5 > 10 는 false
<empty 연산자>
* pdf p.8
- empty 연산자는 부정적 개념인 경우 true 값을 리턴해줍니다.
(문자에 값이나 의미가 없는 경우를 부정적 개념으로 봅니다.)
- 값이 빈 Map, 빈 Collection, 빈 문자열("") 이면 true 리턴
- 값이 null, 값의 길이가 0인 배열 이면 true 리턴
- 이 외의 경우에는 false 리턴
---> 따라서 원소를 담은 소쿠리에 데이터가 있는지/없는지 확인할 때 사용함.
ㄴex. 배열/컬렉션에 몇 개가 담겨 있는지? 0개 ---> true.
ㄴex. 세션에 누가 로그인을 했는지 안 했는지? 안했음 ---> true.
<EL을 이용한 방식>
* 글자깨짐 방지 인코딩하기
<% request.setCharacterEncoding("UTF-8"); %>
1. eljstl > From5.jsp, To5.jsp / From6.jsp, To6.jsp 파일 생성
(From01.jsp, To01.jsp 파일을 복사해 생성합니다.)
2. To5.jsp / To6.jsp
- EL의 표현 방법 ${expr} 로 작성합니다.
'BACK END > JSP' 카테고리의 다른 글
Servlet 2 (서블릿, 파일업로드) (0) | 2020.11.26 |
---|---|
내장객체(Implicit Object) (0) | 2020.11.23 |
웹 프로그래밍과 서블릿 (0) | 2020.11.20 |
JSP Programming (톰캣설치, 인코딩설정, 웹프로젝트, 웹서버) (0) | 2020.11.19 |
JSP (0) | 2020.11.17 |