1. Servlet이란? & JSP란?

servlet과 jsp라는 고급언어에 대해서 정리할게요. 

 

Servlet이란?                                                    (동작하는)  

톰캣(서버)위에서 웹페이지를 동적으로 생성하거나 데이터 처리를 수행하기 위해 작성된 java프로그램이에요. 

   

자바 서블릿은 서버측 기능을 확장시킨 자바 프로그램, JAVA EE(= Java Platform EnterpriseEdition)일부에요. 

대체적으로, 

서블릿은 쇼핑 사이트온라인 뱅크 등의 다양한 동적 웹사이트(= 다양한 플렛폼)를 구축하기 위해 사용됩니다. 

 

릿 실행환경은 웹 컨테이너 혹은 서블릿 컨테이너로 불린다. 순수 서블릿을 처리하는 경우 서블릿 컨테이너라 부르는데, 서블릿 컨테이너를 포함한 JSPHTTP 서버로서의 기능을 포함하기 때문에 웹 컨테이너라고 부르기도 한다. 웹 컨테이너로는 아파치 톰캣(Apache Tomcat), IBM 웹스피어(Web Sphere) 어플리케이션 서버, 레진(Resin) 등이 있다.

 

 

 

- init() : 서블릿이 메모리에 로드될때 단 한번만 실행합니다.

- destory() : 언로드되기 전에 수행되는 callback입니다.

- doGet/doPost() : 여러번 호출/수행이 가능한 Service메서드 

     (※ doget은 Test용, url에 표시o)

(※ doPost는 최종본, url에 표시x, 보안철저) 

 

서블릿이 클라이언트의 요청이 있을때마다 Thread를 최초 한 번만 실행해서 병렬적으로 doGet/doPost를 수행한다. (서블릿 객체는 여러개 생성되지 않습니다)

 

다시 말해, Servlet은 Web Application Server을 통해 컴파일 된 후, 메모리에 적재되어 클라이언트의 HTTP Get, Post등의 요청을 처리하는 자바 프로그램입니다.

 

※WAS란, 

- 정적문서는 바로 HTML로 반환한다.- 아파치, iis, 웹로직, 썬서버...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CalcServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
 
        int sum=0;
        for(int i=0; i<=100; i++){
            sum+=i;
        }
        //request.setCharacterEncoding(arg0); 값을 넘겨받앗을 경우 추가인코딩
        response.setContentType("text/html; charset=utf-8"); //해당페이지내의 값 인코딩
        PrintWriter out = response.getWriter();
        out.println("1-100까지의 총합은: "+sum);
        out.close();
        
    }
}
 
 
더보기
<코드결과>
 
Servlet에서 1-100까지의 총합을 구하는 코드를 위와 같이 구현해봤습니다.
 
 우선, 
doGet메서드나, doPost메서드의 매개변수를 통해 알 수 있듯이 request response가 있어요.
값의 응답은 response로, 값의 호출은 request로 사용합니다. (이 매개변수들은 Servlet의 내장객체입니다.)
 
 두번째, 
항상 doGet이든 doPost중 하나를 사용해야한다. (init과 destory는 선택적)  
 
 세번째, 
doGet을 사용시, url을 통해 입력경로까지도 노출됩니다. test용도로 편리하게 사용할 수 있죠.
doPost를 사용시, 그러한 노출을 방지함으로써, 편리함보다는 보안성을 통해 최종제출에 좋습니다. 
(또한 JSP를 통해 doPost에서 form태그의 값을 받으면 위의 주석처리된 인코딩처리를 해야 한글이 안깨집니다)
 
 네번째, 
항상 doGet메서드안에서는 
JSP에서 전달받은 값을 변수에 저장 => 추가적인 수행 => 인코딩=> print객체생성 => 브라우저출력
 

 


JSP란?

자바 서버 페이지(Java Server Pages, JSP)로써, HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어입니다. JAVA EE스펙 중 일부로 웹 애플리케이션 서버에서 동작한다.

 

JSP는 실행시에 자바 서블릿으로 변환된 후 실행되므로 서블릿과 유사하다고 볼 수 있다. 하지만, 서블릿과는 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. (대표적으로는 JAVA BEAN의 이용이 있다 = 객체)

 

 

Servlet을 같이 사용함으로써, 프리젠테이션 로직과 비지니스 로직 분리==> 

JSP코드가 간단해져서 유지보수가 간편하다

 

※ 보여지는 부분은 HTM이 중심이되는 JSP이 담당한다.※ 다른 자바 클래스에게 데이터를 넘겨주는 부분은 Java코드가 중심이되는 Servlet이 담당한다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title> 1-100합 </title>
</head>
<body>
<%    
    int sum=0;
    for(int i=0; i<=100; i++){
         sum+=i;
    }
    out.println("1-100까지의 총합은: "+sum);
%>
</form>
</body>
</html>
 


 

JSP에서 1-100까지의 총합을 구하는 코드를 위와 같이 구현해봤습니다.

 
 우선, 
JSP에서는 <% %>태그를 통해 JAVA코드를 HTML안에 작성할 수 있어요.
<%@ page ~~~~~~ %>라고 처리된 부분이 있음으로써, JSP와 HTML이 구별될 수 있습니다.                    
 
 
 두번째, 
기본적인 HTML5 버전, Utf-8인코딩방식을 위와같이 설정해놓고 시작해야합니다.
 
 
정말로 JSP는 HTML코드안에서 Java코드를 작성하니까 더 보기가 쉽죠?! 웹디자이너들을 위해서라도 모두가 보기
 
편하기 위하여 JSP를 쓰는 경우가 많아요. 하지만, Servlet에서도 HTML태그를 out.println(" ")를 통해서 사용할 
 
수 있습니다.