-
계산기 서블릿 구현하기 (오류 수정 완)JSP, Servlet 2021. 12. 13. 01:00
동적인 페이지(서버 페이지)의 필요성
사용자가 입력한 숫자를 포함한 웹 페이지를 보내줘야 함 -> 동적으로 만들어야 함
처음이자 마지막으로 동적인 페이지 서블릿으로 직접 만들기import java.io.IOException; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; 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; @WebServlet("/calc") public class Calc extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); String value = request.getParameter("value"); String operator = request.getParameter("operator"); String dot = request.getParameter("dot"); String exp = ""; if(cookies != null) for(Cookie c : cookies) if(c.getName().equals("exp")) { exp = c.getValue(); break; } if(operator != null && operator.equals("=")) { ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); try { exp = String.valueOf(engine.eval(exp)); } catch (ScriptException e) { e.printStackTrace(); } } else if(operator != null && operator.equals("C")) { exp = ""; } else { exp += (value == null) ? "" : value; exp += (operator == null) ? "" : operator; exp += (dot == null) ? "" : dot; } Cookie expCookie = new Cookie("exp", exp); if(operator != null && operator.equals("C")) expCookie.setMaxAge(0); response.addCookie(expCookie); response.sendRedirect("calcpage"); } }
import java.io.IOException; import java.io.PrintWriter; 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; @WebServlet("/calcpage") public class CalcPage extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); Cookie[] cookies = request.getCookies(); String exp = "0"; if(cookies != null) for(Cookie c : cookies) if(c.getName().equals("exp")) { exp = c.getValue(); break; } out.write("<!DOCTYPE html>"); out.write("<html>"); out.write("<head>"); out.write("<meta charset='UTF-8'>"); out.write("<meta name='viewport' content='width=device-width, initial-scale=1.0'>"); out.write("<title></title>"); out.write("<style>"); out.write("input{"); out.write("width: 50px;"); out.write("height: 50px;"); out.write("}"); out.write(".output{"); out.write("width: 50px;"); out.write("background-color: #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 action='calc' 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='operator' value='CE'/></td>"); out.write("<td><input type='submit' name='operator' value='C'/></td>"); out.write("<td><input type='submit' name='operator' value='BS'/></td>"); out.write("<td><input type='submit' name='operator' 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='operator' 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='operator' 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='operator' 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='operator' value='='/></td>"); out.write("</tr>"); out.write("</table>"); out.write("</form>"); out.write("</body>"); out.write("</html>"); } }
오류 내용 : 숫자나 연산을 눌러도 값이 출력되지 않음
이유 : if(c.getName().equals("exp")) 에 "원래 있던 값"을 수정하지 않았음
코딩할 때마다 느끼는 거지만 정말 사소한 거에도 오류가 나니까.. 더 꼼꼼해져야겠다는 생각이 든다
'JSP, Servlet' 카테고리의 다른 글
JSP의 코드 블록 및 내장 객체 (0) 2021.12.16 계산기 프로그램 하나의 서블릿으로 합치기 (오류 수정 완) (0) 2021.12.14 Application, Session, Cookie의 차이점 정리 (0) 2021.12.13 Cookie를 이용해 상태값 유지하기 (0) 2021.12.12 Session 객체로 상태 값 저장하기 (0) 2021.12.12