본문 바로가기

JSP&Servlet

서블릿 기초 문법

1. 서블릿이란?

: 서블릿은 JSP가 나오기 이전에 썬마이크로시스템즈(Sun Microsystems)에서 동적인 웹페이지 콘텐츠를 생성하는 기술로 제공되었다. 서블릿도 JSP와 마찬가지로 웹페이지에서 호출을 하여 실행결과를 브라우저를 통해서 제공한다. 그러나 서블릿은 자바의 많은 장점들을 사용할 수는 있지만 HTML, CSS 및 자바스크립트 그리고 웹디자인과 연동하기에는 많은 단점이 있다.

 

그러나 이러한 단점이 있는 서블릿이 없어지지 않고 계속적으로 존재할 수 있는 이유에는 크게 두 가지가 있다. 첫 번째는 JSP에는 없는 서버 측 프로그램의 기능이 있다는 점과, 두 번째는 대기업에서 사용하는 프레임워크의 기초 기술로 사용된다는 점이다.

 

 

2. 서블릿의 주요 클래스

: 서블릿에서 제공되는 주요 클래스에 대해서 알아보겠다. 서블릿에서 제공되는 모든 클래스를 살펴볼 수는 없지만 기본적으로 알고 있어야 할 클래스에 대해서만 살펴보겠다.

 

1) HttpServlet

 

HttpServlet 클래스는 서블릿을 만들기 위해 반드시 상속해야 할 필수 클래스이다. 존재 목적 자체가 서블릿을 만들기 위해서 제공되는 클래스이다.

 

[표 1] HttpServlet에서 제공되는 주요 메소드

 

2) HttpServletRequest

 

HttpServletRequest 클래스는 클라이언트가 데이터를 입력하거나 또는 클라이언트의 정보에 대한 요청 값을 가지고 있는 클래스이다.

 

[표 2] HttpServletRequest에서 제공되는 주요 메소드

 

3) HttpServletResponse

 

HttpServletResponse 클래스는 클라이언트가 요청한 정보를 처리하고 다시 응답하기 위한 정보를 담고 있는 클래스이다.

 

[표 3] HttpServletResponse에서 제공되는 주요 메소드

 

4) HttpSession

 

HttpSession 클래스는 클라이언트가 세션 정보를 저장하고 세션 기능을 유지하기 위해서 제공되는 클래스이다.

 

[표 4] HttpSession에서 제공되는 주요 메소드

 

 

3. 서블릿의 요청 방식

1) get 방식

 

일반적으로 검색이나 조건을 다른 페이지로 전송할 때 사용하는 방식이다. 그리고 get 방식으로 요청을 하면 url에 노출이 되는 특징이 있기 때문에 보안적인 내용은 절대 get 방식으로는 사용하면 안 된다. 다음은 간단하게 msg 문자열을 서블릿으로 보내는 간단한 예제를 통해서 get 방식과 서블릿이 어떻게 통신하는지 알아보겠다.

 

 

<%@ page contentType="text/html; charset=EUC-KR"%>
<html>
<body>
<h1>Get Servlet 방식</h1>
<form method="get" action="getServlet">
msg : <input name="msg">
<input type="submit" value="전송">
</form>
</body>
</html>

 

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;

@WebServlet("/getServlet")
public class GetServlet extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {

		String msg = request.getParameter("msg");
		response.setContentType("text/html; charset=EUC-KR");
		PrintWriter out = response.getWriter(); 
		out.println("<html>");
		out.println("<body>");
		out.println("<h1>Get Servlet 방식</h1>");
		out.println("<h2>msg : "+msg + "</h2>");
		out.println("</body>");
		out.println("</html>");
	}
}

 

getJsp.jsp에 msg를 입력하고 [전송] 버튼을 클릭하면 서블릿 GetServlet이 실행된다.

실행화면은 다음과 같다.

 

 

 

2) post 방식

 

브라우저에서 게시판에 글을 입력하거나 또는 회원가입을 하는 기능으로 다른 페이지로 전송할 때 사용하는 방식이다. post 방식은 get 방식과 다르게 url 상에 노출은 되지 않고 html 헤더 값에 같이 전송되는 방식이다. 

 

<%@ page contentType="text/html; charset=EUC-KR"%>
<html>
<head>
<body>
<h1>Post Servlet 방식</h1>
<form method="post" action="postServlet">
id : <input name="id"><br/>
pwd : <input type="password" name="pwd"><br/>
email : <input name="email"><br/>
<input type="submit" value="가입">
</form>
</body>
</html>

 

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;

@WebServlet("/postServlet")
public class PostServlet extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		request.setCharacterEncoding("EUC-KR");
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String email = request.getParameter("email");
		response.setContentType("text/html; charset=EUC-KR");
		PrintWriter out = response.getWriter(); 
		out.println("<html>");
		out.println("<body>");
		out.println("<h1>Post Servlet 방식</h1>");
		out.println("<h3>id : "+ id + "</h3>");
		out.println("<h3>pwd : "+ pwd + "</h3>");
		out.println("<h3>email : "+ email + "</h3>");
		out.println("</body>");
		out.println("</html>");
	}
}

 

앞에서와 마찬가지로 데이터를 입력하면 다음과 같은 결과가 나온다.

 

 

4. 서블릿에서 세션 사용하기

: 세션은 아주 중요하고 많이 사용되는 기능이다. 웹에서 사용하는 http 프로토콜의 특징은 커넥션을 계속 유지하지 않는 프로토콜이기 때문에 클라이언트(브라우저)와 서버(톰켓)와 통신의 연속성을 유지하기 위해 사용되는 기술이 세션이다.

 

JSP와 서블릿을 사용하여 간단한 로그인 및 로그아웃 기능을 만들어 보겠다. 아직까지는 DB 연동이 안 되기 때문에 이 부분은 고려하고 보기 바란다.

 

<%@ page contentType="text/html; charset=EUC-KR"%>
<%
		String id = (String)session.getAttribute("idKey");
%>
<html>
<body>
<h1>Servlet 세션</h1>
<%
	if(id!=null){
%>
<%=id%>님 반갑습니다.<p/>
<a href='logout.jsp'>로그아웃</a>
<%}else{%>
<form method="post" action="loginServlet">
id : <input name="id"><br/>
pwd : <input type="password" name="pwd"><br/>
<input type="submit" value="로그인">
</form>
<%} %>
</body>
</html>

 

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;
import javax.servlet.http.HttpSession;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		
		if(id!=null&&pwd!=null) {
			HttpSession session = request.getSession();
			session.setAttribute("idKey", id);
		}
		response.sendRedirect("login.jsp");
	}
}

 

결과물은 다음과 같다.

 

'JSP&Servlet' 카테고리의 다른 글

JDBC로 데이터베이스 연동  (0) 2022.03.18
자바빈즈(JavaBeans)  (0) 2022.03.14
JSP의 내장 객체  (0) 2022.03.10
JSP의 지시자와 태그  (0) 2022.03.08
JSP 기초 문법  (0) 2022.03.07