헬린코린이
[Servlet & JSP] Servlet 본문
서블릿을 한 줄로 정의하자면
클라이언트의 요청을 처리하고, 그 결과를 반환하는 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;
}
}
}