• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

JSP - NewLecture - GET/POST 합치기(계산기 프로그램), MVC model1, MVC model2, EL객체

05 Apr 2021

🔷 NewLecture - GET/POST 합치기, MVC model1, MVC model2, EL객체

✔ GET/POST 합치기(계산기 프로그램)

  • 코드
      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.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;
    
      // get,post 합치기
      @WebServlet("/calculator")
      public class calculator extends HttpServlet {
            
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, 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 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>");
          }
          @Override
          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); // 쿠키삭제(브라우저에서)
              }
                
              expCookie.setPath("/calculator");
                
              // 쿠키로 저장
              response.addCookie(expCookie);
                
              response.sendRedirect("calculator");
                        
            
          }
    
      }
    

▶ 출력 cal

✔ MVC model1

- Model : 출력데이터
- Controller : 입력과 제어를 담당 ( 자바코드 )
- View : 출력담당 (HTML 코드)
- 컨트롤러와 뷰가 물리적으로 분리되지 않은 방식이다

✔ MVC model2

- 컨트롤러와 뷰가 물리적으로 분리된 방식
- Dispatcher를 집중화 한 후의 모델

✔ EL(Expression Language)

- 저장 객체에서 값을 추출해서 출력하는 표현식

EL로이용가능한것

✔ 저장 객체에서 값을 추출하는 순서

- page -> request -> session -> application (EL을 이용해 객체를 출력할 수 있다)
  • 코드(jsp코드)
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
      <!-- ------------------------------- -->
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>spag</title>
      </head>
      <%
          pageContext.setAttribute("result", "hello");
      %>
      <body>
          <%=request.getAttribute("result") %> 입니다.
          ${requestScope.result}<br>
          ${names[1]}<br>
          ${notice.title}<br>
          ${result}<br>
          ${empty param.n ? '값이 비어 있습니다' : param.n}<br>
          ${param.n/2 }<br>
          ${header.accept}
      </body>
      </html>
    
  • 코드 (자바코드 : 출력 코드)
      package newlecture;
    
      import java.io.IOException;
      import java.util.HashMap;
      import java.util.Map;
    
      import javax.servlet.RequestDispatcher;
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
    
      @WebServlet("/spag")
      public class spag extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              int num = 0;
    
              String num_ = request.getParameter("n");
                
              if(num_ != null && !num_.equals(""))
                  num = Integer.parseInt(num_);
                    
              String result;
              if(num %2!=0)
                  result = "홀수";
              else
                  result = "짝수";
                
              request.setAttribute("result", result);
                
              String[] names = {"hyun","ddong"};
              request.setAttribute("names",names);
                
              Map<String, Object> notice = new HashMap<String, Object>();
              notice.put("id", 1);
              notice.put("title", "EL은 좋아요");
              request.setAttribute("notice",notice);
                
                
              // redirect : 현재 작업한것과 상관없이 새로운 요청
              // forward : 현재 작업한 내용을 이어갈 수 있도록 공유
                
              RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp");
                
              dispatcher.forward(request, response);
          }
    
      }
    

▶ 출력 화면 jsp출력



Share Tweet +1