back-end/서블릿

서블릿 이용 계산기(저장용)

Ryuuu 2021. 6. 29. 23:51

JSP를 학습하기 전 서블릿만 이용해서 계산기를 만들어 보았다.

매우 무식한 방법일지도 모르나 이렇게 하면 JSP사용하는 이유를 나중에 더 알 수 있대서 이렇게 만들었다.

백스페이스나 몇개 귀찮아서 기능 구현 안한거도 있긴하다.

그냥 지울라면 C나 CE누르면 됨

 
package com.ryuuu.web;

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

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.graalvm.polyglot.Context;
@WebServlet("/calc_page")
public class calcpage extends HttpServlet{	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException {
		Cookie[] cookies = req.getCookies();
		PrintWriter out = rsp.getWriter();
		
		//입력 인자들 가지고옴
		String value = req.getParameter("value");
		String op = req.getParameter("oper");
		String dot = req.getParameter("dot");
		
		String exp = "";
		
		//쿠키에 저장한 계산식 가지고옴
		if(cookies != null) {
			for (Cookie c : cookies) {
				if(c.getName().equals("exp")) {
					exp = c.getValue();
					break;
				}
			}
		}
		
		// = 누르면 계산
		if(op != null && op.equals("=")) {
			try (Context context = Context.create("js")) {
			    exp = String.valueOf(context.eval("js",exp));
			} catch (Exception e) {
			    System.err.println();
			}
		}
		
		// = 아니면 계산식에 이어줌
		else {
			exp += (value == null)? "" : value;
			exp += (op == null)? "" : op;
			exp += (dot == null)? "" : dot;
		}
		Cookie expCookie = new Cookie("exp", exp);
		if(op != null &&(op.equals("CE") || op.equals("C"))) { 
			expCookie.setMaxAge(0);
		}
		rsp.addCookie(expCookie);
		rsp.sendRedirect("calc_page");
	}

@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException {
	Cookie[] cookies = req.getCookies();
	String exp = "0";
	//계산식 쿠키 가지고옴
	if(cookies != null) {
		for (Cookie c : cookies) {
			if(c.getName().equals("exp")) {
				exp = c.getValue();
				break;
			}
		}
	}
	
	PrintWriter out = rsp.getWriter();
	
	out.write("<!DOCTYPE html>");
	out.write("<html>");
	out.write("<head>");
	out.write("<meta charset=\"EUC-KR\">");
	out.write("<title>calc</title>");
	out.write("<style>");
	out.write("input {");
	out.write("	width:50px;");
	out.write("height:50px");
	out.write("}");
	out.write(".output{");
	out.write("height: 50px;");
	out.write("background: #e9e9e9;");
	out.write("font-size:24px;");
	out.write("font-weight:bold;");
	out.write("text-align: right;");
	out.write("padding: 0px, 5px;");
		
	out.write("}");
	out.write("</style>");
	out.write("</head>");
	out.write("<body>");
	out.write("<form method=\"post\">");
	out.write("<table>");
	out.write("<tr>");
	out.printf("<td class = \"output\" colspan=\"4\">%s</td>",exp);		
	out.write("</tr>");
	out.write("<tr>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"CE\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"C\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"BS\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"/\"></td>");
	out.write("</tr>");
	out.write("<tr>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"7\"></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"8\"></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"9\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"*\"></td>");
	out.write("</tr>");
	out.write("<tr>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"4\"></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"5\"></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"6\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"-\"></td>");
	out.write("</tr>");
	out.write("<tr>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"1\"></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"2\"></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"3\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"+\"></td>");
	out.write("</tr>");
	out.write("<tr>");
	out.write("<td></td>");
	out.write("<td><input type=\"submit\" name = \"value\" value=\"0\"></td>");
	out.write("<td><input type=\"submit\" name = \"dot\" value=\".\"></td>");
	out.write("<td><input type=\"submit\" name = \"oper\" value=\"=\"></td>");
	out.write("</tr>");
	out.write("</table>");
	out.write("</form>");
	out.write("</body>");
	out.write("</html>");
	
	}
	
}