headerNames = request.getHeaderNames();
+// while (headerNames.hasMoreElements()) {
+// String headerName = headerNames.nextElement();
+// System.out.println(headerName + ": " + request.getHeader(headerName));
+// }
+
+ request.getHeaderNames().asIterator()
+ .forEachRemaining(headerName -> System.out.println(headerName + ": " + headerName));
+
+ System.out.println("--- Headers - end ---");
+ System.out.println();
+ }
+ //Header 편리한 조회
+ private void printHeaderUtils(HttpServletRequest request) {
+ System.out.println("--- Header 편의 조회 start ---");
+ System.out.println("[Host 편의 조회]");
+ System.out.println("request.getServerName() = " +
+ request.getServerName()); //Host 헤더
+ System.out.println("request.getServerPort() = " +
+ request.getServerPort()); //Host 헤더
+ System.out.println();
+ System.out.println("[Accept-Language 편의 조회]");
+ request.getLocales().asIterator()
+ .forEachRemaining(locale -> System.out.println("locale = " +
+ locale));
+ System.out.println("request.getLocale() = " + request.getLocale());
+ System.out.println();
+ System.out.println("[cookie 편의 조회]");
+ if (request.getCookies() != null) {
+ for (Cookie cookie : request.getCookies()) {
+ System.out.println(cookie.getName() + ": " + cookie.getValue());
+ }
+ }
+ System.out.println();
+ System.out.println("[Content 편의 조회]");
+ System.out.println("request.getContentType() = " + request.getContentType());
+ System.out.println("request.getContentLength() = " + request.getContentLength());
+ System.out.println("request.getCharacterEncoding() = " + request.getCharacterEncoding());
+ System.out.println("--- Header 편의 조회 end ---");
+ System.out.println();
+ }
+
+ //기타 정보
+ private void printEtc(HttpServletRequest request) {
+ System.out.println("--- 기타 조회 start ---");
+ System.out.println("[Remote 정보]");
+ System.out.println("request.getRemoteHost() = " +
+ request.getRemoteHost()); //
+ System.out.println("request.getRemoteAddr() = " +
+ request.getRemoteAddr()); //
+ System.out.println("request.getRemotePort() = " +
+ request.getRemotePort()); //
+ System.out.println();
+ System.out.println("[Local 정보]");
+ System.out.println("request.getLocalName() = " +
+ request.getLocalName()); //
+ System.out.println("request.getLocalAddr() = " +
+ request.getLocalAddr()); //
+ System.out.println("request.getLocalPort() = " +
+ request.getLocalPort()); //
+ System.out.println("--- 기타 조회 end ---");
+ System.out.println();
+ }
+}
diff --git a/daun/servlet/src/main/java/hello/servlet/basic/request/RequestParamServlet.java b/daun/servlet/src/main/java/hello/servlet/basic/request/RequestParamServlet.java
new file mode 100644
index 0000000..1196a99
--- /dev/null
+++ b/daun/servlet/src/main/java/hello/servlet/basic/request/RequestParamServlet.java
@@ -0,0 +1,50 @@
+package hello.servlet.basic.request;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.util.Enumeration;
+
+/**
+ * 1. 파라미터 전송 기능
+ * http://localhost:8080/request-param?username=hello&age=20
+ *
+ * 2. 동일한 파라미터 전송 가능
+ * http://localhost:8080/request-param?username=hello&username=kim&age=20
+ */
+
+@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
+public class RequestParamServlet extends HttpServlet{
+
+ @Override
+ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ System.out.println("[전체 파라미터 조회] - start");
+
+ request.getParameterNames().asIterator()
+ .forEachRemaining(paramName -> System.out.println(paramName +
+ "=" + request.getParameter(paramName)));
+
+ System.out.println("[전체 파라미터 조회] - end");
+ System.out.println();
+
+ System.out.println("[단일 파라미터 조회]");
+ String username = request.getParameter("username");
+ System.out.println("request.getParameter(username) = " + username);
+
+ String age = request.getParameter("age");
+ System.out.println("request.getParameter(age) = " + age);
+ System.out.println();
+
+ System.out.println("[이름이 같은 복수 파라미터 조회]");
+ String[] usernames = request.getParameterValues("username");
+ for(String name : usernames){
+ System.out.println("username = " + name);
+ }
+
+ response.getWriter().write("ok");
+ }
+}
diff --git a/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseHeaderServlet.java b/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseHeaderServlet.java
new file mode 100644
index 0000000..2c297b7
--- /dev/null
+++ b/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseHeaderServlet.java
@@ -0,0 +1,60 @@
+package hello.servlet.basic.response;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
+public class ResponseHeaderServlet extends HttpServlet {
+ @Override
+ protected void service(HttpServletRequest request, HttpServletResponse
+ response)
+ throws ServletException, IOException {
+ //[status-line]
+ response.setStatus(HttpServletResponse.SC_OK); //200
+ //[response-headers]
+ response.setHeader("Content-Type", "text/plain;charset=utf-8");
+ response.setHeader("Cache-Control", "no-cache, no-store, mustrevalidate");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("my-header","hello");
+ //[Header 편의 메서드]
+ content(response);
+ cookie(response);
+ redirect(response);
+
+ //[message body]
+ PrintWriter writer = response.getWriter();
+ writer.println("ok");
+ }
+
+ private void content(HttpServletResponse response) {
+ //Content-Type: text/plain;charset=utf-8
+ //Content-Length: 2
+ //response.setHeader("Content-Type", "text/plain;charset=utf-8");
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("utf-8");
+ //response.setContentLength(2); //(생략시 자동 생성)
+ }
+
+ private void cookie(HttpServletResponse response) {
+ //Set-Cookie: myCookie=good; Max-Age=600;
+ //response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
+ Cookie cookie = new Cookie("myCookie", "good");
+ cookie.setMaxAge(600); //600초
+ response.addCookie(cookie);
+ }
+
+ private void redirect(HttpServletResponse response) throws IOException {
+ //Status Code 302
+ //Location: /basic/hello-form.html
+ //response.setStatus(HttpServletResponse.SC_FOUND); //302
+ //response.setHeader("Location", "/basic/hello-form.html");
+ response.sendRedirect("/basic/hello-form.html");
+ }
+}
diff --git a/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseHtmlServlet.java b/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseHtmlServlet.java
new file mode 100644
index 0000000..221cd77
--- /dev/null
+++ b/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseHtmlServlet.java
@@ -0,0 +1,27 @@
+package hello.servlet.basic.response;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
+public class ResponseHtmlServlet extends HttpServlet {
+ @Override
+ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ //Content-Type : text/html;charset=utf-8
+ response.setContentType("text/html");
+ response.setCharacterEncoding("utf-8");
+
+ PrintWriter writer = response.getWriter();
+ writer.println("");
+ writer.println("
");
+ writer.println(" 안녕?
");
+ writer.println("");
+ writer.println("");
+ }
+}
diff --git a/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseJsonServlet.java b/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseJsonServlet.java
new file mode 100644
index 0000000..e2d26e9
--- /dev/null
+++ b/daun/servlet/src/main/java/hello/servlet/basic/response/ResponseJsonServlet.java
@@ -0,0 +1,31 @@
+package hello.servlet.basic.response;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import hello.servlet.basic.HelloData;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+@WebServlet(name = "reponseJsonServlet", urlPatterns = "/response-json")
+public class ResponseJsonServlet extends HttpServlet {
+
+ private ObjectMapper objectMapper = new ObjectMapper();
+
+ @Override
+ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ //Content-Type : application/json
+ response.setContentType("application/json");
+ response.setCharacterEncoding("utf-8");
+
+ HelloData data = new HelloData();
+ data.setUsername("kim");
+ data.setAge(20);
+
+ //{"username":"kim", "age":20}
+ String result = objectMapper.writeValueAsString(data);
+ response.getWriter().write(result);
+ }
+}
diff --git a/daun/servlet/src/main/resources/application.properties b/daun/servlet/src/main/resources/application.properties
new file mode 100644
index 0000000..efc5ff2
--- /dev/null
+++ b/daun/servlet/src/main/resources/application.properties
@@ -0,0 +1 @@
+logging.level.org.apache.coyote.http11=debug
diff --git a/daun/servlet/src/main/webapp/basic.html b/daun/servlet/src/main/webapp/basic.html
new file mode 100644
index 0000000..148034e
--- /dev/null
+++ b/daun/servlet/src/main/webapp/basic.html
@@ -0,0 +1,41 @@
+
+
+
+
+ Title
+
+
+
+ - hello 서블릿
+
+
+ - HttpServletRequest
+
+
+ - HttpServletResponse
+
+
+
+
+
\ No newline at end of file
diff --git a/daun/servlet/src/main/webapp/basic/hello-form.html b/daun/servlet/src/main/webapp/basic/hello-form.html
new file mode 100644
index 0000000..51362f5
--- /dev/null
+++ b/daun/servlet/src/main/webapp/basic/hello-form.html
@@ -0,0 +1,14 @@
+
+
+
+
+ Title
+
+
+
+
+
diff --git a/daun/servlet/src/main/webapp/index.html b/daun/servlet/src/main/webapp/index.html
new file mode 100644
index 0000000..bfac4bd
--- /dev/null
+++ b/daun/servlet/src/main/webapp/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+ Title
+
+
+
+
+
\ No newline at end of file
diff --git a/daun/servlet/src/test/java/hello/servlet/ServletApplicationTests.java b/daun/servlet/src/test/java/hello/servlet/ServletApplicationTests.java
new file mode 100644
index 0000000..9df6b76
--- /dev/null
+++ b/daun/servlet/src/test/java/hello/servlet/ServletApplicationTests.java
@@ -0,0 +1,13 @@
+package hello.servlet;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class ServletApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}