mojo's Blog
서블릿 프로그래밍 본문
서블릿 생성
1. src/main/java => New => Servlet 을 순서대로 클릭한다.
2. Java package, Class name을 정한 후 Next 버튼을 클릭한다.
3.
(1) Description을 My first servlet 으로 작성한다.
(2) URL mappings을 클릭 후 Edit 버튼을 클릭한다.
(3) Pattern 명을 아래와 같이 /hello 로 변경 후 Ok 버튼을 클릭한다.
(4) Next 버튼을 클릭한다.
4. Finish 버튼을 클릭한다.
5. 완성이다.
서블릿 코드 분석
※ @WebServlet 애너테이션
@WebServlet(description = "My first servlet", urlPatterns = { "/hello" })
public class HelloWorld extends HttpServlet {
현재 클래스가 서블릿 클래스라는 것을 컨테이너에게 알리기 위해 @WebServlet 애너테이션이 사용된 것을 볼 수 있다.
그리고 어떤 요청에 의해 서블릿을 호출할 것인지 결정하는 Url mapping 부분도 urlPatterns 속성으로 지정되어 있다.
※ doGet()
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
GET 요청을 처리하는 메서드로 request, response를 인자로 한다.
ServletException과 IOException을 throws 하고 있기 때문에 호출하는 쪽에서 예외 처리를 해야 한다.
response.getWriter() : java.io.printWriter 클래스 타입의 객체를 리턴한다.
request.getContextPath() : 웹 애플리케이션 경로를 리턴하는 메서드이다.
※ doPost()
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
Post 요청을 처리하는 메서드로 단순히 doGet()을 호출하도록 되어 있다.
REST API 구현이 아닌 일반 서블릿 구현이라면 GET, POST를 내부적으로 동일하게 처리한다.
GET, POST를 구분해 처리해야 할 경우 별도의 코드로 구성할 수 있다.
package ch05;
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;
/**
* Servlet implementation class HelloWorld
*/
@WebServlet(description = "My first servlet", urlPatterns = { "/hello" })
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.append("<!doctype html><html><head><title>Hello World Servlet</title></head><body>")
.append("<h2>Hello World !!</h2><hr>")
.append("현재 날짜와 시간은: "+java.time.LocalDateTime.now())
.append("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
계산기 구현
calcForm.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Simple Calculator</title>
</head>
<body>
<h2>계산기 서블릿</h2>
<hr>
<form method="post" action="/jwbook/calc">
<input type="text" name="n1" size="10"> <select name="op">
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select> <input type="text" name="n2" size="10">
<input type="submit" value="실행">
</form>
</body>
</html>
CalcServlet.java
package ch05;
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;
/**
* Servlet implementation class CalcServlet
*/
@WebServlet(description = "My second servlet", urlPatterns = { "/calc" })
public class CalcServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CalcServlet() {
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
int n1 = Integer.parseInt(request.getParameter("n1"));
int n2 = Integer.parseInt(request.getParameter("n2"));
String op = request.getParameter("op");
long result = 0;
switch(request.getParameter("op")) {
case "+" : result = n1 + n2; break;
case "-" : result = n1 - n2; break;
case "*" : result = n1 * n2; break;
case "/" : result = n1 / n2;
}
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.append("<html><body><h2>계산기 서블릿</h2><hr>")
.append("계산 결과 " +result + "</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
'JSP' 카테고리의 다른 글
JSP 프로그래밍 (0) | 2021.12.29 |
---|---|
JSP의 기초 (0) | 2021.12.29 |
서블릿의 이해 (0) | 2021.12.28 |
자바 웹 개발 개요 (0) | 2021.12.28 |
ToDo 리스트 앱 만들어보기 (0) | 2021.09.05 |