서블릿에 대해 알아보고 이클립스에서 간단히 작성해볼게요.
- 서블릿이란
서블릿은 자바 플랫폼에서 동적인 웹을 개발할 때 사용하는 기반 기술로서 웹에서 JAVA 프로그래밍을 할 수 있습니다.
사용자에게 요청(Request)을 받아 요청한대로 처리해주는 (doGet() 또는 doPost()) 일을 처리한 후 처리 결과를 사용자에게 응답(Response) 해줍니다.
- 서블릿의 동작 과정
1. 사용자의 URL 요청
- 어떤 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹 서버 측에 URL과 서블릿 클래스를 미리 매핑시켜 놓은 배포서술자가 필요합니다.
배포서술자(DD - Deployment Descriptor) : 웹서버가 알 수 있도록 적어놓은 파일(web.xml)
2. request, response 객체 설정
- 웹 컨테이너는 지금 받은 요청을 처리하기 위해 HTTP 요청을 처리하기 위한 Request 객체와
HTTP응답을 위한 Response 객체를 생성합니다.
3. 서블릿 인스턴스와 스레드 생성
- request, response 객체가 생성된 뒤 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포서술자를 통해 알아냅니다.
- 만일 그 클래스가 웹 컨테이너에서 한 번도 실행된 적이 없거나 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드) init() 메서드를 실행하여 초기화 한 뒤 스레드를 하나 생성합니다.
- 이미 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스에 새로운 스레드만 하나 생성합니다. 각 서블릿 인스턴스는 웹 컨테이너당 하나만 존재하기 때문에 init() 메서드는 각 서블릿 당 한번씩만 호출이 됩니다.
4. service() 메서드 호출과 서블릿 클래스 실행
- 스레드가 생성되면 각 스레드에서 service() 메서드가 호출됩니다.
- service() 메서드가 호출되면 HTTP요청 방식이 GET방식일 경우 서블릿 클래스의 doGet() 메서드가, POST 방식일 경우 doPost() 메서드가 request, response 객체를 인자로 자동으로 호출됩니다.
5. 응답과 스레드의 소멸
- doGet() 또는 doPost() 메서드가 호출되어 사용자의 요청에 따른 동적인 웹페이지를 생성하면 그 결과물이 담긴 response객체를 웹 컨테이너가 HTTP응답(Response) 형태로 바꾸어 웹 서버로 전송하게 됩니다. 그리고 사용이 끝난 Request와 Response 객체를 소멸시키고 스레드를 종료합니다.
실행순서 정리 클라이언트 1. URL 요청 웹서버 2. 요청된 서블릿 확인 후 컨테이너로 요청 컨테이너 3. 컨테이너에서 request와 response 생성 후 web.xml(배포서술자)을 참조하여 해당 서블릿의 스레드 생성 후 service 메서드 호출 4. service() 메서드에서는 요청 방식에 따라 doGet() 또는 doPost() 메서드 호출 5. doGet() 또는 doPost() 메서드에서 응답 생성
|
- 이클립스에서 간단하게 서블릿 작성하기(*이전 포스팅에서 생성한 프로젝트를 사용하였습니다.)이전 포스팅
1. 서블릿 생성 및 코드 작성
2. URL과 서블릿 매핑(Mapping)하기
3. 실행 후 웹브라우저에서 결과 확인
순서로 진행됩니다.
1. 서블릿 생성 및 코드 작성
1-1 이전 포스팅에서 생성한 hello 프로젝트 우클릭 - New - Servlet 클릭
1-2 패키지 이름은 one, 클래스 이름은 seo 라고 설정하였습니다. (참고로 클래스명 맨 앞 글자는 대문자로 표기하는게 좋습니다.)
1-3 Next
1-4 서블릿 클래스 생성 시 옵션들입니다. doPost는 사용하지 않고 doGet만 사용할거지만 상관 없으니 둘 다 체크할게요.
1-5 아까 설정한대로 one이라는 패키지에 seo라는 서블릿이 생성되었습니다.
1-6 doGet 메서드에 간단하게 소스 코드를 추가합니다.
seo.java 소스 - 전체 부분입니다. 추가 부분만 직접 작성 시 import 주의하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package one; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class seo */ @WebServlet("/seo") public class seo extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public seo() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html;charset=euc-kr"); PrintWriter out=response.getWriter(); out.println("<html>"+"<body>"+"<h1>서블릿 간단 작성 예제입니다. </h1> "+"</body>"+"</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } | cs |
2. URL과 서블릿 매핑(Mapping)하기
2-1 해당 프로젝트 내 web.xml을 열어 소스를 수정합니다.
- 사용자가 웹페이지 도메인을 www.~~~/hi 를 입력(요청) 하면
- web.xml 또는 DD라 불리는 파일에서 /hi라는 이름으로 요청이 왔는데 어떤 서블릿을 보여주면 되는지 검색을 합니다.
- ServletTest라는 이름으로 서로 매핑되어있습니다. /hi로 요청이 오면 one.seo 라는 서블릿으로 연결해서 보여줄 수 있도록 web.xml에 설정 하였습니다.
web.xml 소스 - 전체 부분입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>hello</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ServletTest</servlet-name> <servlet-class>one.seo</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletTest</servlet-name> <url-pattern>/hi</url-pattern> </servlet-mapping> </web-app> | cs |
3. 실행 후 웹브라우저에서 결과 확인
'프로그래밍 > Servlet, JSP' 카테고리의 다른 글
톰캣과 이클립스를 연동한 후 jsp파일 작성하기 (1) | 2016.09.29 |
---|---|
아파치와 톰캣을 같이 사용하는 이유 (0) | 2016.09.29 |
JSP 웹 프로그래밍 기초 (0) | 2016.09.28 |
댓글