2023.02.07 / Maven

기가지니·2023년 2월 7일
1

Maven

Servlet 주요 build tool

Maven : Spring lagacy project
Gradle : Spring boot
Ant : (사용x, 한물 갓슈)

❓Build란 무엇인가요?
우리가 작성한 sourse code를 실행할 수 있는 독립적인 형태로 변환하는 과정 + 그 결과물

Build 과정

① project 생성
라이브러리 설정
③ code 작성
④ compile과정
⑤ test 과정
⑥ packaging(하나의 파일로 압축)
⑦ 배포


💥 이 과정을 조금 더 효율적으로 처리해보자! => Maven

Maven은 특정 ID에 종속되지 않는 별도의 툴

Maven을 쓰는 주된 이유
: 라이브러리를 편하게 관리할 수 있어요!

pom.xml에 라이브러리를 설치하면 사용자 파일 내 이런 형태로 빌드툴이 저장된다.

이제 기존에 했던 웹프로젝트를 메이븐 형태로 만들어보자

  • Servlet Container

서블릿 컨테이너는 Clinet의 Request를 받아주고 Response할 수 있게 통신해요

요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성
-> HTTP 서비스 메소드(doGet, doPost)를 실행하고
-> doGet, doPost가 종료되면
-> 다음번에 Thread 탁 나오고
-> 서비스 호출
-> (반복)

스레드가 실제로 어떻게 동작하는지 알아두자❗


1. 새로운 Web project 생성해보자

① Context root
: 우리의 프로젝트를 클라이언트가 웹상에서 식별하기 위한 논리적인 이름(한글, 공백, 특수문자 안써요!)

  1. Maven 프로젝트로 변경 후 librarat dependency 설정하자(pom.xml에)
	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-servlet-api</artifactId>
			<version>9.0.71</version>
		</dependency>
	</dependencies>
  1. Servlet code 생성
    url mapping
    : Servlet을 클라이언트가 web상에서 식별하기 위한 논리적인 이름
@WebServlet("/sayHello")
public class HelloWorldServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloWorldServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// GET방식으로 호출되면 결국 돌고 돌아서 이 method가 Thread에 의해서 호출되는거에요
		// 1. 클라이언트가 보내준 데이터를 받아요 => request
		// 2. 로직처리해요(DB처리 보험해서)
		// 3. 출력 처리해요	=>	response
		//		1. 처리된 결과를 보내주기 전에 먼저 처리한 결과가 어떤 데이터 인지를 먼저 알려줘야해요
		response.setContentType("text/html; charset=UTF-8");
		//		2. 실제 결과 데이터를 전성하면 돼요!
		//		네트웍을 통해서 전송해야 하기 떄문에 stream을 열어 데이터 전송
		PrintWriter out = response.getWriter();//클라이언트한테 이 통로를 통해 전송
		out.println("<html><head></head><body>삐릭삐릭</body></html>");
		out.close(); //stream을 닫아요!
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Parameter 전달(Data전달)

클라이언트가 서블릿에게 데이터를 전달하고 싶어요!
web에서 URL뒤에 특정 문자열을 이용해서 Data를 전달하는 방법
: Query String (무적권 Get방식)

?key=value&

연습1) 클라이언트가 2개의 숫자를 보내면 그 합의 결과를 알려주는 ㅅㅂ릿 작성해보자
단, Query String을 사용하자

@WebServlet("/sum")
public class AddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 이 서블릿을 호출하려면
		// http://127.0.0.1:8080/first/sum?num1=10&num2=20&
		// 1. 입력처리
		// Query String으로 부터 데이터를 받으려면
		// 일단 기억해야하는건 입력받은 데이터는 무조건 문자열이에요
		String num1 = request.getParameter("num1"); // 10
		String num2 = request.getParameter("num2"); // 20
		
		// 2. 로직처리
		int sum = Integer.parseInt(num1) + Integer.parseInt(num2);
		// 3. 출력처리
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html><head></head><body>" + sum + "</body></html>");
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
profile
지니야 코딩 해줘

2개의 댓글

comment-user-thumbnail
2023년 2월 7일

긁적긁적... 스치듯 읽고 갑니다 (스윽...)

1개의 답글