| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Layered Architecture
- springboot
- Spring Data JPA
- 실무
- hexagonal architecture
- simplejpaRepository
- Transaction
- Adapter
- transactional
- Hexagonal
- JPA
- Spring
- JDBC
- Today
- Total
Ezcho
서블릿의 이해 본문
서블릿의 장점
서블릿의 단점
서블릿 클래스 구조
언어구현: 자바
서블릿 컨테이너에 해당 클래스가 서블릿임을 알려야함.
2.0: web.xml에 표기
3.0: annotation 사용
구현법
GenericServlet이나 HttpServlet 상속받아 클래스 구현
Http 프로토콜에 최적화되어있는 HttpServlet 상속받아 구현하면 좋음
HttpServletRequest
1. web.xml에 작성
2. 자바 annotation 사용
@WebServlet(description = "Hello World Servlet", urlPatterns="/hello")
public class HelloWorldServlet extends HttpServlet{...}
서블릿 생명주기
init() 메서드로 초기화
1. 클라이언트에게 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인
2. 메모리에 없으면 init() 호출
3. init()은 처음에 한번만 실행됨, 공통작업이 있으면 init()을 오버라이딩 해서 구현하는게 좋음.
4. 서블릿이 변경되는경우 기존 서블릿은 종료되고 다시 init()호출
response, request
service() 메서드를 통해 doGet()이나 doPost()로 분기
HttpServletRequest, HttpServletResponse 클래스 타입인 request, response 객체가 제공됨.
destroy() 메서드로 종료
init()과 마찬가지로 한번만 실행됨.
페이지 이동구현
데이터 포함 안하는경우
response.sendRedirect("abc.jsp"); 쓰면됨.
세션을 사용하는경우에는 위 방법이 잘 허용됨
데이터 포함 하는 경우
.jsp
<%
request.setAttribute("member", m);
pageCzontext.forward("userInfo.jsp");
%>
servlet
doget(){ ... ; dispatcher.forward(request, response)}
Spring
그냥 리턴하면됨.
정보공유
URL rewriting
QueryString을 이용한 URL 파라미터 추가 - 복잡한 정보 유지가 어렵다.
Cookie - 클라이언트에 저장됨,
1. name = value 형식을 사용
2. JS 로 보통 처리함 쿠키는, HttpOnly설정으로 서버에서만 사용할 수 있도록 설정가능함
3. 재방문등의 확인용도 사용, 보안상 문제가 있을 수 있다, 광고 및 기타목적으로 사용자의 이용행태 추적
쿠키 동작과정
1. 서버에서 쿠키가 생성됨.
2. 쿠키를 브라우저로 전송(아래는 전송양식)
URL, reponse code(200) 확인되면
Server: Apache-tomcat/1.1(서버네임)
Set-Cookie: name= hong
Set-Cookie: tel=123456789
...
...HTTP BODY...
3. 브라우저에서 쿠키저장(HDD가 아니라 메모리에 저장되는거라 그냥 휘발성임)
4. 유저 재방문시 쿠키전달
GET /test.html HTTP/2.0
Host: (URL주소)
Cookie: name=hong; tel=123456; ... (Set-Cookie 와는 좀 다름)
쿠키저장 메서드
response.addCookie(new Cookie("name", "hong"));
response.addCookie(new Cookie("tel", "02034-232"));
response.addCookie(new Cookie("email", "abc@seoultech.ac.kr"));
response.addCookie(new Cookie("name", "value")):
쿠키 전송 형태(response)
HTTP/1.1 200 OK -> 그냥 응답확인
Server: Apache-Coyote/1.1 -> 서버소개
Set-Cookie: name=hong
...
Content-Type: text/html; charset=utf-8
Content-Length: 160
Date: Sun, 13 Sep 202 11:11:11 GMT
...
BODY
세션
웹서버에 접속할 때 서버쪽에 생성되는 공간을 세션 이라고 함
1. 브라우저 종료전까지 유지
2. 로그인 유지, 장바구니, 컨트롤러구현 ~~
3. 사용자마다 생성되는 공간
4. 동시에 많은 사용자가 세션을 통해 접속하면 세션관리대첵이 필요
속성관리
ScopeObject
특정 범위 동안 유지되는 객체 의미
맵의 자료구조를 가짐 "키-값"
JSP 역시 서블릿으로 변환되므로 동일
useBean액션의 scpoe에 사용되는 page,request, session, application 이 해당
생성, 소멸시기가 정해져있음
Scope Object
1. Request: javax.servlet.ServletRequest,
현재 페이지 요청될때 생성, 다른페이지 이동할때 소멸, 포워딩의 경우 다음페이지까지 참조가능
2. Session: javax.servlet.http.HttpSession,
클라이언트가 서버에 접속할때 생성, 브라우저 종료되거나 시간지나면 소멸, 동일클라이언트에 대해, 다른페이지 참조 가능
3. Web Context: javax.servlet.ServletContext
웹이시작될때 생성, 종료될때 소멸, 모든클라이언트에서 참조간으
예제 - 로그인 시나리오
1. 클라이언트가 로그인(html 에서 포스트요청)
2. 컨트롤러는 request.getParameter()를 통해 클라이언트의 id와 pw확인
3. 로그인 정보가 맞으면 사용자 이름이나 기타 정보를 세션에 저장한다.
4. session.setAttribute("name", "value");
5. session.sendRedirect("/main.jsp"); //메인화면 리다이렉션 ㅋㅋ
6. main.jsp 에서 세션의 name 출력 - 왜냐면 세션은 동일클라이언트에 대해 다른페이지 참조가 가능하므로.
<h2>${name}</h2>
예제 - 게시판 목록 조회
//controller.java
List<Member> mlist = dao.getMemberList();
request.setAttribute("mlist", mlist); //리스트 단위로 저장 ㄱㄴ
request.getRequestDispatcher("/mlist.jsp").forward(request, response);