mojo's Blog

서블릿 프로그래밍 본문

JSP

서블릿 프로그래밍

_mojo_ 2021. 12. 28. 20:52

서블릿 생성

 

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
Comments