KoreaIt Academy/JSP

[JSP] 서블릿 (Servlet), 서블릿으로 계산기 만들기(두 정수의 사칙연산)

hongeeii 2021. 9. 7.
728x90
반응형

서블릿(Servlet) 

   Java 코드 안에 HTML 코드를 작성할 수 있는 Java 프로그램입니다.
   Thread에 의해 서블릿에 있는 service() 메소드가 호출됩니다.
   전송 방식 요청에 맞게 doGet() 또는 doPost()메소드를 호출합니다.

 

  ※ form에서 전송방식 get과 post의 다른점은

  get방식일 땐 웹 페이지의 주소창에 내가 입력한 쿼리스트링이 그대로 보이게 됩니다.

  따라서 보안적으로 post방식을 사용하는것이 좋습니다.

 

servlet을 만들어 보겠습니다.

servlet은 JAVA프로그램이므로 JavaResources에 있는 src폴더에 생성해줍니다.

위의 URL mappings는 웹사이트 주소경로를 설정해 줍니다.

 

위와 같이 생성이 됩니다.

@WebServlet 어노테이션은 위에서 설정한 url mappings에 따라 test로 되어있는것을 볼 수 있고,

  전송 방식 요청에 맞게 doGet() 또는 doPost()메소드를 호출된것을 볼 수 있습니다.

실행을 해 보면 URI 가 test인것을 볼 수 있습니다.

 

 

 

서블릿 실습 

[계산기 만들기 실습]
1. calc.jsp, Oper.java(서블릿), Calc.java(클래스) 생성
2. calc.jsp에서 input태그로 수식 통채로를 입력받고 action은 Oper 서블릿으로 설정해준다.
3. Calc.java 클래스에 사칙연산 메소드를 정의하고 모두 두 정수를 전달받은 후 int로 리턴해준다.
4. 나눗셈 메소드에서는 분모가 0일 경우를 처리하지 않고 Oper.java 서블릿에서 나눗셈 메소드 사용 시 예외를 처리한다.
5. Oper.java 서블릿에서 전달받은 수식을 분석한 후 사칙연산 연산자에 맞게 Calc.java의 메소드를 호출하여 결과를 응답한다.
※ request.getParameter("태그의 name 속성 값")으로 전달받은 값을 가져올 수 있다.
※ 연산자를 split()으로 분리할 때에는 split("\\" + 연산자)로 사용해야 분리된다.
※ 잘못 입력했을 때와 0으로 나눌 때 모두 예외처리를 사용하여 알맞는 메세지를 출력해준다.
6. Oper.java 서블릿에서 calc.jsp로 돌아갈 때에는 calc.jsp가 아닌 calc로 이동할 수 있도록 web.xml에서 servlet을 설정한다.

 

1. calc.jsp

1

 

2. Oper.java(서블릿)

package com.koreait.servlet;

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;

/**
 * Servlet implementation class Oper
 */
@WebServlet("/Oper")
public class Oper extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Oper() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		String input = request.getParameter("input");
		String[] deli;
		int result=0;
		if(input.contains("+")) {
			deli = input.split("\\+");
			 result=Calc.plus(Integer.parseInt(deli[0]), Integer.parseInt(deli[1]));
		}else if(input.contains("-")) {
			deli = input.split("\\-");
			 result=Calc.minus(Integer.parseInt(deli[0]), Integer.parseInt(deli[1]));
			
		}else if(input.contains("*")) {
			
			deli = input.split("\\*");
			 result=Calc.multi(Integer.parseInt(deli[0]), Integer.parseInt(deli[1]));
		}else if(input.contains("/")) {
			deli = input.split("\\/");
			try {
				 result=Calc.sub(Integer.parseInt(deli[0]), Integer.parseInt(deli[1]));
			}catch(Exception e) {
				out.println("0은 입력될수 없습니다.");
			}
		}
		
		out.print("<html><body> result="+result);
		out.print("<a href='Calc'>계산기로 돌아가기</a></body></html>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

 

 

3. Calc.java (메소드를 담은 클래스)

package com.koreait.servlet;

public class Calc {
	public static int plus(int x, int y) {
		return x+y;
	}
	public static int minus(int x, int y) {
		return x-y;
	}
	public static int multi(int x, int y) {
		return x*y;
	}
	public static int sub(int x, int y) {
		return x/y;
	}
}

 

 

실행

 

 

post방식으로 전송

 

get방식으로 전송

잘 되는 것을 볼 수 있습니다.

728x90
반응형

추천 글