[Servlet]

  • Servlet은 웹프로그래밍에서 클라이언트의 요청을 처리하고 결과를 다시 클라이언트에게 전송하는 JAVA 프로그래밍 기술이다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.httpServlet 클래스를 상속 받는다.

[ Servlet 동작 방식 ]

  1. Client가 접속하면 HTTP Request를 Servlet Container로 전송한다
  2. Request를 받은 Servelet Container는 HTTPServletRequest, HttpServeltResponse 두 객체를 생성한다.
  3. web.xml은 Client가 요청한 URL을 분석하여 어느 서블릿에 대한 Request인지 찾는다
  4. 해당 서블릿에서 service메소드를 호출한 뒤 클라이언트 요청 방식(Get, Post) 에따라 doGet() 또는 doPost()를 호출한다.
  5. doGet() ,doPost()는 동적페이지를 생성한 후 HttpServlet.Response 객체에 응답한다.
  6. 응답이 끝나면 HttpServeltRequest, HttpServletResponse 객체를 소멸한다.

[Servlet URL_Mapping 방식]

1. web.xml 을 이용하는 방법

먼저 프로젝트를 우클릭 한뒤 New - class 를 선택한다

 

 

아래와 같이 입력해준다.

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Hello_xml extends HttpServlet {
private static final long serialVersionUID = 1L;
       
    
    public Hello_xml() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter Writer = response.getWriter();
        response.setContentType("text/html; charset=UTF-8");
        Writer.println("<html>");
        Writer.println("<head><title>XML Mapping</title></head>");
        Writer.println("<body>");
        Writer.println("<h1>XML Mapping<h1>");
        Writer.println("</body></html>");
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
 

Eclipse에서 생성한 dynamic project를 우클릭 하고나서 Java EE Tools - Generate Deployment Descriptor Stub 를 선택해준다.

WebContent/WEB-INF/ 아래에 web.xml 이 생성된 것을 볼 수 있다.

web.xml을 아래와 같이 수정해준다

<?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" version="3.1">
  <display-name>Servlet_Web_Pjt</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>Hello_xml</servlet-name>
      <servlet-class>Hello_xml</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>Hello_xml</servlet-name>
  <url-pattern>/hello_xml</url-pattern>
  </servlet-mapping>
</web-app>
​
 

13 - servlet을 추가하는 부분이다.

14 - Servlet 이름

15 - Servlet class를 설정하는 부분이다 패키지명.클래스 로 입력한다

18 ~ 21 URL을 Mapping 하는 부분이다.

이제 서버를 실행하고 /hello_xml 로 접속해보자.

아래와 같이 URL이 Mapping 된걸 확인 할 수 있다.

2. Annotation을 이용하는 방법

프로젝트 우클릭 new - servlet을 선택해준다

생성된 class를 보면 기본적인 메서드가 생성되어있다

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;


@WebServlet("/Hello_annotation")
public class Hello_annotation extends HttpServlet {
    private static final long serialVersionUID = 1L;
       

    public Hello_annotation() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter Writer = response.getWriter();
        response.setContentType("text/html; charset=UTF-8");
        Writer.println("<html>");
        Writer.println("<head><title>Annotation Mapping</title></head>");
        Writer.println("<body>");
        Writer.println("<h1>Annotation Mapping<h1>");
        Writer.println("</body></html>");
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
 

위의 xml 방식과 다른점은 

7 줄과 13번줄의 어노테이션이 추가된 것 뿐이다

@WebServlet("/~") 은 xml Mapping 방식과 동일하게 /~의 url을 Servlet과 매핑시켜준다

웹 서버를 재시작한뒤 확인해보면 아래와 같은 화면이 나온다

 

+ Recent posts