servlet의 작성방법과 생명주기
서블릿이란
자바 언어를 사용하여 웹 애플리케이션 만드는 데 사용하는 기술입니다.
서블릿은 주로 서버에서 동작하며 클라이언트의 요청을 처리하고 동적으로 웹 페이지를 생성하고 응답하는 데 사용합니다
웹 서버와 통신하여 클라이언트의 요청을 받아들이고, 이에 대한 응답을 생성하여 다시 클라이언트에게 반환합니다.
이러한 특성으로 인해 서블릿은 동적인 웹 페이지를 생성하고, 데이터베이스와 같은 백엔드 시스템과 통신하여 웹 애플리케이션의 로직을 처리하는 데 유용하게 사용됩니다.
예를 들면 사용자가 로그인을 할때 아이디와 비밀번호를 입력하고 로그인 버튼을 눌렀을 때 정보가 올바른지 확인하고 다음 페이지를 제공하는 데에도 사용할 수 있다.
서블릿 작성방법
버전에 따라 2가지로 나눌수 있다
- 3.0 이상의 버전에서는 web.xml파일 사용하지 않고 자바 어노테이 셔을 이용한다
- 3,0 미만의 버전에서는 web.xml파일 이용한다.
3.0 이상버전 서블릿을 생성하면 이렇게 나타난
이때 주소를 보면 exam31은 프로젝트이름 이고 Ten은 첫 번째 코드에서 동그라민 친 부분을 수정하면 바꿀 수 있다.
3.0 미만 버전에서 서블릿을 생성하면
web.xml이라는 위와 같은 파일이 생긴다 이때 파란 줄로 친 부분이 url뒷부분 주소가 되면
위의 노란색 친부분은 servlet-name 에 적힌 이름과 같은 값을 servlet 태그 내부에서 찾고
servlet-class 는 경로를 나타내는 요소로 exam.tenServlet을 실행시킨다
위 과정을 3.0은 이 노테이션에서 대신해 준다
생명주기
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifecycleServlet() {
super();
System.out.println("LifecycleServlet생성");//콘솔에 출력
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init호출");
}
public void destroy() {
System.out.println("destroy호출");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service호출");
}
}
서블릿은 객체를 만들어 inint() 메서드를 호출하여 서블릿이 초기화됩니다 이 과정은 단 한 번만 이루어집니다
그 후 서블릿이 클라이언트로부터 요청을 받으면 해당 요청에 대해 응답을 생성하고 처리합니다
이 과정에서 service() 메서드가 호출되면 요청방식에 따라 get, post 방식의 메서드를 호출합니다.
그 후 서블릿이 소멸되거나 갱신될 때 destory()를 실행시켜 저장된 메모리를 해제합니다,
여기서 한번 생성되고 난 후에는 새로고침을 눌러도 service만 호출된다
만약 이렇게 수정해 버린고 다시 시작하면
destroy가 호출되면
다시 처음부터 초기화한다
doGet, doPost
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out =response.getWriter();
out.print("<html>");
out.print("<head><title>form</title></head>");
out.print("<body>");
out.print("<form method='post' action='/exam31/LifecycleServlet'>"); //submit 버튼이 눌렸을때 이주소로 요청해주세요 방식은 post이다
out.print("name:<input type='text' name='name'><br>");
out.print("<input type='submit' value='ok'><br>");
out.print("</form>");
out.print("</body>");
out.print("</html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out =resp.getWriter();
String name = req.getParameter("name");//name의 value을 찾아서 출력한다
out.print(name);
out.close();
}
이 코드를 실행하면
이제 코드를 한 줄씩 해석해 보면
response.setContentType("text/html;charset=utf-8");
response은 응답을 위한 객체로 응답의 콘텐츠 타입을 설정합니다
PrintWriter out =response.getWriter();
클라이언트로부터의 응답을 작성하기 위한 PrintWriter 객체를 가져옵니다.
out.print("<form method='post' action='/exam31/LifecycleServlet'>");
//submit 버튼이 눌렸을 때 이 주소로 요청해 주세요 방식은 post이다
out.print("name:<input type='text' name='name'><br>");
텍스트 입력 필드를 출력합니다.
이름은 "name"이며, 사용자가 입력한 데이터는 "name" 매개변수로 전달됩니다.
그다음 post 부분 해석하면 (같은 부분은 제외하겠습니다)
String name = req.getParameter("name");
요청 파라미터에서 name 매개변수의 값을 가져옵니다
out.print(name);
가져온 name을 출력한다
버튼을 누르면
doGet, doPost는 클라이언트가 요청하는 방식에 따라 service에서 위 메서드들 맞게 불러와준다
'자바 공부 > Servlet & Jsp' 카테고리의 다른 글
jsp 로 자바 클래스 사용 (1) | 2024.04.21 |
---|---|
jsp 스코프 (1) | 2024.04.03 |
Jsp란 (0) | 2024.03.27 |
Servlet Request,Response (0) | 2024.03.23 |