Servlet
1. 브라우저의 언어와 servlet 또는 JSP만 직접 소통
html/css/javascript는 절대 일반 순수 자바 클래스와 소통 불가 즉 웹 요청/응답 처리는 일반 자바 클래스로는 불가능을 의미
따라서 웹 요청/응답 처리는 servlet 또는 JSP로 개발 해야 함
2. 이클립스 웹 개발 구조
src
- *.java 개발
- 순수 DAO와 DTO 또는 일반 모든 자바 소스
- web 상에서 http 기반으로 요청/응답 직접 처리하는 Servlet WebContent
- *.html/*.css/*.js/이미지, 동영상../*.jsp
3. http 기반의 url 형식 http://ip:port/project명/file명 http://ip:port 를 도메인으로 매핑 필수
80만 http의 기본 따라서 생략 가능
http://localhost:80/step01_basic/request.html
http://localhost/step01_basic/request.html
- Servlet1.java 라는 servlet을 playdata라는 url 가짜명으로 매핑
http://localhost/step01_basic/playdata
4. 하나의 프로세스 내부에 쓰레드로 개별 실행 단위로 설계된 WAS 및 API
- 장점 : 자원 절약/기업 관점에서 비용 절감 / client 관점에선 실행 속도 향상
Servlet 객체 수 : 요청한 client 수 = 1 : * doGet() : 요청한 client 수 = 1 : 1
HttpServletRequest 객체 수 : HttpServletResponse 객체 수 : client 수 = 1 : 1 : 1
5. Web container(web server=servlet engine) 기능
- client가 요청시 client에 1:1 매핑되는 HttpServletRequest객체와 HttpServletResponse객체가 자동 생성
- Servlet 객체는 최초의 client가 요청시에만 단 한번 생성
//http://localhost/step01_basic/playdata @WebServlet("/playdata") public class Servlet1 extends HttpServlet { private static final long serialVersionUID = 1L; public Servlet1() { System.out.println("Servlet1 생성자"); } /*doGet() * - 실행 시점 : client가 url로 요청시 자동 실행 * - doGet() 재정의는 하나 명시적으로 호출하는 코드는 없다!!!!! * - web container(web server, was, servlet engine)에 요청이 오면 감지 후에 * 자동 실행 * - web container 필수 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //server console 창에 출력하는 로직 System.out.println("Servlet1 doGet()"); //접속한 client 브라우저에 한글 데이터 출력 //인터넷 상에 http 기반으로 응답 //한글 encoding 설정 / html 포맷으로 응답 설정 response.setContentType("text/html;charset=utf-8"); //2byte 단위로 client 브라우저에 응답 가능한 출력객체 PrintWriter out = response.getWriter(); out.println("유재석과 백종원, 펜싱"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Servlet1 doPost()"); } }
Servlet API
1. HttpSevlet
- http 프로토콜을 사용 가능하게 구현된 클래스
- 사용자 정의 servlet은 상속 및 재정의로만 쉽게 개발 가능
- 장점 : 서비스 로직에만 집중해서 개발 가능
2. HttpServletRequest
- http 프로토콜 기반으로 요청하는 client의 정보를 보유
- ip/브라우저 기본정보/client가 server에 전송하는 입력데이터등..
- doGet() or doPost() 메소드 실행시 parameter 즉
메소드 실행을 위해 필요한 client의 정보를 제공해주는 API
3. HttpServletResponse
- http 프로토콜 기반으로 요청하는 client에게만 응답 처리
- 한글 등 속성 지정해서 응답 포멧 설정
- client 브라우저에 응답하는 객체
- setContentType() : client 브라우저에 응답하는 포멧 + 인코딩 설정
- getWriter() : 2byte 출력 가능한 PrintWriter 객체 생성 /PrintWriter 는 접속된 client에게만 출력
4. PrintWriter
- 2byte 단위로 client 브라우저에 출력
Servlet LifeCycle
1. 기본 생성자
- () parameter가 없는 생성자
- 최초 client가 호출시 실행되서 객체 생성
- 새로운 로직의 갱신된 객체 생성시 단 한번 생성(갱신직후 최초 client가 요청시 단 한번 실행)
2. init() - 생성자 호출 직후에 단 한번 실행 - 권장하는 로직, 공유 자원초기화 로직으로 적합
3. doGet()/doPost() - client 요청시 1:1 실행 - service 메소드라 표현
4. destroy() - 갱신된 servlet bytecode가 서버 메모리에 로딩시 자동 호출
- 구버전 객체 메모리 해제시에 자동 실행 - 자원 반환용 로직 구현시 적합
- 서버 다운 직전에도 자동 호출(자원 해제를 깨끗이 하기 위한 action)
@WebServlet("/Servlet2LifeCycle") public class Servlet2LifeCycle extends HttpServlet { public Servlet2LifeCycle() { System.out.println("생성자"); } public void init() { System.out.println("init()"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet() 언제?"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost()"); } public void destroy() { System.out.println("destroy()"); } }
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>request2form.html</title>
</head>
<body>
<h3>로그인 화면</h3>
<!-- http://localhost:80/step01_basic/idcheck
request2form.html과 동일한 url 선상의 servlet 지정 및 요청 설정
-->
<form action="idcheck" method="post">
<!-- 1 line 입력 가능한 form tag -->
id 입력 form : <input type="text" name="id"> <br>
pw 입력 form : <input type="password" name="pw"> <br>
<!-- server에 데이터 전송하면서 요청하는 tag -->
<input type="submit" value="로그인">
</form>
<hr>
<form>
</form>
<hr>
</body>
</html>
// <form action="idcheck">
@WebServlet("/idcheck")
public class Servlet2Validation extends HttpServlet {
//get방식이라는 http 표준 요청 방식을 처리하는 재정의한 메소드
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet()");
//입력된 client 데이터 획득
//<input type="text" name="id">
String id = request.getParameter("id");
//<input type="password" name="pw">
String pw = request.getParameter("pw");
System.out.println(id + " " + pw);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost()");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
System.out.println(id + " " + pw);
}
}
'Language > Java' 카테고리의 다른 글
[Spring] 스프링 프로젝트 생성 (0) | 2021.10.07 |
---|---|
JSP (0) | 2021.09.19 |
Apache Tomcat (0) | 2021.08.30 |
Lombok 라이브러리 (0) | 2021.08.18 |
Stream, Optional & Lambda (0) | 2021.08.17 |