데이터 처리, 웹프로그래밍 흐름 (jsp, 모듈화, jstl, html, jdbc)

2020. 11. 24. 18:13BACK 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());





변수 x, y를 <%=변수명%>으로 사용함

변수 한번만 선언함

 

 

 

 

 


 

 

20201120.txt
0.01MB
20201119.txt
0.00MB
Myweb.zip
2.07MB

 

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에 저장됩니다.

 

 

 

 

 


Myweb.zip
2.76MB
20201123.txt
0.01MB

 

<로그인 화면 데이터 이동 순서>

↓① logFrom.jsp : 로그인(login) 시작

↓② logTo.jsp : 바인딩(binding)

↓③ boList.jsp : 인클루딩(including)

common : 로그인 정보가 담겨져있음

 

 

 logFrom.jsp : 로그인 시도

logFrom.jsp

 

 logTo.jsp : 

로그인 성공 시 SessionScope에 Bean을 바인딩 후, gotopage(boList)로 이동

로그인 실패 시 logFrom.jsp로 다시 이동(bean에 id와 name 정보가 null)

logTo.jsp

 

 boList.jsp :

인클루딩(including), 테이블 생성함

 

♣ 지시어(Directive)

- include : 현재 파일(boList)에 다른 파일을 넣고자하는 경우,

공통적으로 사용되는 파일(common)을 별도로 만들고, 필요 시 insert하는 개념

boList.jsp

 

 common.jsp :

로그인 했는지 안 했는지 확인하는 창,

화면을 이동해도 로그인했다는 정보가 계속해서 유지 & 확인되게끔 함

common.jsp ♣

 

♣ 위에서 이해가 안 가는 부분 Emp loginfo = (Emp)session.getAttribute("loginfo");

loginfo가 Object로 승급된 상태라서 Emp에 담기 위해선 위와 같이 강등시킨 것입니다.

왜냐면, 아래 캡쳐와 같이 session에 바인딩할 때, bean을 Object로 승급시켰기 때문입니다.

 

common.jsp
loginTo.jsp
loginTo.jsp

 

 

우선 데이터 전체를 가져올 땐 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} 로 작성합니다.

 

 

 

1부터 10까지 총합은 55입니다.

 

 

 

 

 

 

 

 

Myweb.zip
2.78MB

 

 

 

 

 

'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