백엔드 (Servlet)

Wonkyun Jung·2023년 3월 20일
0

백엔드

목록 보기
1/4
post-thumbnail

Web Architecture


Servlet

  • 자바 서블릿은 자바를 이용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사앙을 말하며, 흔히 서블릿이라 불린다.

  • 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다

Servlet 동작 흐름


Sevlet Life-cycle

  • Servlet class는 JavaSE에서의 class와는 다르게 main method가 없다. 즉 객체의 생성으로 부터 사용의 주체가 사용자가 아닌 Servlet Container에게 있다

  • client가 요청하게 되면 Servlet Container는 Servlet 객체를 생성(한번만)하고, 초기화(한번만) 하며 요청에 대한 처리(요청시마다 반복)를 하게 된다. 또한 Servlet 객체가 필요없게 되면 제거하는 일까지 Container가 담당하게 된다


Servlet Life-Cycle의 주요 method


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;


@WebServlet("/life")
public class LifeCycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LifeCycle() {
        super();
        System.out.println("Contructor call");
    }

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
		 System.out.println("Destroy call");
	}

	@Override
	public void init() throws ServletException {
		super.init();
		 System.out.println("init call");
	}

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

}


Servlet Parameter 처리

Parameter 전송방식


URL? QueryString? Parameter?



Servlet 사용 예제

- index.html -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="/basic/hello">Hello Servlet</a>
	<a href="/basic/life">Servlet`s LifeCycle</a>
	<a href="/basic/parameter.html">Parameter Test</a>
</body>
</html>

- HelloServlet.java -

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("/hello")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset = utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("		<body>");
		out.println(		"Hello Servlet");
		out.println(		"안녕 서블릿");
		out.println(		"</body>");
		out.println("</html>");
		
	}
}


- parameter.html -

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
      crossorigin="anonymous"
    />
    <title>SSAFY</title>
  </head>
  <body>
    <div class="container">
      <div class="row justify-content-center">
        <div class="col-lg-8 col-md-10 col-sm-12">
          <h2 class="my-3 py-3 shadow-sm bg-light text-center">
            <mark>파라미터 테스트!!!</mark>
          </h2>
        </div>
        <div class="col-lg-8 col-md-10 col-sm-12">
          <form id="form-param" method="POST" action="">
            <div class="mb-3">
              <label for="username" class="form-label">이름 : </label>
              <input
                type="text"
                class="form-control"
                id="username"
                name="username"
                placeholder="이름..."
              />
            </div>
            <div class="mb-3">
              <label for="userpwd" class="form-label">비밀번호 : </label>
              <input
                type="password"
                class="form-control"
                id="userpwd"
                name="userpwd"
                placeholder="비밀번호..."
              />
            </div>
            <div class="mb-3">좋아하는 과일?</div>
            <div class="form-check">
		      <input type="checkbox" class="form-check-input" name="fruit" value="사과">
		      <label class="form-check-label">사과</label>
		     </div>
		     <div class="form-check">
		      <input type="checkbox" class="form-check-input" name="fruit" value="딸기">
		      <label class="form-check-label">딸기</label>
		     </div>
		     <div class="form-check mb-3">
		      <input type="checkbox" class="form-check-input" name="fruit" value="수박">
		      <label class="form-check-label">수박</label>
		    </div>
            <div class="col-auto text-center">
              <button type="button" id="btn-send" class="btn btn-outline-primary mb-3">
                전송
              </button>
            </div>
          </form>
        </div>
      </div>
    </div>
    <script
      src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
      crossorigin="anonymous"
    ></script>
    <script>
      document.querySelector("#btn-send").addEventListener("click", function () {
        if (!document.querySelector("#username").value) {
          alert("이름 입력!!");
          return;
        } else if (!document.querySelector("#userpwd").value) {
          alert("비밀번호 입력!!");
          return;
        } else {
          let form = document.querySelector("#form-param");
          form.setAttribute("action", "/basic/param");
          form.submit();
        }
      });
    </script>
  </body>
</html>



- parameterTest.java -

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

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		String userpwd = request.getParameter("userpwd");
		String[] fruit = request.getParameterValues("fruit");
		
		
		response.setContentType("text/html;charset = utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("		<body>");
		out.println(		"Hello Servlet");
		out.println(		"안녕 서블릿");
		out.println(username+"님 비번은 "+userpwd+"이고 좋아하는 과일은  "+ Arrays.toString(fruit)+"입니다");
		out.println(		"</body>");
		out.println("</html>");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		
		request.setCharacterEncoding("utf-8"); //얘를 추가해주고 아래에 문자열을 받는다 
		
		String username = request.getParameter("username");
		String userpwd = request.getParameter("userpwd");
		String[] fruit = request.getParameterValues("fruit");
		
		response.setContentType("text/html;charset = utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("		<body>");
		out.println(		"Hello Servlet");
		out.println(		"안녕 서블릿");
		out.println(username+"님 비번은 "+userpwd+"이고 좋아하는 과일은  "+ Arrays.toString(fruit)+"입니다");
		out.println(		"</body>");
		out.println("</html>");
	}

}

0개의 댓글