CodeGym/Java Course/๋ชจ๋“ˆ 3/์„œ๋ธ”๋ฆฟ ์‘๋‹ต ํ˜•์„ฑ

์„œ๋ธ”๋ฆฟ ์‘๋‹ต ํ˜•์„ฑ

์‚ฌ์šฉ ๊ฐ€๋Šฅ

3.1 HttpServletResponse ํด๋ž˜์Šค

์„œ๋ธ”๋ฆฟ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ service()์›น ์ปจํ…Œ์ด๋„ˆ๋Š” HttpServletResponse. ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์— ์–ด๋–ค ์‹์œผ๋กœ๋“  ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ ค๋ฉด ์ด ๊ฐœ์ฒด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์‘๋‹ต์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ์ƒํƒœ ํ‘œ์‹œ์ค„(์˜ˆ: 200 OK)
  • ํ—ค๋”
  • ์‘๋‹ต ๋ณธ๋ฌธ

๊ทธ๋ฆฌ๊ณ  ์ˆ˜์—…๋ฐฉ์‹ HttpServletResponse๋„ 3๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค? ๊ฑฐ์˜:

ํ–‰๋™ ์–‘์‹ ์„ค๋ช…
1 void setStatus(int sc) ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
2 void sendError(int sc) ์ง€์ •๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์˜ค๋ฅ˜๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
์‚ผ void sendError(int sc, String msg) ์ง€์ •๋œ ์ฝ”๋“œ ๋ฐ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
4 void addHeader(String name, String value) ์‘๋‹ต ํ—ค๋” ๋ชฉ๋ก์— ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
5 void setHeader(String name, String value) ์‘๋‹ต ํ—ค๋” ๋ชฉ๋ก์˜ ํ—ค๋”๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
6 boolean containsHeader(String name) ํ—ค๋”๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
7 void addCookie(Cookie cookie) ์‘๋‹ต์— ์ฟ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
8 void sendRedirect(String location) ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค๋ฅธ URL๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.
9 String encodeRedirectURL(String url) sendRedirect ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ง€์ •๋œ URL์„ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
10 String encodeURL(String url) ์„ธ์…˜ ID๋ฅผ ํฌํ•จํ•˜์—ฌ ์ง€์ •๋œ URL์„ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
์—ดํ•˜๋‚˜ void setContentType(String type) ๊ฒฐ๊ณผ์˜ MimeType์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
12 void setContentLength(int len) ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๊ธธ์ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
13 void setCharacterEncoding(String charset) ์‘๋‹ต ์ธ์ฝ”๋”ฉ ์„ธํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
14 void setBufferSize(int size) ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
15 boolean isCommitted() ๋ฒ„ํผ๊ฐ€ ์ด๋ฏธ ์‘๋‹ต์— ๊ธฐ๋ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
16 void flushBuffer() ๋ฒ„ํผ์˜ ๋‚ด์šฉ์„ ์‘๋‹ต์— ์”๋‹ˆ๋‹ค.
17 void reset() ๋ฒ„ํผ, ํ—ค๋” ๋ฐ ์‘๋‹ต ์ฝ”๋“œ์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
18 void resetBuffer() ์‘๋‹ต ๋ฒ„ํผ๋ฅผ ์ง€์›๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์˜ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ์‚ฌ์†Œํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌํ•ญ์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฒ„ํผ . ์„œ๋ธ”๋ฆฟ์˜ ์‘๋‹ต์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰์‹œ ์ „์†ก๋˜์ง€ ์•Š๊ณ  ๋ฒ„ํผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ถ€ ๋‹จ๊ณ„์—์„œ(์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ) ๋ฒ„ํผ์— ๊ธฐ๋ก๋œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์žฌ์„ค์ •(์ง€์šฐ๊ธฐ)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. reset() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฒ„ํผ์˜ ๋‚ด์šฉ๋ฟ ์•„๋‹ˆ๋ผ ์‘๋‹ต ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํ—ค๋”๋„ ์ง€์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.2 ๋ฆฌ๋””๋ ‰์…˜()

๋‘ ๋ฒˆ์งธ ์ค‘์š”ํ•œ ์ ์€ ๋ฆฌ๋””๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ์ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค๋ฅธ URL๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋“  ์ด URL์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค sendRedirect.

๊ทธ๋Ÿฌ๋‚˜ ์ค‘์š”ํ•œ ๋‰˜์•™์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. URI๋Š” ์‘๋‹ต ๋ณธ๋ฌธ์— ํ—ˆ์šฉ๋œ ๊ฒƒ๋ณด๋‹ค ๋” ๋„“์€ ๋ฒ”์œ„์˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋จผ์ € URL์„ ์œ ํšจํ•œ ๋ฌธ์ž ์ง‘ํ•ฉ์œผ๋กœ ์ธ์ฝ”๋”ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค sendRedirect(). ์ด๋ฅผ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค encodeRedirectURL(String url). ๊ทธ๊ฑธ ์จ.

๋ฆฌ๋””๋ ‰์…˜ ์˜ˆ:

public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 getWriter() ๋ฉ”์„œ๋“œ

์ด์ œ ํ…์ŠคํŠธ๋ฅผ ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํด๋ž˜์Šค์—๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” HttpServletResponseํŠน์ˆ˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ์žŠ์–ด๋ฒ„๋ฆฐ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์ด๋ฆ„์ด ์žˆ๋Š” ํ•„๋“œ ์œ ํ˜•์ž…๋‹ˆ๋‹ค .getWriter()PrintStreamSystem.out

์ผ๋ถ€ ํ…์ŠคํŠธ๋ฅผ ์„œ๋ธ”๋ฆฟ ์‘๋‹ต์œผ๋กœ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ PrintStream ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค response.getWriter().
  • PrintStream ๊ฐœ์ฒด์— ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์”๋‹ˆ๋‹ค(๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ฒ„ํผ์— ๊ธฐ๋ก๋จ).
  • close()PrintStream์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค .

a๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•˜๊ณ  b๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter โ€œaโ€ and โ€œbโ€ from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");

        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);

            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();

            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}
์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค