JSP/서블릿 공부 2021-02-24
뉴렉처 강의 52강 이어서
1~52강까지 기본기 완
JSP 프로그래밍
Jasper가 작성할 서블릿 코드에 코드 블록을 적절히 끼워 달라고 지시하는 방식
코드 블록 4종류
<% %> 일반적인 로직을 작성할때의 코드블록
<%= %> 출력을 위한 코드블록
<%! %> 멤버변수,함수 를 정의하기위한 코드블록
<%@ %> 지시자 (지시하기위한 코드블록)
확장자는 jsp를 가지고있지만 결과물은 서블릿이다.
자바 웹 프로그래밍 시작하기
jsp에서 글자 깨짐시 ALT + Enter 인코딩방식을 UTF-8방식으로 변경
페이지 상단에 <%@ page %> 블록을 이용해 UTF-8을 설정한다 (출력할때의 글자 깨짐 방지)
자바코드를 이용해 게시물 1~8을 반복문으로 설정 (코드블록)
0~9까지 10번을 반복한다
코드블록을 따로 <%=i+1%> 을 추가해주어서 1~10까지 증가하게 해준다
JDBC를 이용해 글 목록 구현하기
상단에 jdbc를 연결 하기위한 코드블록을 생성해 코드를 입력한다
가장 하단에 close로 닫아준다
jsp에서의 import를 쉽게하는 방법은 빨간줄이 그어진 명령어에 Ctrl + space 를 이용해
명령어를 더블클릭 해주는 방법이 있다.
빨간줄이 나온 명령어들을 전부 임포트 해준다 (sql패키지)
*웹개발할때는 라이브러리를 같이 배포할수있도록 라이브러리를 포함시켜줘야한다
JDBC 사용을 위한 라이브러리를 WEB-INF -> lib 폴더에 함께 포장해준다.
for 반복문을 while문으로 바꿔주고 데이터베이스를 rs.next()로 값이있을때까지 반복시켜주며
컬럼값을 rs.get 함수로 받아온다
JDBC에 등록되어있는 값들이 웹상에 나타난다
자세한 페이지 구현하기
자세한 페이지를 구현하기위해선 데이터 베이스 연동이 필요하다.
detail.html 을 복사한뒤 jsp파일로 하나더 만들어 준 다음 글자가 깨지는걸 방지하기위해 UTF-8로 변경을 해준뒤
출력시 문자깨짐을 방지하기위해 상단 코드 블록을 작성해준다
list.jsp 에서 제목을 클릭시 페이지가 넘어갈때 주소를 받아와야하기 때문에 링크 주소를 바꿔준다.
이때 정보를 얻어와야하는 ID값(번호)을 넘겨준다
그 이후에 detail.jsp에서 받아온 ID값으로 데이터베이스를 이용해 정보를 받아온다 (request.getParameter)
sql 문에 ? 가 들어갔으니 PreparedStatement을 선언해 값을 넣어준다.
항상 데이터베이스를 이용후에는 마지막 문단에 사용한것들을 close해준다
데이터 베이스를 이용해 받아온 정보들을 페이지에 게시하기 위해서는 rs.next()를 이용해 정보를받아오고
밑에 빨간줄과 같이 정보를 필요로하는 공간에 코드블럭을 입력해준다.
자세한 페이지로 이동시 결과화면 id에 맞는 글의 정보를 가져온다
목록버튼을 눌렀을때 이동하기위해서는 주소를 list.jsp주소로 다시 이동해주는 링크를 걸면된다.
자세한 페이지를 MVC moder1 으로 변경하기
스파게티코드를 MVC (Model View Contoller) 로 변경
코드를 물과 기름처럼 양분하는것 (JAVA코드 / HTML 코드)
Model : 코드를 양분하는데 가장 큰 역할
View : 모델을 사용하여 화면출력담당
Contoller : 모델을 만들어 내는것
기존에 있던 자세한 페이지(detail)의 코드블록들을 위로 올려준다.
close가 되면 데이터베이스의 연결이 끊어지기때문에 밑의 html에서는 사용할수가없다
사용하기위해서는 모델변수를 만들어 그안에 값을 넣어준다.
밑의 html에서는 모델변수를 사용해준다.
훨씬 깔끔하고 수정이 JAVA따로 HTML따로 수정이 편하게 할수있다 (MVC패턴 1)
JSP MVC Model 2
detail 페이지를 MVC Model2로 바꾸기
영역을 나누어서 MVC를 구현한 MVC1
View와 Controller 부분을 물리적으로 나누는방식 MVC2
장점: 개별적 유지관리가 가능, 협업도 가능, 실행성능에 영향을 준다
단점: 복잡도가 높아진다
MVC2 로 바꿔주기 위해 NoticeDetailContoroller 서블릿을 만들어준다
컨트롤러를 나눈뒤에는 앞으로 실행할때는 컨트롤러에서 시작을해 실행을 해야한다.
컨트롤러를 통해서 -> jsp가 실행되는 방식 (모델을 만들고 가야함)
서블릿 페이지를 만들어 상속받아주고 WebServlet을 설정해준다.
detail페이지의 코드블럭들을 옮겨주고 try catch문 적용
이때 서블릿과 jsp 를 전이하기위해
rediect와 forward 방식이 존재하는데
rediect는 다른페이지로 이동하는방법이고
forward는 작업내용을 이어받아 처리하는 전이방식이다
작업내용을 detail 페이지로 보내주기위해 forward 방식을 사용한다.
request같은경우에는 저장소로 이용하는방법이있다 ( Attribute )
requset.getAttribute() 를 사용하여 데이터베이스에 받아온 값을 저장한 변수를 저장소에 넣어준다.
(entity , 개체 , 개념화된 데이터 , 구조적인데이터)
저장한 request를 Dispatcher를 이용해 detail.jsp로 전이시켜준다.
jsp에서 받아온 값을 사용할때는 코드블럭에 request.getAttribute로 저장소이름을 사용하여 받아온다.
컨트롤러에서 실행하기에는 컨트롤러 안에있는 id값을 알수없기 때문에 list.jsp도 수정해준다.
Model 데이터를 구조화 하기
기업에서는 유지보수를 편하게하기위해 나누는것을 선호함
notice.id 를 El로받아올때 getId() 메소드를 가져오는것이지 필드값을 가져오는것은 아니다.
entity를 좀 구조화된 방법으로 사용하기위해서는 entity패키지의 Notice라는 클래스를만들어준다 (DAO , VO)
Notice에 정보를 생성자로 받아올수있게 생성자를 오버로드해주고 기본생성자를 추가해준뒤
getter / setter를 만들어준다.
Contoller에서 entity를 구조화시키기위해 Notice클래스를 생성해준뒤
생성자를 이용해서 값을 채워준다 (이때 반드시 생성자에 값순서와 넣을 값의순서가 일치해야한다)
Setter 를 이용해 값을 넣어주는 방법또한 가능하다.
값을 넣어준 notice를 Attribute 시켜준다 ( n이라는 이름으로 저장하였다)
저장한 값을 사용하기위해 EL문을 사용한다.
코드블럭을 사용했을때 보다 깔끔한것을 볼수있다.
유튜브 뉴렉처 jsp/서블릿 57강 진행중