1. Servlet이란?
- 서블릿은 정적인 웹에 동적인 정보 제공을 가능하게 하기 위한 도구이다.
- 서블릿을 이용하기 위해서는 서블릿 컨테이너가 필요한데 여기에서 서블릿 객체를 만들어 관리한다. (ex) 톰캣
- 서블릿 컨테이너는 클라이언트의 요청에 따라 서블릿을 서비스한다.
- 클라이언트의 서블릿 요청 → 컨테이너에서 서블릿이 존재하는지 확인 (없을 경우 서블릿 로딩) → 필요시 데이터베이스 연결 → 서블릿 응답
2. Servlet의 구현
- 서블릿 자체는 자바로 구현하지만, 서블릿 컨테이너에 해당 클래스가 서블릿임을 알려야한다.
- 서블릿은 HttpServlet 클래스를 상속하여 구현하며, 이때 doGet(). doPost() 메서드를 오버라이딩하게 된다.
- doGet()은 HTTP GET 요청을 처리하며, doPost는 HTTP POST 요청을 처리한다.
- doGet()과 doPost()는 파라미터로 HttpServletResponse, HttpServletRequest 객체를 입력받으며 이를 통해 클라이언트의 상호작용에 필요한 메서드를 사용하게 된다.
- 서블릿 등록하기
@WebServlet("/servletTest")
public class servletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
서블릿 3.0에서부터는 자바 애너테이션을 이용하여 등록한다. HttpServlet을 상속하는 것을 확인할 수 있으며, 애너테이션 옆의 괄호는 클라이언트의 어떤 요청에 해당 서블릿을 실행할지 지정하는 것이다.
- doGet() 메서드와 doPost() 메서드
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
3. Servlet의 동작
- 사용자가 Servlet을 요청하면 init() 메서드를 통해 서블릿이 초기화된다.
- 이미 생성되어 있다면 서블릿의 service() 메서드가 수행되며, 이는 doGet()과 doPost()로 분기된다.
- Servlet을 종료해야 할 때는 destroy() 메서드가 사용된다.
4. 다른 Servlet으로 리다이렉션하기
response.sendRedirect("newServlet.jsp")
데이터를 포함하지 않고 바로 리다이렉션하는 경우 'response.sendRedirect()'를 사용하여 리다이렉션한다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("name",name); //"name" 변수에 name 값을 저장한다.
RequestDispatcher dp = request.getRequestDispatcher("member.jsp"); //member.jsp로 리다이렉션한다.
dp.forward(request, response); //이때 request 객체에 저장된 데이터를 forward를 통해 넘겨준다.
}
데이터를 포함해야 할 때는 setArrtibute()를 통해 request 객체에 값을 저장하고 forward() 를 통해 request 객체를 리다이렉션하는 페이지로 넘겨준다. 이때 setAttribute()를 통해 저장한 값은 getAttribute()로 불러올 수 있다.
- 객체 범위와 속성
데이터를 소멸시키지 않고 유지하는 방법에 대해서 조금 더 자세히 알아보자.
page 영역 | 하나의 JSP 페이지에서 객체를 공유 |
request 영역 | 클라이언트의 요청에 응답하기까지 객체를 공유 (포워드 된 페이지까지 공유) |
session 영역 | 클라이언트가 접속한 후 웹페이지를 닫을 때까지 공유 |
application 영역 (webcontext) |
웹 애플리케이션이 종료될 때까지 공유 |
객체가 유지되는 범위는 크게 위 네 가지로 나눌 수 있으며, 객체 속성 저장 및 참조에 아래 메서드를 사용한다.
request.setAttribute(String name, Object o); //값이 Object 타입으로 저장되므로 불러올 때 강제 형변환이 필요하다.
Object rname = (String) request.getAttribute("name");
위 코드의 'request' 자리에 session, webcontext도 들어갈 수 있다.
'Web' 카테고리의 다른 글
[JSP] JSP란? (0) | 2022.07.21 |
---|