프로그래밍/자바, JDBC
뉴렉처 학습(서블릿/JSP) 36강 (계산기 만들기)
현호s
2020. 5. 19. 16:24
반응형
#36강 계산기 서블릿 완성하기
- 쿠키를 이용해서 계산기 만들기 진행.
- 값을 눌러서 post 하게되면 서블릿에서 눌린 내용을 누적해서 쿠키에 저장 후 다시 html에서 저장된 정보를 출력
- 크롬의 경우 쿠키 삭제는 html 문서 실행 한 후 F12로 개발자 도구 진입, 네트워크 클릭 후 calc3 or calcpage 우측클릭, Clear browser cookies 클릭하여 쿠기삭제
- 작업 완료 후 실행 시 계산기가 정상적으로 작동되는 걸 확인할 수 있다.
// 1. calc3.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
input {
width: 50px;
height: 50px;
}
.output {
height: 50px;
background: #e9e9e9;
font-size: 24px;
font-weight: bold;
text-align: right;
padding: 0px, 5px;
}
</style>
</head>
<body>
<form action="calc3" method="post">
<table>
<tr>
<td class="output" colspan="4">3+4</td>
</tr>
<tr>
<td><input type="submit" name="operator" value="CE" /></td>
<td><input type="submit" name="operator" value="C" /></td>
<td><input type="submit" name="operator" value="BS" /></td>
<td><input type="submit" name="operator" value="/" /></td>
</tr>
<tr>
<td><input type="submit" name="value" value="7" /></td>
<td><input type="submit" name="value" value="8" /></td>
<td><input type="submit" name="value" value="9" /></td>
<td><input type="submit" name="operator" value="*" /></td>
</tr>
<tr>
<td><input type="submit" name="value" value="4" /></td>
<td><input type="submit" name="value" value="5" /></td>
<td><input type="submit" name="value" value="6" /></td>
<td><input type="submit" name="operator" value="-" /></td>
</tr>
<tr>
<td><input type="submit" name="value" value="1" /></td>
<td><input type="submit" name="value" value="2" /></td>
<td><input type="submit" name="value" value="3" /></td>
<td><input type="submit" name="operator" value="+" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="value" value="0" /></td>
<td><input type="submit" name="dot" value="." /></td>
<td><input type="submit" name="operator" value="=" /></td>
</tr>
</table>
</form>
</body>
</html>
// 2.calcPage.java
package com.newlecture.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;
@WebServlet("/calcpage")
public class CalcPage extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
String exp = "0";
if(cookies != null)
for(Cookie c : cookies)
if(c.getName().equals("exp")) {
exp = c.getValue();
break;
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("<!DOCTYPE html>");
out.write("<html>");
out.write("<head>");
out.write("<meta charset=\"UTF-8\">");
out.write("<title>Insert title here</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 action=\"calc3\" 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=\"value\" 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>");
}
}
// 3.calc3.java
package com.newlecture.web;
import java.io.IOException;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
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;
@WebServlet("/calc3")
public class Calc3 extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie[] cookies = request.getCookies(); // 쿠키를 읽을 때 request 사용
// 사용자가 입력한 내용
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// 쿠키로 저장하는 작업.
// exp에 누적 진행(아래 중 null이 아닌 값 1가지만 오게됨)
exp += (value == null)?"":value; // value가 null이면 ""빈문자열, 그렇지 않다면 value값을.
exp += (operator == null)?"":operator;
exp += (dot == null)?"":dot;
}
Cookie expCookie = new Cookie("exp", exp);
response.addCookie(expCookie);
response.sendRedirect("calcpage"); // redirect 사용 경로 우회
}
}
반응형