일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Selector
- 정규화표현식
- 알고리즘
- 자바
- iBATIS
- controller
- jquery
- 개선
- 참조타입
- JavaScript
- 자바스크립트
- String
- DB
- jsp
- for문
- regex
- jdbc
- scope
- extends
- Set
- java
- 자료구조
- 환경설정
- SQL
- 형변환
- jar
- html
- interface
- JCF
- mybatis
- Today
- Total
프로그래밍공부노트
Day 38 - JSP....(JDBC, JSP,request,response,page,session) 본문
오늘 전체 과정
JDBC
Maven Project 생성
1. web.xml 수정 : tomcat 버전에 맞게 dynamic web module dtd 검색해서 web.xml 수정한다.(Deployment Descriptor)
2. properties에서 위치 확인 eclipse 끄고 settings에서 facet 파일 notepade로 사용하는 버전에 맞게 수정한다
3. properties에서 project facet 확인해라 버전 dynamic web module 버전, java 버전, runtimes에서 tomcat 설정 apply
4. pom.xml에 properties와 depedency와 repository 추가한다. 원하는 버전 검색해서 추가하고 source targer 버전 맞춰라 artifactId도 maven-compiler-plugin으로 수정한다.
5. project update 하고 test 진행해라 success나오면 된거다.
DB dbeaver 작업
현재 작업중인 project를 set active project로 설정하고 bold처리되는지 확인해라 그다음에 데이터베이스 연결해줘라
oracle이고 일단은 localhost이고 port번호 확인해라 XE버전이라서 선택해주고 username과 password 입력해줘라 그리고 edit driver setting 들어가서 내가 사용하려는 ojdbc 버전맞는지 확인해라 나머지는 필요없다 지워라 test해서 성공하면 완성 테이블 생성해라
CREATE TABLE해서 만들면 된다.
여기서 sequence 수열 사용했다. PK 와 UNIQUE KEY는 값을 만들어내기가 힘들다
최대값 +1하면 중복되지 않는 값을 생성할 수 있다.
Sequence table 생성하고 NEXTVAL 명령어를 통해서 계속 증가하는 값을 만들어낼 수 있다.
CURRVAL은 현재 값이다.
CREATE SEQUENCE STARMEMBER_SEQ START WITH 1 INCREMENT BY 1;
SELECT STARMEMBER_SEQ.NEXTVAL -- 1씩자동 증가
FROM DUAL;
SELECT STARMEMBER_SESQ.CURRVAL --현재값
FROM DUAL;
이렇게 테이블 생성하고 다시 java로 돌아간다.
아까 만들어 놓은 Maven 프로젝트에 src/main/java에 패키지 만들고 클래스 만든다 . java 작업은 src/main/java여기다 꼭해야된다. src/main/resource는 java말고 다른걸로 작업한 파일 넣어라
만들어낸 table가지고 dto 만든다. 이때 가져온 순서대로 작업할거라서 Serializable implements 해준다. 컬럼명 전부 가져와서 멤버필드로 선언한다. 이렇게 되면 serialVersionUID generate하라고 알려준다. 하면된다.
Generate Constructor from SuperClass해준다. Generate Constructor using field 해준다. get / set 해준다. toString override 해준다.
공통모듈 만들어준다. JDBC 1,2,6 단계 공통모듈로 만든다.
1단계 드라이버설치 (생성자) : Class.forName("드라이버 넣어줘라");
2단계 커넥션 연결 (Connection 타입): DriverManager.getConnection(url,id,password); 넣어줘라 (throws 해준다)
6단계 닫기 만든다 : 마지막꺼부터 닫는다 ResultSet , PreparedStatement, Connection 순으로 닫는다.
구현해야할 기능 interface 클래스로 만든다.
공통모듈 extends 하고 interface implements해서 구현 시작
끝나면 이제 JSP
JSP(Java Server Page)
Controller: 요청에 의해서 실행과 분기를 담당
Controller 7단계
1단계 : 분기 요청값 받기
2단계 : DAO 생성 (Data Access Obejct)
3단계 : 분기
4단계 : parameter 받기
5단계 : DAO 실행
6단계 : 결과를 이동 객체인 scope에 담는다
7단계 : 페이지를 이동
request 객체 : 값을 다른 곳으로 전달하기 위한 객체라고 생각하면 된다 .여기서 parameter를 받을때는 getParameter
request.getParameter : 요청된 request parameter를 받는다
request.setAttribute() / ("키","값") : 전송할 객체를 담아 줌
request.getAttribute() / ("키") : 전송된 객체를 받음 (키만 있으면 받을 수 있다)
controller.jsp 분기를 담당해주는 JSP, 무조건 controller 보내서 처리 함 ->command의 키값을 분기요청을 함
ex) controller.jsp?command=login
controller에서 request.getParameter("command") => login을줌
if(command.equals("login"){
로그인 연산
} else if(command.equals("logout"){
로그아웃 연산
}
일단 encoding 맞춰주세요. java가 UTF-8이에요. 모든 JSP 맞춰줘야됨. 나중에 template으로 만든답니다.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8;");
form 요소 만든다. 실행되도록 submit도 만든다. name ="command" value="login"으로 설정
controller에서 request.getParameter("command);를 통해서 command 받습니다.(1단계)
이전에 만들었던 dao 생성합니다.(2단계)
위에 있는 if문처럼 비교해서 분기합니다.(3단계)
이때 request.getParameter("id","password"); parameter 담아서 String타입 변수에 각각 담아줌(4단계)
dao 실행하고 타입에 맞춰 담아줌(5단계)
그다음에 옮겨야되니까 scope 객체에 담는다. 이때는 sessiong.setAttribute("name", dto실행 값(변수에 담겨있음));
request.setAttribute("name",dto실행 값);(6단계)
pageContext.forward("값을 갖고 이동할 위치?")(7단계)
<%
//controller 7단계
//1단계 : command 받기
String command = request.getParameter("command");
System.out.println("요청 커맨드:"+command);
//2단계: dao 생성
IStarMember2Dao dao = new StarMember2Dao_Impl();
//3단계 : 분기
if(command.equals("login")){
//4단계 : parameter 받기
String id = request.getParameter("id");
String pw = request.getParameter("password");
//5단계 : dao 실행
StarMember2Dto lDto = dao.getLogin(id, pw);
System.out.println(lDto);
//6단계 : scope 객체에 담는다(page,request,session,application)
session.setAttribute("lDto", lDto);
request.setAttribute("request_lDto", lDto);
//7단계 : 화면 흐름을 제어한다(redirect/ forword(값을 갖고 이동))
pageContext.forward("./scope.jsp");
}
%>
scope에 왔음
아까 setAttribute 해준거 getAttribute로 가져옴 근데 화면에서 받으면 일단 String 아니면 Object으로 받는다?
근데 사용하려면 원래 타입으로 써야되잖아 downcasting 해주자
<%
Object robj = request.getAttribute("request_lDto");
Object sobj = session.getAttribute("lDto");
//원래 값으로 down
StarMember2Dto request_star = (StarMember2Dto)robj;
StarMember2Dto session_star = (StarMember2Dto)sobj;
%>
scope는 stateless로 되어있는 구성에 사용되는 값전달 객체이고 모든 페이지는 흐름제어에 의해서 호출을 해서 생성할 뿐이다. 즉 서로 연관이 되어있지 않음, 단일 프로젝트와 같은 stateless라고함
페이지->페이지로 값을 전달할 수가 없기 때문에 중간에 값을 들고 있는 객체가 필요하고 그것이 scope객체
접근제한자의 의미를 가지고 생각해보면 됨
private 자신의 클래스에서만 -> 사용하고 있는 JSP를 의미 page가 이와 유사하다
protected 연관된 클래스 -> 전달대상에서만 사용할 수 있는 request가 유사하다
한곳으로 전달하고 다른 곳에서는 사용하지 못하는 전달 객체 (전달한 곳에서만 사용가능)
default처럼 같은 package -> 같은 browser에서 사용가능session이 유사하다
시스템에서 로그인이 되어 있다는 것을 만들기 위해서 session에 담아줘야 함
public처럼 언제든지 사용가능한 -> application이 유사하다
항상 가지고 있는 것으로 원래는 cookie를 사용했지만 수집데이터에 문제가 있어서 최근에 사용하지 않음
index.jsp -> controller.jsp -> scope.jsp
index.jsp는 이동할 페이지가 아니다. session은 사용가능하지만 request는 사용 못함
로그인한다음에 다시 index페이지로 돌아가면 session에는 남아있는데 request에는 없음
'JSP' 카테고리의 다른 글
Day - ?? JSP와 Servlet (1) | 2021.05.11 |
---|---|
Day - 54~56 (0) | 2021.05.07 |
Day 52 - JSP (EL, JSTL) (0) | 2021.04.27 |
Day 39 - JSP(Context, 경로, 기본객체, 스코프객체, 웹 용어) (0) | 2021.04.09 |