스프링 웹 서블릿

justindevcode·2023년 7월 18일
0

스프링부트

목록 보기
24/39
post-thumbnail

스프링 웹 서블릿


서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고,그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행하면 된다. 하지만 이 과정은 매우 번거롭다.

스프링 부트는 톰캣 서버를 내장하고 있으므로, 톰캣 서버 설치 없이 편리하게 서블릿 코드를 실행할 수 있다.

서블릿 동작 코드로 이해

package hello.servlet.basic;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
 @Override
 protected void service(HttpServletRequest request, HttpServletResponse 
response)
 throws ServletException, IOException {
 System.out.println("HelloServlet.service");
 System.out.println("request = " + request);
 System.out.println("response = " + response);
 String username = request.getParameter("username");
 System.out.println("username = " + username);
 response.setContentType("text/plain");
 response.setCharacterEncoding("utf-8");
 response.getWriter().write("hello " + username);
 }
}

구조는 생각보다 간단하다.

url /hello 를 요청하면 해당 HelloServlet이 실행된다.

그중 특별하고 스프링이 미리 해준다는 느낌은
HttpServletRequest request, HttpServletResponse response
객체가 있는데 http요청 해더 바디정보들을 자바에서 쓰기 편하게 파싱해서 주는게
request이고

응답으로 던더줄 http헤더 바디를 우리가 편하게 만들수있도록 미리 객체를 만들어 준것이
response이다.

System.out.println("[cookie 편의 조회]");
 if (request.getCookies() != null) {
 for (Cookie cookie : request.getCookies()) {
 System.out.println(cookie.getName() + ": " + cookie.getValue());
 }
 }

이런식으로 객체꺼내듯이 쿠키 꺼낼수도있고

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()); /

각종 로컬정보등등 편하게 꺼낼 수있다.


파라미터값도 이렇게 꺼내면 된다.

복수 파라미터에서 단일 파라미터 조회
username=hello&username=kim 과 같이 파라미터 이름은 하나인데, 값이 중복이면어떻게 될까?
request.getParameter() 는 하나의 파라미터 이름에 대해서 단 하나의 값만 있을때 사용해야 한다.
지금처럼 중복일 때는 request.getParameterValues() 를 사용해야 한다. 참고로 이렇게 중복일 때 request.getParameter() 를 사용하면 request.getParameterValues() 의 첫 번째 값을 반환한다.


응답

response.setContentType("text/html");
 response.setCharacterEncoding("utf-8");
 PrintWriter writer = response.getWriter();
 writer.println("<html>");
 writer.println("<body>");
 writer.println(" <div>안녕?</div>");
 writer.println("</body>");
 writer.println("</html>");

응답도 직관적으로 넣어주면 된다. 굉장히 불편하지만..


스스로의 생각

이전에는 서블릿이 이해가잘 안갔는데 워낙 RUST하게 프로젝트도 많이 하고 node도 사용해보고 다양한 언어를 좀 써보니깐 전반적인 웹 통신을 이해하면서 그냥 http 헤더 바디의 내용들을 전달해줄 뿐이구나 생각이 들었다.

서술하지 않은 세세한 내용이 더 있겠지만 큰 틀에서 오히려 http통신을 더 확실히 이해한것 같다.

profile
("Hello World!");

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기