헬린코린이

[Servlet & JSP] Servlet 본문

Programming/Servlet & JSP

[Servlet & JSP] Servlet

HCD 2022. 12. 28. 20:49

서블릿을 한 줄로 정의하자면

클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다.

쉽게 말해 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다.

 

특징으로는

- 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트

- html을 사용하여 요청에 응답한다.

- Java Thread를 이용하여 동작한다.

- MVC 패턴에서 Controller로 이용된다.

- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.

- UDP보다 처리 속도가 느리다.

- HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

 

html 먼저 보겠습니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


<form action="/day37/CalcServlet" method="post">
<input type="text" name="num1">
		<!-- name==id -->
		<select name="operator">
			<option>+</option>
			<option>-</option>
			<option>x</option>
			<option>/</option>
		</select> <input type="text" name="num2"> <input type="submit"
			value="계산하기">
	
</form>

</body>
</html>

가볍게 계산하는 코드를 작성해보았다.

form의 action을 이용해서 CalcServlet파일을 찾게 한다.

html코드는 이 주제에서 벗어나는 이야기라 하지 않겠다.

 

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 {
       
    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("operator");
      int res=new Calc(num1, num2, op).getRes();
    
      
      response.setContentType("text/html;charset=UTF-8");
      
      PrintWriter out=response.getWriter();
      out.println("<HTML>");
      out.println("<HEAD><TITLE>계산 결과 페이지</TITLE></HEAD>");
      out.println("<BODY><H1>"+num1+" "+op+" "+num2+" = "+res+"</H1></BODY>");
      out.println("</HTML>");
   }

}

html에서 action으로 보내면 이 Servlet으로 와서 doPost를 실행한다.

기본값은 doGet을 실행하지만 어떤 걸 넘겨줘도 다 doPost를 실행하게 만들어 두었다.

request.getParameter();로 html에 name에 지정해두었던 num1을 값으로 가져오는데 반환타입이 String이다

그래서 래퍼클래스를 이용해 int로 명시적형변환을 해주었다.

그리고 모듈화를 통해 Calc클래스를 하나 만들어두었다.

아래에 첨부해 두었다.

Servlet은 보여줘야 할 페이지를 하나하나 작성해줘야 한다.

System.out.println(); 은 콘솔창에 보여주는 것이고

out.println();은 웹 브라우저에 보이는 것이다.

작성한 것은 html의 기본구조 태그들이며 이렇게 하나하나 출력해주면 페이지에서는 h1태그 안에 쓰인 것만

보일 것이다. 이렇게 짧아서 이 정도지 만약 html이 1000줄 2000줄이면... 설명은 생략하겠다.

그래서 나온 것이 jsp인데 그건 다음에 알아보도록 하겠다.

이렇게 코드를 작성한다면 원하는 결괏값이 페이지에 나올 것입니다.

package test;

public class Calc {
	private int res;
	
	public int getRes() {
		return res;
	}

	public Calc(int num1, int num2, String op) {
		  if(op.equals("+")) {
		         res=num1+num2;
		      }
		      else if(op.equals("-")) {
		         res=num1-num2;
		      }
		      else if(op.equals("x")) {
		         res=num1*num2;
		      }
		      else {
		         res=num1/num2;
		      }
	}
}
Comments