2019. 11. 4. 11:04ㆍ🔴 JSP웹개발
- 해당 서블릿 객체가 컨테이너에 없을때
-
브라우저 → http사이트로 동적요청 (ex.로그인 버튼을 누름)
-
Tomcat(WAS)에게 동적요청을 전달
Tomcat = servlet container
서블릿을 관리하는 역할 -
Tomcat이 /login객체의 서블릿 객체가 있는지? 찾아봄
-
Class의 집합으로 이동 → LoginServlet클래스를 통해 Container으로 객체 생성 (init()호출=초기화)
-
스레드 할당:
서버 1, 클라이언트 3 인 상황일 때
→ 동시에 요청이 들어오면 메인스레드가 요청마다 스레드를 별도로 만듬
→ service()메소드 실행 → doGet(), doPost() 방식인지 판단 -
개발자 → doget / dopost 방식에 따라 실행해야하는 로직들을 짜 놓음
- 해당 서블릿 객체가 컨테이너에 있을때 (JoinServlet) → init() 실행 안함
- 서비스 요청이 장시간 없거나 부족할때 → 객체 destroy()
즉 : 객체는 한번 생성 & 재활용된다!!
예제1 : LifeCycleServlet.java
<LifeCycleServlet.java 파일 생성>
처음으로 Tomcat이 LifeCycleServlet 생성했을때 콘솔:
Tomcat이LifeCycleServlet 클래스를 통해 객체 생성 → Servlet Container에 저장
→ 클래스 내 service() 호출
생성자, init(), service() + service()의 request.getMethod() → 콘솔에 출력됨
- 생성자 & init() → 사실 같은 것
- request.getMethod() = GET
service() → doGet, doPost 방식 구분해주기
콘솔:
다시실행 → 콘솔:
-
객체가 없어서 생성자, init()부터 실행
-
다시 한번 요청 → container에 life.do존재함 → service()만 실행
예제2
<join.html.html 파일 생성>
!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<form method="get" action="../parameter.do">
<input name="name" placeholder="이름을 입력하세요"/><br>
취미 : <input type="checkbox" name="hobby" value="독서"/>독서
<input type="checkbox" name="hobby" value="영화"/>영화
<input type="checkbox" name="hobby" value="운동"/>운동<br>
<input type="submit" value="get전송"/>
</form>
<hr>
<form method="post" action="../parameter.do">
<input name="name" placeholder="이름을 입력하세요"/><br>
취미 : <input type="checkbox" name="hobby" value="독서"/>독서
<input type="checkbox" name="hobby" value="영화"/>영화
<input type="checkbox" name="hobby" value="운동"/>운동<br>
<input type="submit" value="post전송"/>
</form>
</body>
</html>
서버 실행 → 직접 파라미터 입력:
<ParameterServlet.java>
doGet, doPost 로직 짜기
package servlet;
import java.io.IOException;
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("/parameter.do")
public class ParameterServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getMethod();
if(method.equals("GET")) {
doGet(request, response);
} else {
doPost(request, response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//name에 입력한 데이터를 가져옴
String name = request.getParameter("name");
System.out.println(name);
//hobby는 복수 -> 배열로 받아야함
String[] hobbyArray = request.getParameterValues("hobby");
for(String hobby : hobbyArray) {
System.out.println(hobby);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//name에 입력한 데이터를 가져옴
String name = request.getParameter("name");
System.out.println(name);
//hobby는 복수 -> 배열로 받아야함
String[] hobbyArray = request.getParameterValues("hobby");
for(String hobby : hobbyArray) {
System.out.println(hobby);
}
}
}
콘솔:
위 = get방식
데이터를 url로 보냄 → Tomcat에서 인코딩 방식을 지정했기 때문에 깨지지 않음
아래 = post방식
내부적으로 숨겨진 공간에 데이터를 담아서 박스 자체를 보내기 때문에 깨짐
→ 인코딩방식을 따로 써줘야함!!
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//post방식으로 한들 데이터를 보낼 경우 -> 인코딩 방식을 지정해야함
request.setCharacterEncoding("utf-8");
//name에 입력한 데이터를 가져옴
String name = request.getParameter("name");
System.out.println(name);
//hobby는 복수 -> 배열로 받아야함
String[] hobbyArray = request.getParameterValues("hobby");
for(String hobby : hobbyArray) {
System.out.println(hobby);
}
}
참고자료
'🔴 JSP웹개발' 카테고리의 다른 글
JSP(1) - JSP 스크립트 요소 (0) | 2019.11.08 |
---|---|
Servlet(5) - Servlet vs JSP (0) | 2019.11.05 |
Servlet(3) - Dynamic web module version 2.5 vs 3.1 (0) | 2019.11.04 |
Servlet(2) - 예제를 통해 서블릿이해하기, 웹 어플리케이션의 구성요소 (0) | 2019.11.03 |
Servlet(1) - 웹서비스 구조, 개발환경 구축 (0) | 2019.11.03 |