프로그래밍/Servlet, JSP

Servlet - 이클립스에서 작성하기

abfc 2016. 9. 29.
반응형



서블릿에 대해 알아보고 이클립스에서 간단히 작성해볼게요.



- 서블릿이란

서블릿은 자바 플랫폼에서 동적인 웹을 개발할 때 사용하는 기반 기술로서 웹에서 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. 실행 후 웹브라우저에서 결과 확인

- hi로 요청했을 경우 one 패키지에 있는 seo라는 서블릿이 실행되도록 매핑하였습니다. 그렇기때문에 실행 방법은
localhost:포트번호/프로젝트명/요청URL 입니다. 




** 
서블릿에는 JAVA, HTML 모두 작성이 가능합니다. 그래서 HTML로 홈페이지의 기본 틀을 만들어주고 그 안에 내용을 채우는 방식으로 만들어 나갑니다. 하지만 HTML을 서블릿 클래스에 작성하는 건 매우 까다로운 일입니다.
간단한 HTML 소스 정도는 괜찮지만 많은 양의 HTML을 서블릿을 통해 코딩하는 건 몹시 힘들고, 쌍따옴표 하나에도 에러가 나기때문에 비효율적입니다. 그래서 HTML에 JAVA코드를 넣기 위해 JSP가 나오게 됐다고하네요.Servlet과 JSP의 차이


반응형

댓글

💲 추천 글