오늘이라도

[Web] 3. Servlet 생성하는 방법, HelloServlet, 누적합 계산 ①, ② 본문

취업성공패키지 SW 개발자 교육/Web

[Web] 3. Servlet 생성하는 방법, HelloServlet, 누적합 계산 ①, ②

upcake_ 2020. 5. 8. 09:30
반응형

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 

gif 파일은 클릭해서 보는 것이 정확합니다.


 - Servlet 생성하는 방법 -

 - MVC : Model, View, Controller

 - servlet-api.jar(C:\tomcat\lib) ▶ JRE → lib → ext : 복사 & 붙여 넣기

 ① JAVA Resources → 우클릭 → New → Servlet : Servlet 마법사 실행

 ② URL Mapping → /xx.do ▶ <form action="xx.do" ~~>

 ※ Domain은 대소문자를 구분하지 않지만 URL은 대소문자를 구분한다.

  - Domain : www.naver.com  = WWW.NAVER.COM

  - URL : https://www.naver.com/~~~~~

 

 ③ [V] service 체크 → Finish

 - 불필요한 코드 삭제, 단, service() 삭제하지 말 것

 - Servlet Mapping(수동 설정) : WebContent → WEB-INF → web.xml

<!-- Servlet Class 정의 -->
	<servlet>
	  <display-name>HelloServlet</display-name>
	  <servlet-name>HelloServlet</servlet-name>
	  <servlet-class>HelloServlet</servlet-class>
	</servlet>
    
<!-- Servlet Mapping 설정 -->
	 <servlet-mapping>
	 	<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/hs.do</url-pattern>
	 </servlet-mapping>

 

 

 - HelloServlet -

 - 통신 과정 : HelloServlet.html → web.xml → hs.do → HelloServlet.java → HelloServlet.class

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Servlet</title>
</head>
<body>
<form action="hs.do" method="post">
	<input type="submit" value="Hello Servlet" />
</form>
</body>
</html>

▲HelloServlet.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("/hs.do")	//Servlet Mapping 자동 설정
public class HelloServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");	// MIME TYPE
		PrintWriter out = response.getWriter(); //응답(출력) 준비 완료
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Response Servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h2>Welcome to Hello Servlet!</h2>");
		out.println("<h2>안녕하세요</h2>");
		out.println("</body>");
		out.println("</html>");
	}
}

▲HelloServlet.java

 

▲HelloServlet.html 작동 화면

 

 

 - 누적합 계산 ① : 비즈니스 로직을 Servlet에서 처리 -

 - 통신 과정 : SuCalc01.html → sc01.do → Servlet01.java

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>두 수 사이의 누적합 계산</title>
</head>
<body>
<form action="sc01.do" method="get">
첫 번째 수 : <input type="number" name="num1" required="required" /><br />
두 번째 수 : <input type="number" name="num2" required="required" /><br />
<input type="submit" value="계산" />
<input type="reset" value="초기화" />
</form>
</body>
</html>

▲SuCalc01.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("/sc01.do")
public class Servlet01 extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		//① 클라이언트의 요청을 받는다 : 폼의 매개 변수를 가져온다 ▶ HttpServletRequest
		request.setCharacterEncoding("utf-8");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		//② 비지니스 로직(num1 ~ num2 누적합 계산) ▶ Model(Class, DTO, DAO)
		int sum = 0;
		for(int i = num1; i <= num2; i++) {
			sum += i;
		}
		
		//③ 프리젠테이션 로직 : 결과를 html 코드로 응답 (HttpServletResponse) ▶ View
		response.setContentType("text/html; charset=utf-8");	//MIME Type
		PrintWriter out = response.getWriter();
		out.println("<body>");
		out.println("첫 번째 수 : " + num1 + "<br />");
		out.println("두 번째 수 : " + num2 + "<br />");
		out.println("두 수 사이의 누적합 : " + sum);
		out.println("</body>");
	}
}

▲Servlet01.java

 

▲SuCalc01.html 작동 화면

 

 

 - 누적합 계산 ② : 비즈니스 로직을 다른 클래스에서 처리 -

 - 통신 과정

  ① 클라이언트의 요청을 받는다.
    Model [SuCalc02.html(request) → web.xml → sc02.do(Servlet02.java)

  ② 비즈니스 로직을 수행한다.

    → SumMachine.getSum() → sum]Controller [return(Servlet02.java)]

  ③프레젠테이션 로직을 수행한다.

    → View [result.jsp(response)] 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>두 수 사이의 누적합 계산2</title>
</head>
<body>
<form action="sc02.do" method="post">
첫 번째 수 : <input type="number" name="num1" required="required" /><br />
두 번째 수 : <input type="number" name="num2" required="required" /><br />
<input type="submit" value="계산" />
<input type="reset" value="초기화" />
</form>
</body>
</html>

▲SuCalc02.html

 

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 com.hanul.study.SumMachine;

@WebServlet("/sc02.do")
public class Servlet02 extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		//① 클라이언트의 요청을 받는다(HttpServletRequest) : 매개 변수 값을 가져온다.
		request.setCharacterEncoding("utf-8");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		//② 비즈니스 로직 : 별도의 클래스로 작성(Model) ▶ Package : com.hanul.study
		SumMachine sm = new SumMachine(); 
		int sum = sm.getSum(num1, num2);
		
		//③ 프레젠테이션 로직 : 결과를 응답(HttpServletResponse) ▶ result.jsp(View)
		request.setAttribute("num1", num1); //바인딩(연결) 객체
		//setAttribute(이름, 내용), 내용을 이름에 연결해주는 메서드
		request.setAttribute("num2", num2);
		request.setAttribute("sum", sum);
		RequestDispatcher rd = request.getRequestDispatcher("result.jsp"); //페이지 호출
		rd.forward(request, response); // 페이지 전환
	}
}

▲Servlet02.java

 

package com.hanul.study;

public class SumMachine {
	public int getSum(int num1, int num2) {
		int sum = 0;
		for(int i = num1; i <= num2; i++) {
			sum += i;
		}
		return sum;
	}
}

▲SumMachine.java

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
int num1 = (Integer) request.getAttribute("num1");
int num2 = (Integer) request.getAttribute("num2");
int sum = (Integer) request.getAttribute("sum");
// Object 타입이 리턴되기 때문에 int 타입으로 캐스팅해주어야 한다. 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>누적합 결과</title>
</head>
<body>
첫 번째 수 : <%=num1 %><br />
두 번째 수 : <%=num2 %><br />
누적합 결과 : <%=sum %>
</body>
</html>

▲result.jsp

 

▲Su2Calc.html 작동 화면

 

반응형