- 서블릿 과정 = "요청->서블릿->처리->결과->응답"
- 서블릿은 컨테이너에 하나의 객체만 생성함(오늘 배울 내용)

먼소리야? 이전꺼 복습하고 알아보자..
- 요청 - 서블릿 객체가 생성(최초)
다음 요청 - 동일한 객체를 사용하여 처리 //(생성된 서블릿 객체가 사용됨)
멤버변수에 저장된 데이터는 요청마다 사용될 수 있음

좀 참아봐.. 좀있다 알려줄게
- 서블릿메소드 (doget dopost)
get - 주소를 통해 서버에 데이터 요청
매개변수(인수) ->HttpServletRequest(요청) / HttpServletResponse(응답)
- http://localhost:8090/ex00/hello?name=James
-c ontextPath(ex00)
-서블릿 url매핑 이름(hello)
*파라미터
-파라미터 key : name
-파라미터 value : james
-name=james(쿼리스트링) - 서블릿에서 파라미터를 받을 때 요청객체로 받는다
request.getParamener("name") -->무조건 String타입
->타입변경 시
int형: Integer.ParseInt()
결과> 클라이언트가 요청한(기대하는)데이터
결과를 클라이언트한테 제공한다 ->브라우저를 통해 서버와 소통 - 응답> 브라우저에 무언가 써주는 것
PrinterWriter pw = response.getWriter();
↓↓예시↓↓
pw.print("<html>"); -->HTML문서
pw.print("<head>");
pw.print("<title>");
pw.print("서블릿 연습");
pw.print("</title>");
pw.print("<link rel='stylesheet' href='css/style.css'>");
pw.print("</head>");
pw.print("<body>");
pw.print("<h1>룰루랄라</h1>");
pw.print("</body>");
pw.print("</html>");
이러니꺼 엄청 복잡;; --> JSP사용하면 편하다

이제 너가 원하던 궁금증을 해결해줄게
<<오늘의 수업>>
- 서블릿은 컨테이너에 하나의 객체만 생성함(오늘 배울 내용) 이거에 대해 알아보자
(일반적으로 서블릿은 최초 요청이 들어왔을 때 한 번만 객체를 생성하고 이후에는 그 동일한 객체를 재사용한다고 한다)
- Servlet의 생명 주기
JSP 페이지도 결국은 Servlet이기 때문에 아래와 같은 생명 주기를 갖는다
1. 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성
2. 서버는 init() 메소드를 호출해서 Servlet을 초기화
3. service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리
4. service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메서드 (doGet(), doPost() 등)를 호출
5. 서버는 destroy() 메소드를 호출하여 Servlet을 제거
destroy : 서버가 끝나면
- Servlet 객체를 생성하고 초기화하는 작업은 비용이 많은 작업이므로, 다음에 또 요청이 올 때를 대비하여 이미 생성된 Servlet 객체는 메모리에 남겨둠
- 또 톰캣이 종료되기 전이나 reload 전에 모든 Servlet을 제거
- 이렇게 톰캣은 자원을 아끼면서 Servlet을 사용
개발자인 우리들도 자원을 효과적으로 사용하기 위해서 노력을 기울여야 한다
이에 대한 방법으로 초기화하는데 호출되는 init() 메서드를 활용
즉, 요청이 매 번 똑같은 로직을 거쳐서 똑같은 결과를 산출하는 작업은 딱 한 번만 수행 되도록 init() 에서 처리하는 것
예를 들면, doGet()에서 헤더를 추가하는 request.setCharacterEncoding("utf-8"); 메서드 같은 것들이 있다
package servlet0607;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/lifecycle")
public class LifeCycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifeCycleServlet() {
super();
System.out.println("create...");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init...");
}
public void destroy() {
System.out.println("destroy..");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service...");
}
}
문제1)
1. lifecycleservlet get방식으로 호출
2. 파라미터 이름은 name
3. lifecycleservlet은 파라미터를 받아서
4. arraylist에 저정하고 파라미터 값을 화면에 h1크기의 글자로 표시
5. 다시 폼을 통해 이름 데이터를 lifecycleservlet에 보내면
6. arraylist에 이전 데이터와 함께 저장된다
>파라미터 값을 화면에 h1크기의 글자로 표시하면 이전 데이터도 함께 화면에 나온다
짱 + 구 + 는 귀엽다 를 따로따로 쳐보자
*센세: 일반적으로 서블릿은 최초 요청이 들어왔을 때 한 번만 객체를 생성하고 이후에는 그 동일한 객체를 재사용한다고 한다
라는말을 이해했나?

아하 이해했슴다 센세

ㅎㅎ
- 헷갈린부분
ArrayList<String> ar = new ArrayList<>();위치를 service안에 넣어서 계속 초기화가 돼서 값이 추가가 안됐다.... 바보냐?
package servlet0607;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/lifecycle")
public class LifeCycleServlet extends HttpServlet {
ArrayList<String> ar = new ArrayList<>();
private static final long serialVersionUID = 1L;
public LifeCycleServlet() {
super();
System.out.println("create...");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init...");
}
public void destroy() {
System.out.println("destroy..");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
System.out.println("service...");
String getinfo = request.getParameter("name");
ar.add(getinfo);
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
for(String a : ar) {
pw.print("<h1 style='display: inline-block;'>"+a+"</h1>");
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
window.onload = function() {
}
</script>
</head>
<body>
<h1>LifeCycle 서블릿 호출</h1>
<hr>
<form action="lifecycle" method="get">
<input type="text" name="name">
<input type="submit" value="제출하기">
</form>
</body>
</html>
'JSP > 이론' 카테고리의 다른 글
쿼리스트링 (0) | 2023.06.07 |
---|---|
sendRedirect//radio사용//checkbox(getParameterValues) //selectoption //textarea(getParameter().replace()) (0) | 2023.06.07 |
Ajax 아작스 (0) | 2023.06.05 |
servlet + request+ (response) //get vs post방식//request.setCharacterEncoding("utf-8") (0) | 2023.06.05 |
servlet + response//response.setContentType("text/html;charset=utf8"); (0) | 2023.06.05 |