JSP

[JSP] 다양한 방식으로 계산기 구현하기 (JSP, Servlet, JAVA, HTML)

코딩 수달 2022. 8. 1. 15:55
728x90
반응형

하기와 같이 4가지 방법으로 웹에서 계산기를 구현해보려고 한다.

1.  JSP 내부에 JAVA 로직을 포함
2.  JSP + 자바 빈즈(외부 JAVA 클래스 파일)
3.  HTML + Servlet
4.  HTML + Servlet + JAVA 클래스 파일

 

1.  JSP 내부에 JAVA 로직을 포함

JSP파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%
int result = 0; // 초기화 필수

if (request.getMethod().equals("POST")) {
   int num1 = Integer.parseInt(request.getParameter("num1"));
   int num2 = Integer.parseInt(request.getParameter("num2"));
   String op = request.getParameter("op");
   if (op.equals("+")) {
      result = num1 + num2;
   } else if (op.equals("-")) {
      result = num1 - num2;
   } else if (op.equals("x")) {
      result = num1 * num2;
   } else if (op.equals("/")) {
      result = num1 / num2;
   }
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 - 1</title>
</head>
<body>

   <h1>계산기</h1>
   <hr>
   <form method="post">
      <input type="text" name="num1"> <select name="op">
         <option>+</option>
         <option>-</option>
         <option>x</option>
         <option>/</option>
      </select> <input type="text" name="num2"> <input type="submit"
         value="계산 결과보기">
   </form>
   <hr>
   <h2>
      계산 결과:
      <%=result%></h2>

</body>
</html>
  • input,select : name 속성
  • form의 submit을 통해 POST 방식으로 '요청'
     요청에 대한 정보는 "request 객체"에 저장되어있음!☆
  • ☆request 객체
       선언, 초기화, 객체화도 한적이없음!
       JSP -> 서블릿으로 변환될때, 자동으로 생성해주는 객체
        == JSP 내장 객체
       ex) request, response, out, session, application, ...
  • 웹에서는 정보들이 모두 String 타입으로 관리됨

 

2.  JSP + 자바 빈즈(외부 JAVA 클래스 파일)

JSP파일 

  • <jsp:useBean id="cb" class="test.CalcBean" />
    <%-- test 패키지에 있는 CalcBean 클래스를 cb 라는 이름으로 객체화 --%>
       CalcBean cb=new CalcBean();\
  • <jsp:setProperty property="*" name="cb"/>
    <%-- cb 라는 이름을 가진 객체의 setter 메서드 자동매핑 호출 --%>
       name 속성의 이름과 객체의 멤버변수명(setter명)을 비교하기때문에 식별자 규칙이 매우 중요
  • <jsp:getProperty property="result" name="cb"/>
       cb.getResult();
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
<jsp:useBean id="cb" class="test.CalcBean"/>
<%-- test 패키지에 있는 CalcBean 클래스를 cb라는 이름으로 객체화 --%>
<%-- CalcBean cb = new CalcBean(); --%>

<jsp:setProperty property="*" name="cb"/>
<%--cb라는 이름을 가진 객체의 setter 매서드 자동매핑 호출 --%>

<%--메서드 호출 --%>
<% cb.calc(); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 -2 </title>
</head>
<body>

<h1>계산기</h1>
<hr>
<form method="post">
   <input type="text" name="num1">
   <select name="op">
      <option>+</option>
      <option>-</option>
      <option>x</option>
      <option>/</option>   
   </select>
   <input type="text" name="num2">
   <input type="submit" value="계산 결과보기">
</form>
<hr>
<h2>계산 결과: <jsp:getProperty property="result" name="cb"/></h2>
<%--cb.getResult --%>

</body>
</html>

JAVA 파일 - setter들을 호출하여 멤버변수를 초기화

package test;

public class CalcBean {
	private int num1;
	private int num2;
	private String op="";
	private int result;
	

	public int getNum1() {
		return num1;
	}
	public void setNum1(int num1) {
		this.num1 = num1;
	}
	public int getNum2() {
		return num2;
	}
	public void setNum2(int num2) {
		this.num2 = num2;
	}
	public String getOp() {
		return op;
	}
	public void setOp(String op) {
		this.op = op;
	}
	public int getResult() {
		return result;
	}
	public void setResult(int result) {
		this.result = result;
	}

	public void calc() {
		if (op.equals("+")) {
			result = num1 + num2;
		} else if (op.equals("-")) {
			result = num1 - num2;
		} else if (op.equals("x")) {
			result = num1 * num2;
		} else if (op.equals("/")) {
			result = num1 / num2;
		}
	}
}

 

3.  HTML + Servlet

HTML 파일 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 - 3</title>
</head>
<body>

<h1>계산기</h1>
   <hr>
   <form method="post" action="/day36/CalcServlet"> <!-- 해당 서블릿을 불러줄 URL을 적어야함 -->
      <input type="text" name="num1"> <select name="op">
         <option>+</option>
         <option>-</option>
         <option>x</option>
         <option>/</option>
      </select> <input type="text" name="num2"> <input type="submit"
         value="계산 결과보기">
   </form>

</body>
</html>

Servlet 파일 

package test;

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

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("/CalcServlet")
public class CalcServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public CalcServlet() {
		super();
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		String op = request.getParameter("op");
		int result=calc(num1,num2,op);		

		PrintWriter out=response.getWriter();
		out.println("<HTML>");
		out.println("<HEAD><TITLE>계산기 - 3 결과화면</TITLE></HEAD>");
		out.println("<BODY><H1>RESULT PAGE</H1>");
		out.println("<HR>");
		out.println(num1+" "+op+" "+num2+" = "+result);
		out.println("</BODY>");
		out.println("</HTML>");
	}
	public int calc(int num1,int num2,String op) {
		int result=0;
		if (op.equals("+")) {
			result = num1 + num2;
		} else if (op.equals("-")) {
			result = num1 - num2;
		} else if (op.equals("x")) {
			result = num1 * num2;
		} else if (op.equals("/")) {
			result = num1 / num2;
		}
		return result;
	}
}

4.  HTML + Servlet + JAVA 클래스 파일

HTML 파일 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 - 4</title>
</head>
<body>

<h1>계산기</h1>
	<hr>
	<form method="post" action="/day36/CalcServlet2">
		<input type="text" name="num1"> <select name="op">
			<option>+</option>
			<option>-</option>
			<option>x</option>
			<option>/</option>
		</select> <input type="text" name="num2"> <input type="submit"
			value="계산 결과보기">
	</form>

</body>
</html>

Servlet 파일

package test;

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

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("/CalcServlet2")
public class CalcServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public CalcServlet2() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		String op = request.getParameter("op");
		
		Calc calc=new Calc(num1,num2,op);
		int result=calc.getResult();		

		PrintWriter out=response.getWriter();
		out.println("<HTML>");
		out.println("<HEAD><TITLE>계산기 - 4 결과화면</TITLE></HEAD>");
		out.println("<BODY><H1>RESULT PAGE</H1>");
		out.println("<HR>");
		out.println(num1+" "+op+" "+num2+" = "+result);
		out.println("</BODY>");
		out.println("</HTML>");
	}

}

JAVA 파일 

package test;

public class Calc {
	int result=0;
	public Calc(int num1,int num2,String op) {
		if (op.equals("+")) {
			result = num1 + num2;
		} else if (op.equals("-")) {
			result = num1 - num2;
		} else if (op.equals("x")) {
			result = num1 * num2;
		} else if (op.equals("/")) {
			result = num1 / num2;
		}
	}
	public int getResult() {
		return result;
	}
}

 

728x90
반응형