기본 구성
@ServletComponentScan
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
@WebServlet(name = "testServlet", urlPatterns = "/test")
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request, response 구현
}
}
Request (header)
// start line 조회
String method = request.getMethod(); // GET
String protocol = request.getProtocol(); // HTTP/1.1
String scheme = request.getScheme(); // http
String requestURL = request.getRequestURL(); // http://localhost:8080/test
String requestURI = request.getRequestURI(); // /test
String queryString = request.getQueryString(); // firstName=Gildong&lastName=Hong
String isSecure = request.isSecure(); // false
// header 조회
Enumeration<String> headerNames = request.getHeaderNames(); // Enumeration(host, accept, ...), header name의 collection
String header = request.getHeader("host"); // header 정보
/* 방법 1.
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String header = request.getHeader(headerName);
}*/
/* 방법 2.
request.getHeaderNames().asIterator()
.forEachRemaining(headerName -> request.getHeader(headerName)); */
// 그외 정보 조회
String serverName = request.getServerName(); // localhost
String serverPort = request.getServerPort(); // 8080
String locales = request.getLocales(); // Enumeration(ko_KR, ko, en_US, en, ...), locale의 collection
String contentType = request.getContentType(); // text/plain
String contentLength = request.getContentLength(); // 6
String characterEncoding = request.getCharacterEncoding(); // UTF-8
String remoteHost = request.getRemoteHost(); // 0:0:0:0:0:0:0:1
String remoteAddr = request.getRemoteAddr(); // 0:0:0:0:0:0:0:1
String remotePort = request.getRemotePort(); // 57451
String localName = request.getLocalName(); // 0:0:0:0:0:0:0:1
String localAddr = request.getLocalAddr(); // 0:0:0:0:0:0:0:1
String localPort = request.getLocalPort(); // 8080
// 쿠키 조회
Cookie cookie = request.getCookies(); // cookie
String cookieName = cookie.getName(); // cookie name
String cookieValue = cookie.getValue(); // cookie value
Request (parameter, body)
// GET, POST(application/x-www-form-urlencoded) 정보 조회
String firstName = request.getParameter("firstName"); // parameterName이 1개일 때
String[] firstNames = request.getParameterValues("firstName"); // parameterName이 중복일 때(2개 이상)
// text/plain 정보 조회
ServletInputStream inputStream = request.getInputStream();
String body = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); // body
// application/json 정보 조회
// controller 안에 private final ObjectMapper objectMapper = new ObjectMapper(); 코드 넣기
// @Getter, @Setter annotation이 있는 JsonData 클래스 만들기
ServletInputStream inputStream = request.getInputStream();
String body = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); // body
JsonData jsonData = objectMapper.readValue(body, JsonData.class); // JSON 오브젝트에 데이터 넣기
Response (header)
// start line 응답
response.setStatus(HttpServletResponse.SC_OK); // status
// header 응답
response.setHeader("Content-Type", "text/plain;charset=utf-8"); // content-type
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // cache
response.setHeader("Pragma", "no-cache"); // cache
response.setHeader("test-header", "test"); // 임의의 헤더 설정
// 그외 응답
response.setContentType("text/plain"); // content-type
response.setCharacterEncoding("utf-8"); // character encoding
response.setContentLength(2); // content length (생략하면 자동생성하므로 주로 쓰이지 않음)
// 쿠키 세팅
// response.setHeader("Set-Cookie", "key=value; Max-Age=300");
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(300);
response.addCookie(cookie);
Response (body)
// Rediect 응답
// response.setStatus(HttpServletResponse.SC_FOUND); // 302 (redirect)
// response.setHeader("Location", "/test.html");
response.sendRedirect("/test.html");
// text/plain 응답
response.setContentType("text/plain"); // text/plain 설정
response.setCharacterEncoding("utf-8"); // utf-8 설정
PrintWriter writer = response.getWriter(); // writer 생성
writer.println("hello!");
// text/html 응답
response.setContentType("text/html"); // text/html 설정
response.setCharacterEncoding("utf-8"); // utf-8 설정
PrintWriter writer = response.getWriter(); // writer 생성
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>hello!</div>");
writer.println("</body>");
writer.println("</html>");
// application/json 응답
response.setHeader("content-type", "application/json"); // application/json 설정
response.setCharacterEncoding("utf-8"); // utf-8 설정
JsonData jsonData = new JsonData(); // JsonData 오브젝트 생성
jsonData.setFirstName("Gildong");
jsonData.setLastName("Hong");
String result = objectMapper.writeValueAsString(jsonData); // {"firstName":"Gildong","lastName":"Hong"}
PrintWriter writer = response.getWriter(); // writer 생성
writer.write(result);
출처: 김영한, 「스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술」, 인프런
'Web > Spring Boot' 카테고리의 다른 글
스프링 MVC 요청과 응답 (0) | 2024.01.05 |
---|---|
스프링 MVC 구조 (0) | 2024.01.05 |
Front Controller 패턴 (0) | 2024.01.04 |
서블릿, JSP을 사용한 MVC 패턴 (0) | 2024.01.04 |
스프링부트 시작하기 (0) | 2024.01.03 |