gwooden_코린이
이클립스 서블릿 살펴보기 본문
728x90
1. 웹서버 WAS(Web Application Server) - 톰캣
1-1. 정적 페이지 - HTML
(요청)▷ 사용자 |
▷ 요청 ◀ |
◀ 웹서버 ▽ |
▲ DB ▽ | ||
1.HTML 2.HTML |
1-2. 동적 페이지 - JSP
사용자(요청) | 요청 ▷ | 웹서버 | 넘김 ▷ | WAS (내부에서 계산 처리) |
사용자 | ◀ 요청 | 웹서버 | ◀ 넘김 | WAS (처리 완료 후) |
사용자가 페이지를 요청과 동시에 새로운 페이지가 만들어지는 구조 (기본 틀은 만들어져있다.)
- WAS에서 동적인 페이지(생성)제공
- 웹 컨테이너 / 서블릿 컨테이너
JAVA + SERVLET + JSP
2. 서블릿
- 자바를 이용해서 웹에 실행되는 프로그램을 만드는 것
- 웹 브라우저 자바코드를 모름
- 자바 클래스 안에 HTML 코드를 작성(스트림 이용)
- JSP
- HTML안에 JAVA코드를 작성
(프론트관련된건 jsp로 관리하고 백엔드 관련된건 서블릿으로 관리)
톰캣 -> httpServlet 클래스를 상속받은 클래스가 서블릿 클래스
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>hello</h1>
</body>
</html>
이클립스에서 서버구동 후 결과확인이 싫으시면 '윈도우'에서 'Web Browser'을 눌러 원하는 타입으로 바꿔주면 된다.
package unit01;
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;
/**
* Servlet implementation class Sample01
*/
@WebServlet("/Sample01")
public class Sample01 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Sample01() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doget호출");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("dopost호출");
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="Sample91">
<input type="submit" value="get">
</form>
<form method="post" action="Sample91">
<input type="submit" value="post">
</form>
</body>
</html>
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//바이너리, 바이트형식으로 출력/입력을 할게아니라 문자 PrintStream사용
//PrintStream은 문자(다국어) 사용하기 번거로움
//PrintWriter를 사용
PrintWriter out = response.getWriter();
for(int i=0; i<10; i++)
out.print("<h1>hello doget</h1>");
}
html안에서 자바코드를 구동시킬 수 있다.
단, 특정코드를 삽입해야지만 인식한다.
<% 넣고싶은 자바코드 %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<!-- 자바코드로 인식시키기 위해서는 아래처럼 코드를 작성해서 자바로 인식하게 해줘야 한다. -->
<%
int i = 10;
int j = 20;
%>
<h1><%= i+j %></h1>
</body>
</html>
2-1. URL 맵핑
@WebServlet("/hi")
한글화 작업을 위해
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
package unit01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Hello
*/
@WebServlet("/hi")
public class Hello extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Hello() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1>안녕 서블릿</h1>");
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
2-2. 서블릿 동작 원리
- 톰캣이 작동되면 JVM 작동 -> 자바 문법에 따르는 서블릿을 처리
- 브라우저에서 요청
- WAS에 웹서버가 서블릿 요청을 인식
- 서블릿 컨테이너에게 수행하도록 넘김
- 서블릿은 스레드를 작동
- 서블릿 객체를 생성하고 처리
- 서블릿 객체의 처리가 끝나면 스레드도 종료
- 서블릿 수행결과가 웹서버로 전달
- 브라우저에게 전달
웹 브라우저(클라이언트) | 요청 ▷ | 웹서버 | ▷ | 서블릿 컨테이너 |
▷ | 스레드 (작동) |
▷ | 서블릿 객체 (처리) |
웹 브라우저(클라이언트) | ◀ 전달 | 웹서버 | ◀ | 서블릿 컨테이너 |
◀ | 스레드 (종료) |
◀ | 서블릿 객체 (처리완료) |
2-3. 서블릿 생명주기(라이프 사이클)
인스턴스 생성 |
▼ |
Init() -> 초기화 (한번만 해주고 이후로는 생략) |
▼ |
doGet() 또는 doPost |
▼ |
Destroy (한번만 해주고 이후로는 생략) |
package unit01;
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;
/**
* Servlet implementation class LiftCycle
*/
@WebServlet("/LiftCycle")
public class LiftCycle extends HttpServlet {
private static final long serialVersionUID = 1L;
int initCnt = 1;
int doGetCnt = 1;
int destroyCnt = 1;
/**
* @see HttpServlet#HttpServlet()
*/
public LiftCycle() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("inint메서드 호출 : " + initCnt++);
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
System.out.println("destroy메서드 호출 : " + destroyCnt++);
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet메서드 호출 : " + doGetCnt++);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
728x90
'JSP&Servlet' 카테고리의 다른 글
이클립스 JSP 지시자 (0) | 2023.01.19 |
---|---|
이클립스 JSP 태그 (표현식) (0) | 2023.01.19 |
이클립스 JSP/서블릿 컨텍스트 패스 (0) | 2023.01.18 |
이클립스 서블릿 쿼리스트링 (0) | 2023.01.17 |
아파치 톰캣 Apache Tomcat 설치 및 사용해보기 (0) | 2023.01.17 |
Comments