🔷 NewLecture - redirection, 계산기프로그램을 이용한 동적페이지 만들기/쿠키삭제하기
✔ redirection
- 서버에서 페이지를 전환해준다
✔ 계산기프로그램을 이용한 동적페이지 만들기/쿠키삭제하기
- 화면출력 코드
package newlecture; 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; /** * Servlet implementation class add */ @WebServlet("/calcpage") public class calcPage extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException { //쿠키 배열변수 선언 Cookie[] cookies = request.getCookies(); // 쿠키 읽어오는 연산식 String exp="0"; if(cookies !=null) { // 쿠키가 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>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 action=\"calc3\" method=\"post\">"); out.write("<table>"); out.write("<tr>"); out.printf( "<td class=\"output\" colspan=\"4\">%s</td>",exp); // 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>"); } }
- 계산코드
package newlecture; import java.io.IOException; import java.io.PrintWriter; 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; /** * Servlet implementation class add */ @WebServlet("/calc3") public class calc3 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public calc3() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(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"); // 쿠키를 만들어 exp로 전달한다 String exp =""; // 쿠키 읽어오는연산식 if(cookies !=null) { // 쿠키가 null이 아닐경우 for(Cookie c : cookies) { // 연산식 실행 if(c.getName().equals("exp")) { exp =c.getValue(); break; } } } if(operator !=null && operator.equals("=")) { // 계산 // javaScript 구문 실행 객체 생성 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); try { exp = String.valueOf(engine.eval(exp)); } catch (ScriptException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else if(operator !=null && operator.equals("C")) { // 쿠키 삭제 : 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); // redirection 기능 : 페이지 이동기능 => +,-연산시 빈페이지 전달받지않음 response.sendRedirect("calcpage"); } }
▶ 출력 화면