본문으로 바로가기

(Java)계산기 Servlet version

category Java/eclipse 연습 2020. 8. 25. 14:07

calc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기</title>
</head>
<body>
<div align="center">
<!-- 서블릿 버전 계산기 실행을 위해 계산 버튼 클릭시 서블릿 호출 -->
<form id="f1" action="./CalcTest" method="post">
	<h3> 계산기</h3>
	<hr>
	<input type="text" name="num1" width="200" size="5">
	<select name="operator">
		<option value="+" selected> + </option>
		<option value="-"> - </option>
		<option value="*"> * </option>
		<option value="/"> / </option>
	</select>
	<input type="text" name="num2" width="200" size="5">
	<input type="submit" value="계산">
	<input type="reset" value="다시입력">
</form>
</div>
</body>
</html>

web.xml 사용하는 서블릿

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// web.xml 사용하는 방법
public class calcServlet extends HttpServlet {
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// doPost()로 포워딩 하고 있다.
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 변수선언
		int num1, num2 ,result;
		String op;
		// 클라이언트 응답시 전달된 컨텐츠에 대한 mime type과 캐릭터셋 지정
		response.setContentType("text/html; charset=UTF-8");
		// 클라이언트 응답을 위한 출력 스트림 확보
		PrintWriter out = response.getWriter();
		// jsp에서 입력 값을 받아옴
		num1 = Integer.parseInt(request.getParameter("num1"));
		num2 = Integer.parseInt(request.getParameter("num2"));
		op = request.getParameter("operator");
		// calc 메소드 호출로 값을 가져옴
		result = calc(num1, num2, op);
		
		out.println("<HTML>");
		out.println("<HEAD><TITLE>계산 결과</TITLE></HEAD>");
		out.println("<BODY><CENTER>");
		out.println("<H2>계산 결과</H2>");
		out.println("<HR>");
		out.println(num1 + " " + op + " " + num2 + " = " + result);
		out.println("</BODY></HTML>");
	}
// 실제 계산 메소드
	private int calc(int num1, int num2, String op) {
		
		int result = 0;
		
		switch (op) {
		
		case "+":
			result = num1 + num2;
			break;
		case "-":
			result = num1 - num2;
			break;
		case "*":
			result = num1 * num2;
			break;
		case "/":
			result = num1 / num2;
			break;
		}
		
		return result;
	}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>ServletTest</display-name>
    <servlet>
  	<servlet-name>calcServlet</servlet-name>	<!-- 변수명? 별명? -->
  	<servlet-class>calcServlet</servlet-class>	<!--서블릿 클래스명 -->
  </servlet>
  <servlet-mapping>
  	<servlet-name>calcServlet</servlet-name>	<!-- 위에 있는 서블릿 name값으로 서블릿 클래스와 연결하는 용도 -->
  	<url-pattern>/Calc</url-pattern>	<!-- URL에 표시할 이름(혹은 매핑된 경로명?) -->
  </servlet-mapping>  
</web-app>

web.xml 안쓰고 어노테이션 사용하는 서블릿

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;

// web.xml 안쓰는 방법
@WebServlet("/CalcTest")
public class calcServlet2 extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// doPost()로 포워딩 하고 있다.
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 변수선언
		int num1, num2 ,result;
		String op;
		// 클라이언트 응답시 전달된 컨텐츠에 대한 mime type과 캐릭터셋 지정
		response.setContentType("text/html; charset=UTF-8");
		// 클라이언트 응답을 위한 출력 스트림 확보
		PrintWriter out = response.getWriter();
		// jsp에서 입력 값을 받아옴
		num1 = Integer.parseInt(request.getParameter("num1"));
		num2 = Integer.parseInt(request.getParameter("num2"));
		op = request.getParameter("operator");
		// calc 메소드 호출로 값을 가져옴
		result = calc(num1, num2, op);
		
		out.println("<HTML>");
		out.println("<HEAD><TITLE>계산 결과</TITLE></HEAD>");
		out.println("<BODY><CENTER>");
		out.println("<H2>계산 결과</H2>");
		out.println("<HR>");
		out.println(num1 + " " + op + " " + num2 + " = " + result);
		out.println("</BODY></HTML>");
	}
// 실제 계산 메소드
	private int calc(int num1, int num2, String op) {
		
		int result = 0;
		
		switch (op) {
		
		case "+":
			result = num1 + num2;
			break;
		case "-":
			result = num1 - num2;
			break;
		case "*":
			result = num1 * num2;
			break;
		case "/":
			result = num1 / num2;
			break;
		}
		
		return result;
	}

}
반응형