mc.thd 2023. 12. 27. 23:52

1. WebArchitecture

  • page ์ด๋™๋ฐฉ๋ฒ•
    • url ์ž…๋ ฅ (get๋ฐฉ์‹)
    • link (get๋ฐฉ์‹)
    • form (get๋ฐฉ์‹)
      • get (get๋ฐฉ์‹)
      • post

์ฆ‰ form์— post๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ GET ๋ฐฉ์‹์ด๋‹ค.

  • Persistence Login = ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ์ง

2. Servlet

  • Servlet = Java + HTML
  • ์ž๋ฐ”์—์„œ ๋ฐฑ์•ค๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” api ๋‘ ๊ฐ€์ง€
    • servlet → ์ž๋ฐ”์•ˆ์— html์ด ํฌํ•จ
    • jsp → html ์•ˆ์— ์ž๋ฐ”๊ฐ€ ํฌํ•จ
  • ์ฒ˜์Œ์— servlet์ด ๋จผ์ € ๋‚˜์˜ด → ์Œ๋”ฐ์˜ดํ‘œ ์•ˆ์— html์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋„ฃ๋Š”๊ฒŒ ๋„ˆ๋ฌด ํž˜๋“ค์–ด → html์— ์ž๋ฐ” ๋„ฃ์œผ๋ฉด ์–ด๋–จ๊นŒ? → jsp ๋“ฑ์žฅ
  • ์™ธํ˜• ์ž์ฒด๊ฐ€ .java
  • ์„œ๋ธ”๋ฆฟ ํŒŒ์ผ์—์„œ ์ƒ์„ฑ์ž ์•ˆ ๋งŒ๋“ค์–ด๋„ ๋จ → init๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ

์›น์—์„œ ๋Œ์•„๊ฐ€๋Š” ์ž๋ฐ”๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด

Interface Servlet

  • Servlet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implements ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†ํ•ด์•ผ ํ•จ

Class GenericServlet

  • GenericServlet ๋ฅผ extends ํ•ด์•ผ ํ•œ๋‹ค.
  • abstract(์ถ”์ƒ) ํด๋ž˜์Šค์ด๋‹ค. public abstract class GenericServlet implements Sservlet, ServletConfig, Serializable
  • ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†ํ•  ํ•„์š”์—†๋‹ค.
  • ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์ธ abstract void service(ServletRequest req, ServletResponse res) ๋ฉ”์†Œ๋“œ ๋งŒ ์ƒ์†ํ•˜๋ฉด ๋œ๋‹ค.
  • ํ•œ๊ธ€๊ณผ ๊ฐ™์€ unicode๊ฐ€ ๋„˜์–ด์˜ฌ ๊ฒฝ์šฐ POST ๋ฐฉ์‹์—์„œ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค (GET๋ฐฉ์‹์€ ๋ฌธ์ œX)
    • tomcat์˜ character set์ด ํ•œ๊ธ€์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒ๋˜๋Š” ๋ฌธ์ œ
    • if๋ฌธ์œผ๋กœ get ๋ฐฉ์‹์ธ์ง€ post ๋ฐฉ์‹์ธ์ง€ ๋งค๋ฒˆ ํ™•์ธํ•ด์ค˜์•ผ ํ•จ
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ํ˜ธ์ถœ ํ•  ๋•Œ ๋งˆ๋‹ค ๋งค๋ฒˆ if๊ฐ€ ๋„๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Œ

Class HttpServlet

  • HttpServlet์„ extends ํ•ด์•ผ ํ•œ๋‹ค.
  • GenericServlet ์„ extends ํ•จ
  • abstract(์ถ”์ƒ) ํด๋ž˜์Šค์ด๋‹ค. public abstract class HttpServlet extends GenericServlet
  • ์˜๋ฏธ์ƒ์˜ ์ถ”์ƒํด๋ž˜์Šค!
    • overrideํ•  ์ถ”์ƒ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋‹ค
    • ๋‚ด๊ฐ€ overrideํ•˜๊ณ  ์‹ถ์€ ๋ฉ”์„œ๋“œ๋งŒ overrideํ•˜๋ฉด ๋œ๋‹ค.
  • doPost, doGet, doDelete, doPut ... ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Œ

  • post๋ฐฉ์‹์—์„œ request๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š”
    request.setCharacterEncoding("utf-8");
    ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. (ํ•œ๊ธ€ ๊นจ์ง ๋ฐฉ์ง€)
  • get๋ฐฉ์‹์—์„œ๋Š” request๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์œ„์™€๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ request.getParameter("username")๊ณผ ๊ฐ™์ด ํ•ด์ค˜๋„ ๋œ๋‹ค.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String userpwd = request.getParameter("userpwd");
        String[] fruit = request.getParameterValues("fruit");

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("    <body>");
        out.println("    Hello Servlet!!");
        out.println("    ์•ˆ๋…• ์„œ๋ธ”๋ฆฟ!");
        out.println(username + "๋‹˜ ๋น„๋ฒˆ์€" + userpwd + "์ด๊ณ  ์ข‹์•„ํ•˜๋Š” ๊ณผ์ผ์€ " + Arrays.toString(fruit) + "์ž…๋‹ˆ๋‹ค");
        out.println("    </body>");
        out.println("</html>");

    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        doGet(request,response);
    }

์„œ๋ธ”๋ฆฟ์˜ ์ƒ์†๊ตฌ์กฐ

GenericServlet, HttpServlet ์˜ ์ฐจ์ด์ ์€ GenericServlet์€ genericํ•œ protocol์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ HttpServlet์€ HTTP protocol๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Servlet Life-Cycle

  • ๋‚ด๊ฐ€ . ์ฐ์–ด์„œ ๋ถ€๋ฅด์ง€ ์•Š์•˜๋Š”๋ฐ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
  • servlet ์ด๋ž€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด Servlet Container๊ฐ€ ์•Œ์•„์„œ ์ƒ์„ฑํ•ด์ค€๋‹ค. (servlet๊ฐ์ฒด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค)
    • (servlet ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ์ž๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)
  • tomcat ์•ˆ์—์„œ ์•Œ์•„์„œ ํ˜ธ์ถœํ•ด์ค€๋‹ค. (Life-Cycle)
  • tomcat์ด ๊บผ์ง€๊ธฐ ์ „์— ๊บผ์ง„๋‹ค (์ •ํ™•ํžˆ๋Š” ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๊ธฐ ์ „)
  • destroy ํ•˜๊ธฐ์ „ ํ•ด์•ผํ•  ๊ฑฐ ํ•˜๊ณ  super.destroy()
  • init ์€ super.init() ํ•˜๊ณ  ๋‚ด๊ฐ€ ํ•  ๊ฑฐ ํ•˜๊ธฐ..
  • tomcat์—์„  init, destroyํ•ด๋„ ํ•˜๋Š” ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•ด๋„ ๋จ..
  • ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ฒ„์— ํ•œ ๊ฐœ๋งŒ ๋งŒ๋“ค์–ด์ง„๋‹ค!
    • ์„œ๋ธ”๋ฆฟ์— ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ณต์œ ๋œ๋‹ค.
    • ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๋Š” WAS๊ฐ€ ๋‹ด๋‹นํ•ด์ค€๋‹ค.
WAS์™€ Servlet Container ?
WAS =  Web Server + Web Container(Sevlet Container) 
์ •์  ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ๋„(Web Server), ์›น ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•ด ๋‚ด๋ถ€ ๋กœ์ง์„ ๊ฑฐ์ณ ๋™์  ํŽ˜์ด์ง€(Web Container)๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋จ.
์ž๋ฐ”๋Š” ์›น ๊ตฌํ˜„ ๊ธฐ์ˆ ๋กœ Servlet๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด Servlet์„ ๊ด€๋ฆฌํ•˜๊ณ  jspํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด Servlet Container์ด๋‹ค!
์ฆ‰ WAS๋Š” Servlet Container๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…