유디의 공간정보·개발일기
5. 0813_session, Collection, sql문 연동 본문
JSP Model1 & Model2
- 웹 애플리케이션의 뼈대 --> 소프트웨어 아키텍쳐
- 서블릿이 모든 요청을 받아서 처리한다 = Model2
- 어제는 2.5 버전으로 만들고 web.xml생성이 돼서 여기에서 url 형태를 지정했음
<url-pattern>*.do</url-pattern>
- 오늘은 3.1 버전으로 만들고 web.xml생성 안함
대신 url형태를 @WebServlet("/MainController")의 ()안에 지정하면 된다.
@WebServlet("*.do")
과제3(과일목록) + myservlet2 > webapp > first2.jsp, result2.jsp
로직(무엇을 해야 하는지 말하기) + 코드
seesion
HashSet
- 세션 초기화
//세션 전부 삭제시
session.invalidate();
//세션에서 key값을 제거할 때
session.removeAttribute(String key);
- 세션 유지
//문자열로 지정되는 key값에 해당하는 세션값을
//Object형으로 설정해 줌
setAttribute(String key, Object value);
//세션으로 설정된 값 중에 key에 해당하는 값을 가져오며,
//값이 없을 경우 null을 리턴한다.
getAttribute(String key);
- Java Collection의 주요 인터페이스 : List, Map, Set --> [Java]Collection 게시물 [JAVA] Collection : List, Set, Map
- 인터페이스를 구분하는 가장 중요한 개념은 '순서', '데이터의 중복여부'
List : 순서O, 데이터중복O / add로 넣고 인덱스[]로 가져온다. / List인터페이스를 구현한 클래스 : ArrayList, AttributeList, LinkedList, Stack 등
Set : 순서X, 데이터중복X / 중복해서 관리하지 않도록 할 때 사용 / Set인터페이스 구현하는 클래스 : HashSet, Linked HashSet, TreeSet
Map : Key&Value 저장, Key중복 X, Value중복 O / 구현하는 클래스 : HashMap, TreeMap, LinkedHashMap, Hashtable
KeySet : 맵의 목록
오라클 sql
DDL
- 테이블을 생성하고
- 직접 값을 insert
- 테이블 생성시 기본키와 외래키 주의해서 적을 것
-- 두 개 이상의 테이블이 연동될 때 --
-- 주문아이템과 주문
-- 하나의 주문에서 여러 아이템을 주문한다.
-- 주문번호, 주문일자(date), 주문고객아이디 이다.
-- 주문번호, 아이템번호, 아이템명, 주문수량(number)
-- 테이블과 컬럼
-- 하나의 테이블? 여러 테이블에 들어갈까?
-- 테이블 : 엑셀시트
create table edu_order ( --테이블 생성--
order_no varchar2(50), --컬럼들--
order_date date,
customer_id varchar2(100),
primary key (order_no) --기본키 지정해 줘야 한다--
);
drop table edu_order;
insert into edu_order(order_no, order_date, customer_id) values('1111', sysdate, 'c-001');
select * from edu_order;
-- sqlplus로 커맨드창을 열어서 데이터를 조회해보면 없을 것이다.
-- 거기서도 데이터가 조회되게 하려면? --> Commit; 사용
create table edu_order_item (
order_no varchar2(50),
item_no varchar2(100),
item_name varchar2(100),
amount number(5),
primary key (order_no, item_no), --Primary Key가 두 개 이상의 키로 구성될 수 있다.--
foreign key (order_no) references edu_order (order_no)
);
select * from edu_order;
insert into edu_order_item(order_no, item_no, item_name, amount)
values('1111', 'i-13', 'iphone13', 10);
select * from edu_order_item;
drop table edu_order_item;
commit;
eclipse
+ OrderDAO.java + JDBC 커넥션 데이터 연동시키기
package myweb3;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class OrderDAO {
//주문생성, 주문 메서드
//이름, 매개변수, 리턴타입
//이름 : order,
//매개변수 : OrderVO (전달받을 데이터가 여러개이므로 하나로 객체화해주기)
//리턴타입 :
public boolean order(OrderVO vo) throws Exception {
boolean result = false;
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
System.out.println(con.getClass().getName());
String sql = "insert into edu_order(order_no, order_date, customer_id)"
+ "values(?, ?, ?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, vo.orderNo);
Date date = new Date(vo.orderDate.getTime());
stmt.setDate(2, date);
stmt.setString(3, vo.customerId);
//오라클가서 테이블 select해보면 새 데이터가 들어간 것을 확인할 수 있다.
result = stmt.execute();//execute로 결과를 알려주고 / boolean으로 닫음
return result;
}
}
+ OrderVO.java
package myweb3;
import java.util.Date;
public class OrderVO { //아래쪽에 각각의 객체를 적고 OrderVO로 한개의 객체화하여 깔끔하게 코드 정리
public String orderNo;
public String customerId;
public Date orderDate;
}
+ OrderDAOTest.java
package myweb3;
import java.util.Date;
public class OrderDAOTest {
public static void main(String[] args) throws Exception {
OrderDAO dao = new OrderDAO();
OrderVO vo = new OrderVO();
vo.orderNo = "3333";
vo.customerId = "yudi";
vo.orderDate = new Date();
// dao.order(vo); //이 코드로 데이터를 넘겨준다.
System.out.println(dao.order(vo));//정상실행되면 true가 나올 것임
}
}
'JSP & Servlet' 카테고리의 다른 글
6. 0816_파일 입출력 (0) | 2021.08.16 |
---|---|
[JSP] Session (세션) 객체 사용하여 값 저장하고 불러오기 (0) | 2021.08.16 |
4. 0812_Servlet (0) | 2021.08.13 |
[JSP] Forward / Redirect (0) | 2021.08.12 |
[JSP] getParameter() / getAttribute() / setAttribute() (0) | 2021.08.12 |