κ°μ
μΉ μ ν리μΌμ΄μ μ΄ μΈν°λ· νκ²½μμ λ리 μ¬μ©λκΈ° μμνλ©΄μ, μλ² μΈ‘μμ λμ μΈ μ½ν μΈ λ₯Ό μμ±νκ³ μ¬μ©μ μμ²μ μ²λ¦¬νλ ν¨μ¨μ μΈ λ°©λ²μ΄ νμν΄μ‘μ΅λλ€. μ΄κΈ°μ μΉ μλ²λ μ μ μΈ HTML νμΌμ μ 곡νλ λ° μ£Όλ‘ μ¬μ©λμμΌλ, λμ μΈ λ°μ΄ν°λ₯Ό μ²λ¦¬νκ³ μ¬μ©μ μνΈμμ©μ μ§μνκΈ° μν΄μλ λ 볡μ‘ν κΈ°λ₯μ΄ νμνμ΅λλ€. μ΄λ¬ν μꡬλ₯Ό μΆ©μ‘±μν€κΈ° μν΄ μλ° μλΈλ¦Ώ(Java Servlet)μ΄ κ°λ°λμμ΅λλ€.
μλΈλ¦Ώ(Servlet)μ μλ°λ₯Ό μ¬μ©νμ¬ μΉ μ ν리μΌμ΄μ μ κ°λ°ν λ μλ² μΈ‘μμ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νκ³ μλ΅μ μμ±νλ μλ° νλ‘κ·Έλ¨μ λλ€. μλΈλ¦Ώμ μ£Όλ‘ HTTP μμ²κ³Ό μλ΅μ μ²λ¦¬νλ λ° μ¬μ©λλ©°, μλ° EE (Enterprise Edition) κΈ°μ μ ν΅μ¬ κ΅¬μ± μμ μ€ νλμ λλ€.( Spring MVCμμ Controllerλ‘ μ΄μ©λλ©°, μ¬μ©μμ μμ²μ λ°μ μ²λ¦¬ν νμ κ²°κ³Όλ₯Ό λ°νν©λλ€.)
μλΈλ¦Ώμ μλ° μΈμ΄λ‘ μμ±λ μλ² μΈ‘ νλ‘κ·Έλ¨μΌλ‘, μΉ μλ²μμ μ€νλμ΄ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νκ³ λμ μΈ μ½ν μΈ λ₯Ό μμ±νλ μν μ ν©λλ€. μλΈλ¦Ώμ λ€μν μ΄μ λ€μ ν΅ν΄ κ°λ°μμ μμ μ ν¬κ² λ¨μννκ³ , μΉ μ ν리μΌμ΄μ κ°λ°μ μμ°μ±μ ν₯μμμΌ°μ΅λλ€.
κ°λ°μλ HTTP Request Message λ₯Ό μ§μ νμ± νμκ° μμ΄μ‘μ΅λλ€. μλΈλ¦Ώ APIλ HTTP μμ² λ©μμ§λ₯Ό μλμΌλ‘ νμ±νμ¬ HttpServletRequest κ°μ²΄λ‘ μ 곡νκΈ° λλ¬Έμ λλ€. λν getParameter(), getHeader(), getCookies() λ±κ³Ό κ°μ λ©μλλ₯Ό ν΅ν΄ μ½κ² μμ² λ°μ΄ν°λ₯Ό μΆμΆν μ μμ΅λλ€.
μλΈλ¦Ώμ μΈμ κ΄λ¦¬λ₯Ό μλμΌλ‘ μ²λ¦¬νμ¬, κ°λ°μκ° μ§μ μΈμ IDλ₯Ό μμ±νκ³ κ΄λ¦¬ν νμκ° μμ΅λλ€. HttpSession κ°μ²΄λ₯Ό ν΅ν΄ μΈμ μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ , κ°μ Έμ€λ μμ μ μ½κ² μνν μ μμ΅λλ€.
μλΈλ¦Ώ 컨ν μ΄λλ URL ν¨ν΄κ³Ό μλΈλ¦Ώμ λ§€ννλ κΈ°λ₯μ μ 곡νμ¬, νΉμ URLλ‘ λ€μ΄μ€λ μμ²μ μ μ ν μλΈλ¦ΏμΌλ‘ λΌμ°ν ν©λλ€. μ΄λ κ°λ°μκ° URL λΌμ°ν λ‘μ§μ μ§μ μμ±ν νμλ₯Ό μμ μ€λλ€.
μ΄λ λ― μλΈλ¦Ώμ μ¬μ©νλ©΄ κ°λ°μλ λ 볡μ‘ν λ‘μ§μ μ§μ€ν μ μμΌλ©°, HTTP μμ² μ²λ¦¬, μΈμ κ΄λ¦¬, μμΈ μ²λ¦¬ λ±μ λ°λ³΅μ μ΄κ³ 볡μ‘ν μμ μ μλΈλ¦Ώ 컨ν μ΄λμ λ§‘κΈΈ μ μμ΅λλ€. μΉ μ΄ν리μΌμ΄μ κ°λ°μ μμ°μ±κ³Ό ν¨μ¨μ±μ λμΌ μ μμμ΅λλ€.
μ£Όμ νΉμ§
- HTTP νλ‘ν μ½ μ§μ
- μλΈλ¦Ώμ HTTP μμ²κ³Ό μλ΅μ μ²λ¦¬νκΈ° μν΄ μ€κ³λμμ΅λλ€. μ£Όλ‘ μΉ λΈλΌμ°μ μ κ°μ HTTP ν΄λΌμ΄μΈνΈμ μνΈμμ©ν©λλ€.
- νλ«νΌ λ
립μ±
- μλ° κΈ°λ°μ΄κΈ° λλ¬Έμ λ€μν μ΄μ 체μ μμ λμν©λλ€.
- μλ² μΈ‘μμ μ€ν
- μλΈλ¦Ώμ μΉ μλ²λ μ ν리μΌμ΄μ μλ²μμ μ€νλλ©°, ν΄λΌμ΄μΈνΈμ μμ²μ λ°λΌ λμ μΌλ‘ μ½ν μΈ λ₯Ό μμ±ν©λλ€.
- μΉ μ ν리μΌμ΄μ
μ νμ₯μ±
- μλΈλ¦Ώμ μΉ μ ν리μΌμ΄μ μ κΈ°λ₯μ νμ₯νκ±°λ μλ‘μ΄ κΈ°λ₯μ μΆκ°νλ λ° μ¬μ©λ μ μμ΅λλ€.
μλΈλ¦Ώμ μλͺ μ£ΌκΈ°
μλΈλ¦Ώμ μλͺ μ£ΌκΈ°λ λ€μκ³Ό κ°μ λ¨κ³λ‘ μ΄λ£¨μ΄μ§λλ€
- μλΈλ¦Ώ κ°μ²΄ μμ±
- μΉ μ»¨ν μ΄λ(μ: Tomcat)λ μλΈλ¦Ώ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€. μ΄ λ¨κ³λ μλΈλ¦Ώμ΄ μ²μ μμ²λ λ λ°μν©λλ€.
- μ΄κΈ°ν (init λ©μλ)
- μλΈλ¦Ώ κ°μ²΄κ° μμ±λ ν, init λ©μλκ° νΈμΆλμ΄ μλΈλ¦Ώμ μ΄κΈ°νν©λλ€. μ΄ λ©μλλ μλΈλ¦Ώμ μ΄κΈ°ν λ§€κ°λ³μλ₯Ό μ€μ νκ³ μ΄κΈ°ν μμ μ μννλ λ° μ¬μ©λ©λλ€.
- μμ² μ²λ¦¬ (service λ©μλ)
- μλΈλ¦Ώμ΄ μ΄κΈ°νλ ν, ν΄λΌμ΄μΈνΈμ μμ²μ΄ μμ λλ§λ€ service λ©μλκ° νΈμΆλ©λλ€. μ΄ λ©μλλ HttpServletRequestμ HttpServletResponse κ°μ²΄λ₯Ό λ§€κ°λ³μλ‘ λ°μ μμ²μ μ²λ¦¬νκ³ μλ΅μ μμ±ν©λλ€.
- μ’
λ£ (destroy λ©μλ)
- μλΈλ¦Ώμ΄ λ μ΄μ νμνμ§ μκ² λλ©΄, μΉ μ»¨ν μ΄λλ destroy λ©μλλ₯Ό νΈμΆνμ¬ μλΈλ¦Ώμ μ’ λ£ν©λλ€. μ΄ λ©μλλ μλΈλ¦Ώμ΄ 리μμ€λ₯Ό ν΄μ νκ³ μ 리νλ λ° μ¬μ©λ©λλ€.
μλΈλ¦Ώμ μλͺ μ£ΌκΈ° λ©μλ
- init():
- μλΈλ¦Ώμ΄ μ΄κΈ°νλ λ ν λ² νΈμΆλ©λλ€.
- μ΄κΈ°ν μμ μ μννλ©°, μλΈλ¦Ώμ΄ μμ²μ μ²λ¦¬νκΈ° μ μ νμν μ€μ μ ν©λλ€.
- service():
- ν΄λΌμ΄μΈνΈμ μμ²λ§λ€ νΈμΆλ©λλ€.
- doGet(), doPost(), doPut(), doDelete() λ± HTTP λ©μλμ λ°λΌ μ μ ν λ©μλλ₯Ό νΈμΆν©λλ€.
- destroy():
- μλΈλ¦Ώμ΄ μ’ λ£λ λ ν λ² νΈμΆλ©λλ€.
- 리μμ€λ₯Ό ν΄μ νκ³ μ 리νλ μμ μ μνν©λλ€.
μλΈλ¦Ώ μμ
κ°λ¨ν μλΈλ¦Ώ μμ λ₯Ό λ§λ€μ΄ 보μμ΅λλ€. μ΄ μλΈλ¦Ώμ ν΄λΌμ΄μΈνΈμ GET μμ²μ μ²λ¦¬νμ¬ "Hello, World!" λ©μμ§λ₯Ό μλ΅μΌλ‘ λ°νν©λλ€. μλΈλ¦Ώμ HttpServlet μ μμ λ°μμ λ©μλλ€μ μ¬μ μν΄μ νμ©ν©λλ€.
service() λ©μλλ HttpServlet ν΄λμ€μ μ΄λ―Έ μ μλμ΄ μμΌλ©°, μΌλ°μ μΌλ‘ μλΈλ¦Ώμ ꡬνν λ μ§μ μ¬μ μν νμλ μμ΅λλ€. λμ , HTTP μμ² λ©μλ(GET, POST λ±)μ λ°λΌ κ°κ°μ μμ²μ μ²λ¦¬νλ doGet(), doPost(), doPut(), doDelete() λ±μ λ©μλλ₯Ό μ¬μ μν©λλ€.
1. web.xml νμΌμ μ¬μ©νλ λ°©λ²
μ΄ λ°©μμ μλΈλ¦Ώ 3.0 μ΄μ λ²μ μμ μ¬μ©λλ μ ν΅μ μΈ λ°©λ²μ λλ€. url ν¨ν΄μ μ΄λ Έν μ΄μ μ μ¬μ©νλ κ²μ΄ μλλΌ xml νμΌμ μ€μ ν΄λλ λ°©λ²μ λλ€. κ³Όκ±°μ μ§μ λͺ¨λ μ€μ ν΄μ νμμ΅λλ€. μ μ§λ³΄μκ° νλ λ¨μ λλ¬Έμ μλΈλ¦Ώ 3.0 μ΄νλ‘ μ΄λ Έν μ΄μ μ νμ©ν΄μ μ μνκ² λμ΅λλ€.
public class HelloWorldServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// μλΈλ¦Ώ μ΄κΈ°ν μμ
μν
System.out.println("HelloWorldServlet is being initialized");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// HTTP GET μμ² μ²λ¦¬
response.setContentType("text/html");
response.getWriter().println("<h1>Hello, World!</h1>");
}
@Override
public void destroy() {
// μλΈλ¦Ώ μ’
λ£ μμ
μν
System.out.println("HelloWorldServlet is being destroyed");
}
}
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
2. μ΄λ Έν μ΄μ μ μ¬μ©νλ λ°©λ²
μλΈλ¦Ώ 3.0 μ΄μ λ²μ μμλ μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ μλΈλ¦Ώμ λ§€νν μ μμ΅λλ€. μ΄ κ²½μ° web.xml νμΌμ μλ΅ν μ μμ΅λλ€. μ΄λ μ€μ μ λ κ°λ¨νκ² λ§λ€κ³ , μ½λμ μ€μ μ ν κ³³μμ κ΄λ¦¬ν μ μκ² ν΄μ€λλ€.
@WebServlet("/hello") //μ΄λ
Έν
μ΄μ
μ νμ©νμ¬ url ν¨ν΄μ μ€μ ν΄ μ€ μ μμ΅λλ€.
public class HelloWorldServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// μλΈλ¦Ώ μ΄κΈ°ν μμ
μν
System.out.println("HelloWorldServlet is being initialized");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// HTTP GET μμ² μ²λ¦¬
response.setContentType("text/html");
response.getWriter().println("<h1>Hello, World!</h1>");
}
@Override
public void destroy() {
// μλΈλ¦Ώ μ’
λ£ μμ
μν
System.out.println("HelloWorldServlet is being destroyed");
}
}
μλΈλ¦Ώ λ΄λΆ λμ λ°©μ
- ν΄λΌμ΄μΈνΈ μμ²
- μΉ λΈλΌμ°μ μ κ°μ ν΄λΌμ΄μΈνΈκ° νΉμ URLμ HTTP μμ²μ 보λ λλ€. μ΄ μμ²μ μΉ μ ν리μΌμ΄μ μλ²(μ: Tomcat, Jetty)λ‘ μ§μ μ λ¬λ©λλ€.
- μΉ μ ν리μΌμ΄μ
μλ²μ μμ² μμ
- μΉ μ ν리μΌμ΄μ μλ²λ HTTP μμ²μ μμ νκ³ , ν΄λΉ μμ²μ΄ μλΈλ¦Ώμ μν΄ μ²λ¦¬λμ΄μΌ νλμ§ νμΈν©λλ€.
- μμ²μ΄ μλΈλ¦Ώμ μν΄ μ²λ¦¬λμ΄μΌ νλ€λ©΄, μΉ μ ν리μΌμ΄μ μλ²λ μμ²μ μλΈλ¦Ώ 컨ν μ΄λλ‘ μ λ¬ν©λλ€.
- μλΈλ¦Ώ 컨ν
μ΄λμ μμ² μ²λ¦¬ μ€λΉ
- μλΈλ¦Ώ 컨ν
μ΄λλ μμ²λ URLμ κΈ°λ°μΌλ‘ μ μ ν μλΈλ¦Ώμ μ°Ύμ΅λλ€. μ΄λ₯Ό μν΄ URL λ§€νμ νμΈν©λλ€.
(μμ² λ§€νμ μΉ μ ν리μΌμ΄μ μ€μ νμΌ(web.xml) λλ μ λ Έν μ΄μ (@WebServlet)μ μ¬μ©νμ¬ μ μν©λλ€.)
- μλΈλ¦Ώ 컨ν
μ΄λλ μμ²λ URLμ κΈ°λ°μΌλ‘ μ μ ν μλΈλ¦Ώμ μ°Ύμ΅λλ€. μ΄λ₯Ό μν΄ URL λ§€νμ νμΈν©λλ€.
- HttpServletRequest λ° HttpServletResponse κ°μ²΄ μμ±
- μλΈλ¦Ώ 컨ν μ΄λλ HTTP μμ²μ μ²λ¦¬νκΈ° μν΄ HttpServletRequest λ° HttpServletResponse κ°μ²΄λ₯Ό μμ±ν©λλ€.
- HttpServletRequest κ°μ²΄λ ν΄λΌμ΄μΈνΈ μμ²μ λͺ¨λ μ 보λ₯Ό μΊ‘μννμ¬ μλΈλ¦Ώμκ² μ λ¬ν©λλ€. μ΄ κ°μ²΄μλ μμ² URL, ν€λ, νλΌλ―Έν°, λ©μλ(GET, POST λ±) λ±μ μ λ³΄κ° ν¬ν¨λ©λλ€.
- HttpServletResponse κ°μ²΄λ μλΈλ¦Ώμ΄ μλ΅μ μμ±ν μ μλλ‘ νκΈ° μν΄ μμ±λ©λλ€.
- μλΈλ¦Ώ μΈμ€ν΄μ€ νμΈ λ° μμ±
- μλΈλ¦Ώ 컨ν μ΄λλ μμ²λ μλΈλ¦Ώμ μΈμ€ν΄μ€κ° μ΄λ―Έ μ‘΄μ¬νλμ§ νμΈν©λλ€.
- λ§μ½ μλΈλ¦Ώ μΈμ€ν΄μ€κ° μ‘΄μ¬νμ§ μμΌλ©΄, μλΈλ¦Ώ 컨ν μ΄λλ μλΈλ¦Ώ ν΄λμ€λ₯Ό λ‘λνκ³ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
- μλΈλ¦Ώ μ΄κΈ°ν
- μλΈλ¦Ώ μΈμ€ν΄μ€κ° μ²μ μμ±λ λ, μλΈλ¦Ώ 컨ν μ΄λλ init() λ©μλλ₯Ό νΈμΆνμ¬ μλΈλ¦Ώμ μ΄κΈ°νν©λλ€. μ΄ λ©μλλ μλΈλ¦Ώμ μ΄κΈ°ν μμ μ μνν©λλ€.
- init() λ©μλλ μλΈλ¦Ώμ μλͺ μ£ΌκΈ° λμ ν λ²λ§ νΈμΆλ©λλ€.
- μμ² μ²λ¦¬
- μλΈλ¦Ώ 컨ν μ΄λλ service() λ©μλλ₯Ό νΈμΆνμ¬ ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬ν©λλ€.
- service() λ©μλλ μμ²μ HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ₯Ό νμΈνκ³ , ν΄λΉ λ©μλμ λ§λ λ©μλ(doGet(), doPost(), doPut(), doDelete() λ±)λ₯Ό νΈμΆν©λλ€.
- μλ΅ μμ±
- μλΈλ¦Ώμ μμ²μ μ²λ¦¬ν ν, HttpServletResponse κ°μ²΄λ₯Ό μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈμκ² μλ΅μ μμ±ν©λλ€. μ΄ μλ΅μ μλΈλ¦Ώ 컨ν μ΄λλ₯Ό ν΅ν΄ μΉ μ ν리μΌμ΄μ μλ²λ‘ μ λ¬λ©λλ€.
- μλ΅ μ μ‘
- μΉ μ ν리μΌμ΄μ μλ²λ μλΈλ¦Ώ 컨ν μ΄λλ‘λΆν° λ°μ μλ΅μ ν΄λΌμ΄μΈνΈμκ² μ μ‘ν©λλ€.
- μλΈλ¦Ώ μ’
λ£
- μλΈλ¦Ώμ΄ λ μ΄μ νμνμ§ μκ±°λ μΉ μ ν리μΌμ΄μ μλ²κ° μ’ λ£λ λ, destroy() λ©μλκ° νΈμΆλμ΄ μλΈλ¦Ώμ΄ μ’ λ£λ©λλ€. μ΄ λ©μλλ 리μμ€λ₯Ό ν΄μ νκ³ μ 리νλ μμ μ μνν©λλ€.
λκΈ