โข
Servlet
โข
์น ์ปจํ
์ด๋ - Tomcat
โข
์๋ธ๋ฆฟ ์๋ช
์ฃผ๊ธฐ
โข
์์ฒญ ๊ฒฝ๋ก ๋งคํ
โข
์์ฒญ ์ฒ๋ฆฌ
โข
์๋ต ์ฒ๋ฆฌ
โข
ํ์ด์ง ์ด๋
โฆ
RequestDispatcher
โฆ
HttpServletResponse
Servlet (์๋ธ๋ฆฟ)
Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์น ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ์ํ ๊ธฐ์
โข
์น ์๋ฒ์ ์ํธ ์์ฉํ์ฌ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ
โข
์น ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ฒ ์ธก ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ
โข
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์๋ค์ด๊ณ , ๊ทธ ์์ฒญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๊ฑฐ๋ ๋ค์ํ ๊ณ์ฐ์ ์ํํ์ฌ ๋์ ์ผ๋ก HTML์ ์์ฑ
HttpServlet ํด๋์ค๋ฅผ ์์ํ ์๋ฐ ํด๋์ค
์๋ธ๋ฆฟ์ ๋ณดํต Java ์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ(์: Apache Tomcat, Jetty)์์ ์คํ๋๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋์์ ์ ์ดํฉ๋๋ค.
์น ์ปจํ ์ด๋(์๋ธ๋ฆฟ ์ปจํ ์ด๋)
์น ์ปจํ
์ด๋๋ ์๋ธ๋ฆฟ๊ณผ JSP(JavaServer Pages) ๊ฐ์ ์น ์ปดํฌ๋ํธ๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์
โข
์ฃผ๋ก ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ฒ ์ธก ๋ก์ง์ ์ฒ๋ฆฌ
โข
Servlet๊ณผ JSP ์ฝ๋๋ฅผ ์คํํ๊ณ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์๋ค์ด๊ณ ์๋ต์ ์์ฑ
ex) Tomcat
Tomcat
์น ์๋ฒ ๋ฐ ์๋ธ๋ฆฟ ์ปจํ
์ด๋
Java ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด
์ฃผ์ ๊ธฐ๋ฅ
โข
์๋ธ๋ฆฟ ์ปจํ
์ด๋
โข
์ ์ ๋ฐ ๋์ ์น ์ฝํ
์ธ ์ ๊ณต
โข
์น ์๋ฒ
โข
์น ์ ํ๋ฆฌ์ผ์ด์
ํธ์คํ
์๋ธ๋ฆฟ ์๋ช ์ฃผ๊ธฐ
โข
๋ก๋ฉ ๋จ๊ณ
โข
์ด๊ธฐํ ๋จ๊ณ
โข
์คํ ๋จ๊ณ
โข
์๋ฉธ ๋จ๊ณ
๋ก๋ฉ ๋จ๊ณ
์ต์ด ์์ฒญ ์, ์๋ก์ด ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์์ฑ
2๋ฒ์งธ ์์ฒญ๋ถํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ค.
์ด๊ธฐํ ๋จ๊ณ
init() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ๋จ๊ณ๋ก, ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ์ต์ด๋ก ํ ๋ฒ ์์ฑ๋ ๋ ์คํ๋๋ค.
๋งค ์์ฒญ๋ง๋ค ์คํ๋์ง ์๊ณ ๊ฐ์ฒด ์์ฑ ์์๋ง ์คํ๋๋ค. ์ด๊ธฐํ ์์
์ ํ๋ ๋ฉ์๋
์คํ ๋จ๊ณ
โข
doGet( )
โข
doPost( )
doGet( )
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ GET ์์ฒญ ๋ฐฉ์์ผ๋ก ์์ฒญ์ด ์์ ๋, ํธ์ถ๋๋ ๋ฉ์๋
doPost( )
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ POST ์์ฒญ ๋ฐฉ์์ผ๋ก ์์ฒญ์ด ์์ ๋, ํธ์ถ๋๋ ๋ฉ์๋
์๋ฉธ ๋จ๊ณ
์๋ธ๋ฆฟ ํด๋์ค๊ฐ ์ฌ์ฉ๋์ง ์์ ๋, ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ก๋ถํฐ ์๋ธ๋ฆฟ์ ์ ๊ฑฐํ๊ธฐ ์ํด์ destroy() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋จ๊ณ
์์ฒญ ๊ฒฝ๋ก ๋งคํ
์์ฒญ ๊ฒฝ๋ก ๋งคํ ๋ฐฉ๋ฒ
โข
web.xml์ ์ฌ์ฉํ ๋งคํ
โข
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ๋งคํ
web.xml์ ์ฌ์ฉํ ๋งคํ
์๋ธ๋ฆฟ์ ์์ฒญ ๊ฒฝ๋ก์ ๋งคํํ๋ ๊ฐ์ฅ ์ ํต์ ์ธ ๋ฐฉ๋ฒ
โข
web.xml
<web-app>
<servlet>
<servlet-name>BoardListServlet</servlet-name>
<servlet-class>com.example.BoardListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BoardListServlet</servlet-name>
<url-pattern>/board/list</url-pattern>
</servlet-mapping>
</web-app>
XML
๋ณต์ฌ
BoardListServlet์ด๋ผ๋ ์๋ธ๋ฆฟ์ /board/list ๊ฒฝ๋ก๋ก ๋งคํํฉ๋๋ค.
/board/list ๊ฒฝ๋ก๋ก ์์ฒญ์ด ์ค๋ฉด BoardListServlet ์ด ์์ฒญ์ ์ ๋ฌ๋ฐ์ต๋๋ค.
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ๋งคํ
Java EE 6 ์ด์ ๋ฒ์ ๋ถํฐ๋ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ์๋ธ๋ฆฟ์ ๋งคํํ๋ ๋ฐฉ๋ฒ
โข
BoardListServlet.java
import javax.servlet.annotation.WebServlet;
// @WebServlet("/board/list")
@WebServlet(name = "BoardListServlet", urlPatterns = {"/board/list"})
public class BoardListServlet extends HttpServlet {
// doGet, doPost, ...
}
Java
๋ณต์ฌ
์์ฒญ ์ฒ๋ฆฌ
HttpServletRequest
: ํด๋ผ์ด์ธํธ์ HTTP ์์ฒญ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
HttpServletRequest ๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ค์ํ ๋ฉ์๋์ ์์ฑ์ ํตํด ์์ฒญ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ฃผ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช
|
getMethod() | HTTP ์์ฒญ ๋ฉ์๋ ๋ฐํ (GET, POST, PUT, ๋ฑ) |
getProtocol() | ํ๋กํ ์ฝ ๋ฐ ๋ฒ์ ์ ๋ณด ๋ฐํ (์: HTTP/1.1) |
getRequestURL() | ์์ฒญ URL ๋ฐํ |
getRequestURI() | ์์ฒญ URI ๋ฐํ (์ปจํ
์คํธ ๊ฒฝ๋ก ํฌํจ) |
getContextPath() | ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ปจํ
์คํธ ๊ฒฝ๋ก ๋ฐํ (๋ฃจํธ ๊ฒฝ๋ก) |
getQueryString() | ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ฐํ (URL์ ? ์ดํ ๋ถ๋ถ) |
getHeader(String name) | ์ง์ ๋ HTTP ํค๋์ ๊ฐ์ ๋ฐํ |
getParameter(String name) | ์ง์ ๋ ์ด๋ฆ์ ์์ฒญ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฐํ |
getParameterMap() | ๋ชจ๋ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋งต ํํ๋ก ๋ฐํ |
getParameterNames() | ๋ชจ๋ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ ๋์ด |
getCookies() | ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ๋ชจ๋ ์ฟ ํค๋ฅผ ๊ฐ์ ธ์ด |
getSession() | ํ์ฌ ์์ฒญ์ ๋ํ ์ธ์
๊ฐ์ฒด๋ฅผ ๋ฐํ |
getRemoteAddr() | ํด๋ผ์ด์ธํธ์ IP ์ฃผ์ ๋ฐํ |
getRemoteHost() | ํด๋ผ์ด์ธํธ์ ํธ์คํธ๋ช
๋ฐํ |
getLocalAddr() | ์๋ฒ์ IP ์ฃผ์ ๋ฐํ |
getLocalPort() | ์๋ฒ์ ํฌํธ ๋ฒํธ ๋ฐํ |
getScheme() | ํ๋กํ ์ฝ ์คํด ๋ฐํ (์: http, https) |
getServerName() | ์๋ฒ ํธ์คํธ๋ช
๋ฐํ |
getServerPort() | ์๋ฒ ํฌํธ ๋ฒํธ ๋ฐํ |
getCharacterEncoding() | ์์ฒญ์ ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฐํ |
getInputStream() | ์์ฒญ์ ์
๋ ฅ ์คํธ๋ฆผ์ ๊ฐ์ ธ์ด |
setAttribute(String name, Object value) | ์์ฒญ ์์ฑ ์ค์ |
getAttribute(String name) | ์์ฒญ ์์ฑ์ ๊ฐ์ ธ์ด |
โข
MyServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("Hello, World!");
// ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฉ์๋๋ฅผ ํ์ธ
String method = request.getMethod();
response.getWriter().println("HTTP ์์ฒญ ๋ฉ์๋: " + method);
// ์์ฒญ ํ๋ผ๋ฏธํฐ ๊ฐ์ ธ์ค๊ธฐ
String paramValue = request.getParameter("paramName");
response.getWriter().println("ํ๋ผ๋ฏธํฐ ๊ฐ: " + paramValue);
// ์์ฒญ URI์ URL ๊ฐ์ ธ์ค๊ธฐ
String requestURI = request.getRequestURI();
response.getWriter().println("์์ฒญ URI: " + requestURI);
StringBuffer requestURL = request.getRequestURL();
response.getWriter().println("์์ฒญ URL: " + requestURL.toString());
// ํน์ HTTP ํค๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
String userAgent = request.getHeader("User-Agent");
response.getWriter().println("User-Agent ํค๋: " + userAgent);
// ํด๋ผ์ด์ธํธ IP ์ฃผ์ ํ์ธ
String remoteAddr = request.getRemoteAddr();
response.getWriter().println("ํด๋ผ์ด์ธํธ IP ์ฃผ์: " + remoteAddr);
}
}
Java
๋ณต์ฌ
โข
๊ฒฐ๊ณผ
Hello, World!
HTTP ์์ฒญ ๋ฉ์๋: GET
ํ๋ผ๋ฏธํฐ ๊ฐ: []
์์ฒญ URI: [/ContextPath/MyServlet]
์์ฒญ URL: [http://localhost:8080//ContextPath/MyServlet]
User-Agent ํค๋: [์ฌ์ฉ์ ์์ด์ ํธ ์ ๋ณด]
ํด๋ผ์ด์ธํธ IP ์ฃผ์: [ํด๋ผ์ด์ธํธ์ IP ์ฃผ์]
Java
๋ณต์ฌ
์๋ต ์ฒ๋ฆฌ
PrintWriter
: ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ ํ์ค ์ถ๋ ฅ ์คํธ๋ฆผ
์ฃผ๋ก ๋ฌธ์์ด, ํ
์คํธ ๋ฐ์ดํฐ, ๋๋ HTML๊ณผ ๊ฐ์ ํ
์คํธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ ์ฌ์ฉ
์ฃผ์ ๊ธฐ๋ฅ
โข
ํ
์คํธ ๋ฐ์ดํฐ ์ถ๋ ฅ
โข
์๋ ์ค ๋ฐ๊ฟ ์ฒ๋ฆฌ
โข
๋ฌธ์ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ
PrintWriter๋ ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์์ HTTP ์๋ต์ ์์ฑํ ๋ ๋๋ ํ
์คํธ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
โข
MyServlet.java
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;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ์๋ต์ ์ฝํ
์ธ ํ์
์ HTML๋ก ์ค์
response.setContentType("text/html");
// PrintWriter๋ฅผ ์ฌ์ฉํ์ฌ HTML ์๋ต์ ์์ฑ
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>My HTML Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello, World from My HTML Servlet!</h1>");
out.println("</body>");
out.println("</html>");
}
}
Java
๋ณต์ฌ
ํ์ด์ง ์ด๋
RequestDispatcher
: ์๋ธ๋ฆฟ ๊ฐ ๋๋ ์๋ธ๋ฆฟ๊ณผ JSP ํ์ด์ง ๊ฐ์ ์์ฒญ๊ณผ ์๋ต์ ์ ๋ฌํ๋ ๊ฐ์ฒด
โข
MyServlet.java
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ๋ฃจํธ ๊ฒฝ๋ก๋ก ์์ฒญ์ ์ ๋ฌํ URL ์ค์
String targetURL = "/NextServlet"; // ํฌ์๋ ๋ฐฉ์์ผ๋ก ์ด๋ํ ๊ฒฝ๋ก
// RequestDispatcher๋ฅผ ์ป์ด์ด
RequestDispatcher dispatcher = request.getRequestDispatcher(targetURL);
// RequestDispatcher๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ๋ฐ ์๋ต์ ๋ค๋ฅธ ์๋ธ๋ฆฟ ๋๋ JSP ํ์ด์ง๋ก ์ ๋ฌ
dispatcher.forward(request, response);
}
}
Java
๋ณต์ฌ
HttpServletResponse
: ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ HTTP ์์ฒญ์ ๋ํ ์๋ต์ ์์ฑํ๊ณ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด
์ฃผ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช
|
setContentType(String type) | ์๋ต ์ฝํ
์ธ ์ ํ(MIME ํ์
) ์ค์ |
addCookie(Cookie cookie) | ํด๋ผ์ด์ธํธ์ ์ฟ ํค ์ถ๊ฐ |
setStatus(int sc) | ์๋ต์ HTTP ์ํ ์ฝ๋ ์ค์ |
sendRedirect(String location) | ํด๋ผ์ด์ธํธ๋ฅผ ๋ค๋ฅธ URL๋ก ๋ฆฌ๋ค์ด๋ ํธ |
setHeader(String name, String value) | ์๋ต ํค๋ ์ค์ |
getWriter() | PrintWriter ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ ์๋ต ๋ด์ฉ ์์ฑ |
getOutputStream() | ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ฐํํ์ฌ ์ด์ง ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ |
setCharacterEncoding(String charset) | ์๋ต ์ฝํ
์ธ ์ ๋ฌธ์ ์ธ์ฝ๋ฉ ์ค์ |
getCharacterEncoding() | ํ์ฌ ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฐํ |
addHeader(String name, String value) | ์๋ต ํค๋ ์ถ๊ฐ |
setIntHeader(String name, int value) | ์ ์ ๊ฐ ํค๋ ์ค์ |
addIntHeader(String name, int value) | ์ ์ ๊ฐ ํค๋ ์ถ๊ฐ |
setDateHeader(String name, long date) | ๋ ์ง ํค๋ ์ค์ |
addDateHeader(String name, long date) | ๋ ์ง ํค๋ ์ถ๊ฐ |
setContentType(String type) | ์๋ต ์ฝํ
์ธ ์ MIME ์ ํ์ ์ค์ |
setBufferSize(int size) | ์ถ๋ ฅ ๋ฒํผ์ ํฌ๊ธฐ ์ค์ |
getBufferSize() | ํ์ฌ ๋ฒํผ ํฌ๊ธฐ ๋ฐํ |
flushBuffer() | ๋ฒํผ์ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ๋ก ํ๋ฌ์ |
reset() | ์๋ต์ ์ฌ์ค์ ํ๊ณ ํค๋, ๋ฒํผ ๋ฑ์ ์ด๊ธฐํ |
resetBuffer() | ๋ฒํผ๋ง ์ด๊ธฐํ |
โข
BoardUpdateServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/board/update")
public class BoardUpdateServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ์์ฒญ ์ฒ๋ฆฌ ๋ก์ง (์๋ต)
// ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ์ํํ๊ณ /board/list ๊ฒฝ๋ก๋ก ์ด๋
response.sendRedirect(request.getContextPath() + "/board/list");
}
}
Java
๋ณต์ฌ