Servlet : 동적 웹 페이지를 만들 때 사용되는 Java 프로그래밍 기술. 서블릿은 웹 요청과 응답의 흐름을 간단한 메소드 호출로 가능하게 해준다.
만약 서블릿이 없다면 개발자들은 HTTP 스펙을 모두 알고있어야하고 순수 HTTP 상태나 response, request를 파싱하고 해석해야할 것이다. 서블릿이 이것을 대신해준다.
1. Request
클라이언트가 서버에 요청을 보낼 때가 있다. 가장 일반적으론 GET요청 등이 있을 것이다.
1. 이 때 쿼리파라미터를 통해 유저아이디나 이름을 보낼수가 있고
2. HTML 폼을 통해 POST로 요청한다. 웹 브라우저가 만들어서 보내는데 쿼리 파라미터로 넘어가는 것과 같다.
3. POST를 통해 바디에 담아서 간다. 보통 json으로 날아온다.
2. Response
클라이언트에게 서버는 여러가지 정보를 넣어서 응답할수가있다. 쿠키, 헤더, 응답코드 등을 설정할 수 있다. 그리고 HTML, JSON, 평문도 담아서 보내는 것이 가능하다.
1. 쿠키, 헤더, 응답코드, 리다이렉트 설정
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setStatus(HttpServletResponse.SC_OK);
response.setHeader("Content-Type", "text/plain; charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");
cookies(response);
PrintWriter printWriter = response.getWriter();
printWriter.println("OK");
redirect(response);
}
// 쿠키 설정
private void cookies(HttpServletResponse response){
Cookie cookie = new Cookie("myCookie", "GOOD");
cookie.setMaxAge(60);
response.addCookie(cookie);
}
// 리다이렉트
private void redirect(HttpServletResponse response) throws IOException {
//response.setStatus(HttpServletResponse.SC_FOUND);
response.sendRedirect("/basic/hello-form.html");
}
}
2. HTML을 클라이언트에 전달
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter printWriter = response.getWriter();
printWriter.println("<html>");
printWriter.println("<body>");
printWriter.println(" <div>안녕하세요.</div> ");
printWriter.println("</html>");
printWriter.println("</body>");
}
}
3. Json 정보로 보내기
@WebServlet(name = "responseJsonServlet", urlPatterns = "/responseJson")
public class ResponseJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setUsername("홍길동");
helloData.setAge(20);
String result = objectMapper.writeValueAsString(helloData);
response.getWriter().println(result);
}
}
기본기가 부족하다는 생각이 들어 서블릿부터 착실히 공부중이다. 다음으로 이제 Spring MVC로 들어가는데 확실히 원천기술의 스택을 보다보니 도움이되는 것 같다.
'Dev > Spring Boot' 카테고리의 다른 글
Spring 새로운 HTTP 클라이언트 - RestClient (0) | 2024.08.13 |
---|---|
Java - Stream 으로 코드 최적화 (0) | 2024.07.17 |
Spring 기초 1) WAS란 무엇인가? (0) | 2024.04.18 |
API 최적화1 - N + 1 문제, Lazy 메커니즘, 패치조인 (0) | 2024.03.19 |
Spring Boot - 로그를 남기는 법 : @SLF4J (0) | 2024.02.28 |