서블릿(Servlet)
- server + Applet의 합성어로 서버에서 실행되는 Applet이란 의미로 자바를 이용하여 웹에서 실행되는 프로그램을 작성하는 기술
- 자바 클래스 형태의 웹 애플리케이션
브라우저를 통해 자바 클래스가 실행되도록 하기 위해서는 javax.servlet.http 패키지에서 제공하는 HttpServlet 클래스를 상속받아 구현해야 한다.
- 서블릿 클래스 : HttpServlet 클래스를 상속 받아 만든 서브 클래스
- HttpServlet : 웹 서비스가 가능한 웹 애플리케이션을 제작할 수 있도록 자바를 확장해 놓은 클래스
두 수의 합을 구한 결과를 출력하는 서블릿 클래스이다.
package unit01; // 패키지
import java.io.IOException; // 입출력 시 예외처리를 위한 클래스
import java.io.PrintWriter; // 클라이언트에 결과를 출력하기 위한 out 객체를 PrintWriter클래스로 선언 했기 때문에 import
import javax.servlet.ServletException; // 서블릿에서 발행하는 예외 처리를 위한 클래스
import javax.servlet.annotation.WebServlet; // @WebServlet을 사용하기 위해 import
import javax.servlet.http.HttpServlet; // HttpServlet 클래스를 사용하기 위해 import
import javax.servlet.http.HttpServletRequest; // doGet, doPost 메소드의 매개 변수에서 사용한 모든 HttpServletRequest 클래스를 사용하기 위해 import
import javax.servlet.http.HttpServletResponse; // doGet, doPost 메소드의 매개 변수에서 사용한 모든 HttpServletResponse 클래스를 사용하기 위해 import
@WebServlet("/AdditionServlet01")
// 서블릿 요청할 때 직접 클래스를 요청하는 것이 아니고 @WebServlet() 안에 기술된 URL로 요청을 하는 것이므로 요청 URL을 정하는 곳이다.
public class AdditionServlet01 extends HttpServlet {
// HttpServlet에는 웹 애플리케이션으로 동작하도록 하는 기본 동작 즉 요청에 대한 응답이 가능하도록 하는 내용이 기술되어 있어서 상속
private static final long serialVersionUID = 1L;
public AdditionServlet01() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 서블릿이 요청을 받으면 이벤트 처리 방식으로 자동으로 호출되는 메소드. HttpServlet에 정의된 메소드로 오버라이딩
int num1 = 20;
int num2 = 10;
int add = num1 + num2;
PrintWriter out = response.getWriter();
out.println("<html><head><title>Addition</title></head>");
out.println("<body>");
out.println(num1 + "+" + num2 + "=" + add);
out.println("</body>");
out.println("</html>");
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
⊙ 클라이언트가 서버에 요청하는 방법
클라이언트는 서버에 get과 post 두 가지 방식 중 하나로 요청한다.
전송 방식 | 설명 | |||
get 방식 | 주소 창을 타고 넘어가기 때문에 서버로 보내는 데이터를 사용자가 그대로 볼 수 있어서 보안에 취약 255자 이하의 적은 양의 데이터를 전송한다. |
|||
post 방식 | html header를 타고 넘어가기 때문에 보안에 강하다. 255자 이상의 대용량의 데이터를 전송한다. |
서블릿 클래스에는 doGet() 혹은 doPost()가 있는데 요청 방식에 따라 호출되는 메소드가 달라진다.
get 방식으로 요청하면 doGet()이 호출되고 post 방식으로 요청하면 doPost()가 호출된다.
HTML코드로 살펴보자.
<form action="CallServlet">
<input type="submit" value="전송">
</form>
- <form>태그의 action속성 : 서버 측에 존재하는 많은 서블릿 중 하나를 요청. 서블릿 이름 기술
- <input>태그의 type속성 submit속성값 : 클릭시 지정된 서블릿이 요청
<form> 태그가 서블릿을 요청할 때는 get과 post 두 가지 전송 방식 중 한가지로 전송되는데 method속성을 추가한다.
get 방식의 요청 예
<form method="get" action="CallServlet">
<input type="submit" value="전송">
</form>
post 방식의 요청 예
<form method="post" action="CallServlet">
<input type="submit" value="전송">
</form>
전송 방식을 결정하지 않으면 get 방식이 기본값이다. 또한 <a>태그를 사용하여 링크를 걸어주거나 주소 입력창에 직접 서블릿 요청을 위한 URL을 입력해서 get 방식으로 인식한다.
<form> 태그에 서블릿 이름을 넣으면 서버에서 해당 서블릿을 찾는 방법은 WAS가 시스템 프로그램이므로 확장자가 .Class인 파일을 톰캣이 가지고 있다가 요청이 들어오면 해당 서블릿 클래스들을 찾아서 실행하는 원리이다.
요청에 대한 처리를 위한 doGet() 과 doPost() 메소드는 어떤 요청이 왔느냐에 따라 둘 중 하나가 호출된다는 것 빼고는 메소드의 형태는 완전히 동일하다.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
}
- HttpServletRequest request : 요청 처리, 클라이언트의 요청(request)을 처리
- HttpServletResponse response : 응답 처리, 요청 처리 결과를 클라이언트에게 되돌리기(응답)(response)
- throws ServletException, IOException : 예외 처리
서버가 요청에 대한 처리를 마치고 클라이언트에게 결과를 되돌려주기 위해서는 HttpServletResponse로 부터 PrintWriter 형의 출력 스트림 객체를 얻어 와야 한다. 또한 출력 스트림 객체의 println()을 호출하면 브라우저에 HTML 코드를 보내주어서 결과를 얻어 볼 수 있다.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html><head><title>Addition</title></head>");
}
JSP
- Java Server Page의 줄임말로 자바로 서버 페이지를 작성하기 위한 언어다.
- 서버 페이지 : 웹 서버에서 실행되는 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>테스트</title>
</head>
<body>
<%
int num1 = 20;
int num2 = 30;
int add = num1 + num2;
%>
<%=num1%>+<%=num2%>=<%=add%>
</body>
</html>
서블릿 : 자바 코드 내부에 HTML 코드가 들어가는 구조
JSP : 반대로 HTML 문서 내부에 자바 코드가 들어가는 구조
실무에서는 복잡한 로직은 서블릿에 기술해 놓고 결과만을 JSP 페이지를 통해 클라이언트에 제공하는 형태로 개발한다.
MVC 패턴 : 로직과 표현을 분리하여 프로그래밍 하는 것. 서블릿이 로직을 구현하는 Model 역할을 하고 JSP가 결과를 출력하는 View 역할을 한다.
'JSP' 카테고리의 다른 글
[JSP&Servlet] 서블릿의 데이터 통신, 쿼리 스트링 (0) | 2020.10.01 |
---|---|
[JSP&Servlet] 서블릿의 동작 원리, 서블릿의 라이프 사이클 (0) | 2020.10.01 |
[JSP] 서블릿 클래스의 구조 (0) | 2020.10.01 |
[JSP] URL Mapping (0) | 2020.10.01 |
[JSP] 웹 프로그래밍 (0) | 2020.09.23 |