-
[ Servlet / JSP ] 2. 기초스타터스 백엔드 3기 2023. 1. 4. 18:13
하루입니다.
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();서블릿
서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다.
독자 실행 불가하고, JSP/Servlet 컨테이너에서 실행된다. (톰캣처럼)
서버에서 실행되다가 웹 브라우저에서 요청하면 해당 기능 수행 후 웹 브라우저에 결과를 전송한다.
https://docs.oracle.com/javaee/6/api/javax/servlet/http/package-summary.html
javax.servlet.http (Java EE 6 )
HttpSessionBindingEvent Events of this type are either sent to an object that implements HttpSessionBindingListener when it is bound or unbound from a session, or to a HttpSessionAttributeListener that has been configured in the deployment descriptor when
docs.oracle.com
서블릿 동작 과정
- 클라이언트가 웹 서버에 요청
- 웹서버가 요청을 웹 어플리케이션 서버에 위임한다.
- WAS가 각 요청에 해당하는 서블릿을 실행한다.
- 서블릿이 요청에 대한 기능을 수행한 후 결과를 반환해 클라이언트에 전송한다.
서블릿 실행 과정
- 클라이언트의 요청 : 서버 시작 후 서블릿 최초 호출. 웹서버가 호출한다.
- 서블릿 객체 생성(서블릿 생성자 호출) : 메모리 로드 -> INIT() 호출
- DOGET() 호출 : 응답 전송
- 클라이언트2가 요청 : 서블릿 최초 호출 아님. INIT() 호출 안 됨!
- DOGET() 호출 : 응답 전송
- ... (반복) ...
- 서블릿 메모리 삭제(서버 종료 혹은 서블릿 코드 재컴파일) -> DISTROY 호출
- 이렇게 작동할 수 있는 건 서블릿이 멀티스레드 방식으로 동작하기 때문이다!




서블릿 기초 : 서블릿의 세가지 기초 기능
- 클라이언트로부터 요청을 받는다. (url)
- 데이터베이스 연동과 같은 비즈니스 로직을 처리한다.
- 처리된 결과를 클라이언트에 돌려준다.
슬래시만 적으면 포트번호에서 시작
- 요약! 클라이언트로부터 요청을 받아 비즈니스 로직을 처리하고, 그 결과를 클라이언트에 돌려주는 것!

정보를 받기 위한 코드 : req.getParameter("id"); HttpServlerResponse의 메소드들과 그 결과

1. response의 ContentType를 한국어로 설정하는 법
2. jquery를 getContextPath()로 설정하는 법
여기서 text/html이 mime-type이다.

servlet 요청하는 법 (url)

서블릿의 응답 처리 방법
mime-type
- HTML : text/html
- 일반 텍스트 : text/plain
- XML : application/xml
- 아래 경로에서 다양한 마이미 ... 미미 타입 조회 가능!

하지만 민감한 정보들이 포함되어서 url에 노출하고 싶지 않아!
- form action에 POST를 사용하자.



- 허용되지 않는 메소드!!!!! 왜일까 !!!!!!
- 연결된 servlet이 doGet을 사용하기 때문이다.
- 405는 프로토콜 오류이다. GET으로 보내고 POST로 MAPPING한다거나 이런 경우!!
- 그러면 doPost를 사용해보자!!!!!
- 이상한 결과가 나오긴 했지만 어쨌든 뜬다!
- post는 utf-8 설정을 해야 한다!


http 프로토콜 정의 방식(get, post)


오류들
404 요청 파일이 서버 내부에 없다.
CONTEXT와 SERVLET MAPPING 잘못한 경우. 철자를 확인하자.405 POST로 보냈는데 GET으로 받고 그런 경우 500 이유 많다. 자바에서 잘못한 경우 DOPOST에서 DOGET 사용하는 법
protected coid doPost() {
request.setCharacterEncoding("utf-8");
doGet(request, response);
}
(왜 이런 식으로 사용하징)
ConnectionPool
- html은 바로 dto에 정보 저장이 불가하다. html - servlet - dto - dao로 진행된다.
- 그동안은 Connection 사용했다. 하지만 con 연결은 driver, url, id, pw 정보 확인 - 네트워크 ip port 연결 생성의 과정을 거친다.
- st, pt, rs 등과 sql 쿼리 전송 시간이 든다.
- con.close(); 로 닫기도 해야 한다.
- Connection을 공유하고, 미리 생성하자는 게 ConnectionPool의 핵심이다.
- 톰캣은 자체적으로 ConnectionPool을 제공한다.
web.xml - 컨텍스트당 1개씩, 환경설정 파일이다. context.xml - 모든 컨텍스트에서 사용할 수 있는 공통 소스 파일이다.
- javsx.sql.DataSource의 설정 정보가 저장된다.
- 톰캣에게 설정 정보를 알려준다.우리는 이미 톰캣을 설치해서 tomcat-dbcp.jar가 있다. 이걸 사용한다.

Server - context.xml에서 설정한다.

context.xml 설정하는 법

밑의 코드가 사라진다.

아래 코드로 변경된다.
- (Context), (DataSource)로 형변환한 이유는 lookup의 반환값이 Object 타입이기 때문이다.



패키지 : servlettest
RequestTestServlet LoginServlet login.html LoginDbServlet MemberDao LoginjsServlet
'스타터스 백엔드 3기' 카테고리의 다른 글
[ Servlet / JSP ] 4. 쿠키와 세션 (0) 2023.01.05 [ Servlet / JSP ] 4. 커넥션풀, forward (0) 2023.01.05 [ Servlet / JSP ] 1. 기초 (0) 2023.01.03 221230. DB 10. JDBC (수정, 삭제) (0) 2023.01.03 유데미 스타터스 취업 부트캠프 3기 - 백엔드 6주차 (0) 2022.12.30