※ Servlet

  • 자바(Java)를 이용해 웹 페이지를 동적으로 생산하는 백엔드 웹 어플리케이션(Back-End Web Application) 개발 기술
  • JavaEE에 포함된 기술
  • HttpServlet 을 상속받아 작성되는 클래스
  • 하나의 인스턴스에 여러 쓰레드가 동작하는 멀티 쓰레드 방식
  • main() 메소드를 구현하지 않으며, Servlet Container 에 의해 실행되고 관리됨

JSP

  • HTML 형식의 문서에 다이내믹 코드(Dynamic Code)를 작성하는 기술
  • Servlet 으로 변환되어 실행

Spring Framework

  • 자바 백엔드 웹 애플리케이션을 위한 오픈 소스 프레임워크(Open Source Framework)
  • 다이내믹 웹 애플리케이션 개발을 위한 여러 가지 기법 제공
    ex) IOC, DI, AOP

⊙ Servlet Container

  • 요청된 JSP/Servlet 을 실행하고 그 결과를 돌려주는 서버
  • JSP/Servlet API 를 구현하고 확장한 서버
  • Servlet 의 생성부터 소멸까지 일련의 생명주기(LifeCycle) 관리
  • 대표적인 것으로는 톰캣(Tomcat), 제티(Jetty) 등이 있음
  • WAS (Web Application Server) 라고도 부름

@PostConstruct : servlet을 준비하는 단계
init() : servlet 생성 단계
ex) 로그인, id & pwd 를 변수에 담기, 공통적으로 이루어지는 업무
service : servlet이 일을 하는 단계(개발자가 구현하는 단계)
destroy() : servlet이 컨테이너에서 소멸되는 단계
ex) 데이터베이스를 쓰고나서 리소스 해제를 할 때, 리로스 반납 등
@PreDestroy : servlet을 종료시켜주는 단계



※ HttpServlet 의 실행 흐름

  1. 웹 클라이언트가 브라우저를 통해서 서버에게 Http Request 를 함
  2. Servlet Container 에서 클라이언트의 Request 를 받고 Servlet Instance가 있는지 확인하고 없으면 Instance를 생성하고 Servlet 호출
  3. 해당 Servlet 의 service() 메소드를 호출
  4. 그 결과를 html 형태로 만들어 Servlet Container 에 전달
  5. 최종 Http Response 를 클라이언트에 전송



※ HttpServletRequest

● HttpServletRequest 클래스란?

클라이언트로부터 전달되는 다양한 정보를 추상화시킨 객체이다.
클라이언트가 전달하는 정보를 추출할려면 이 객체를 이용하면 된다.
예를 들어, 클라이언트가 입력한 데이터, 요청 헤더 정보, URL & URI 등 다양한 정보를 얻을 수 있다.

● HttpServletRequest 주요 메서드

  • request.getCookies();
  • request.getSession();
  • request.getAttribute(null);
  • request.setAttribute(null, null);
  • request.getParameter(null);
  • request.getParameterNames();
  • request.getParameterValues(null);
// HttpServletRequest를 이용한 간단한 예제
// http://localhost:8080/WebLab/HelloServlet?name=servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("EUC-KR");
		response.setContentType("text/html;charset=EUC-KR");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>helloworld servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("요청 방식 : " + request.getMethod() + "</br>");
		out.println("호출 URL : " + request.getRequestURL() + "</br>");
		out.println("요청 URI : " + request.getRequestURI() + "</br>");
		out.println("요청 데이터 : " + request.getQueryString() + "</br>");
		out.println("요청 프로토콜 : " + request.getProtocol() + "</br>");
		out.println("서버 포트번호 : " + request.getServerPort());
		out.println("</body>");
		out.println("</html>");
	}



  • form 태그로 데이터 받아오는 예제
package form;

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;

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("/mSignUp")
public class MemSignUp extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("--doGet()--");
		
		String m_name = request.getParameter("m_name");
		String m_pass = request.getParameter("m_pass");
		String m_gender = request.getParameter("m_gender");
		String[] m_hobbys = request.getParameterValues("m_hobby");
		String m_residence = request.getParameter("m_residence");
		
		System.out.println("m_name : " + m_name);
		System.out.println("m_pass : " + m_pass);
		System.out.println("m_gender : " + m_gender);
		System.out.println("m_hobbys : " + Arrays.toString(m_hobbys));
		System.out.println("m_residence : " + m_residence);
		
		Enumeration<String> names = request.getParameterNames();
		while (names.hasMoreElements()) {
			String name = (String)names.nextElement();
			System.out.println("name : " + name);
		}
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("--doPost()--");
		doGet(request, response);
	}

}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="mSignUp" method="post">
		name : <input type="text" name="m_name"> </br>
		password : <input type="password" name="m_pass"> </br>
		gender : Man<input type="radio" name="m_gender" value="M" checked="checked">, Woman<input type="radio" name="m_gender" value="W"></br>
		hobby : Sport<input type="checkbox" name="m_hobby" value="sport">,
				Cooking<input type="checkbox" name="m_hobby" value="cooking">,
				Reading<input type="checkbox" name="m_hobby" value="reading">,
				Travel<input type="checkbox" name="m_hobby" value="travel"></br>
		residence : <select name="m_residence">
						<option value="seoul" selected="selected">Seoul</option>
						<option value="gyeonggi">Gyeonggi</option>
						<option value="chungcheong">Chungcheong</option>
						<option value="jeonra">Jeonra</option>
						<option value="jeju">Jeju</option>
						<option value="gyeongsang">Gyeongsang</option>
						<option value="gangwon">Gangwon</option>
					</select></br>
					<input type="submit" value="sign up">
	</form>
</body>
</html>

※ HttpServletResponse

● HttpServletResponse 주요 메서드

  • response.addCookie(null);
  • response.getStatus();
  • response.sendRedirect();
  • response.getWriter();
  • response.getOutputStream();



profile
벨린이

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

글 잘 봤습니다.

답글 달기