Servlete 생성과 연결

딱지씨 ㅣ 2023. 3. 25. 13:19

톰캣으로 서블릿 연결 방법

 

1) 서블릿 기반의 웹 어플리케이션인 웹프로젝트 생성

File - New - Dynamic Web Project

 

 

 

2) 톰캣의 servlet-api.jar 클래스 패스를 설정

우클릭 → Bulid Path -> Configure Build Path -> Libraries Tab -> Add External JARs..

 

 

Tomcat 폴더 -> lib/servlet-api.jar

 

서블릿 API는 tomcat 의 servlet-api.jar 라이브러리로 제공 되므로, 클래스 패스를 설정해야 사용할 수 있습니다. 톰캣의 서블릿 api 경로를 라이브러리에 지정 해줍니다.

 

 


연결 준비가 끝났다면 서블릿을 생성합니다. 서블릿의 생성 과정을 간단하게 순서로 정리하면 아래와 같습니다.

 

< 서블릿의 생성과정 >	
1. 사용자 정의 클래스 생성
2. 서블릿 메서드 구현
3. 서블릿 맵핑 작업
4. 웹 브라우저에서 서블릿 맵핑 이름으로 요청

 

1) 사용자 정의 서블릿 클래스를 생성

Java Resources → New → Servlet 패키지와 함께 클래스 생성

 

 

2) 서블릿 메서드 구현하기

  • HttpsServlet : GenericServlet 을 상속 받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행합니다.
  • 초기화 : init() 서블릿 요청시 한번만 호출
  • 작업수행 : doGet() , doPost() 는 둘 중 하나는 필수로 있어야 하며, 서블릿 요청시 매번 호출됩니다. 실제로 클라이언트가 요청하는 작업을 수행
  • 종료 : destrory() 서블릿 기능을 수행하고 메모리에서 소멸될 때 수행

 

 

3) 서블릿 맵핑 작업

프로젝트 우클릭 Java EE Tools -> Generate Deployment Descriptor Stub

 

webapp - WEB-INF 폴더 안에 web.xml 의 파일이 생성된걸 볼 수 있습니다.

 

맵핑 작업은 하단에 위치한 Source 에서 코드를 입력할 수 있습니다.

 

 

4) 웹 브라우저에서 서블릿 맵핑 이름으로 요청

 

 

여기서 Java Resources 에 있는 클래스와 webapp의 html 파일을 서블릿을 통하여 서버 연결을 해주는 코드를 입력합니다.

<!-- 2) 브라우저에서 요청하는 맵핑 이름에 대해서 실제로 기능을 수행하는 서블릿 클래스를 설정한다 -->
<servlet>
   <servlet-name>param</servlet-name> <!-- (response 응답) -->
   <servlet-class>ex03.ParamServlet</servlet-class> <!-- 패키지명.클래스명 -->
</servlet>

   <!-- 1) 런타임시 요청이 들어오면 컨테이너는 <servlet-mapping> 항목을 검색 -->
<servlet-mapping>
   <servlet-name>param</servlet-name><!-- (request 요청) -->
   <url-pattern>/paramServlet</url-pattern><!-- /웹 브라우저에서 요청하는 이름-->
</servlet-mapping>

맵핑 작업에서는 <servlet> <servlet-mapping> 태그를 연결 시켜주기 위해서

servlet-mapping 의 servlet-name과 servlet의 servlet-name 태그와 값이 동일해야합니다.

 

<servlet-mapping>

  <servlet-name> : 요청하는 임의의 클래스명

  <url-pattern> : 웹 브라우저에서 링크란에 보여지는 이름

<servlet>

  <servlet-name> : 요청받은 클래스 명

  <servlet-class> : 응답할 패키지명.클래스명

 


  • Java Resources 의 패키지와 .java
  • webapp의 .html
  • webapp - WEB-INF - web.xml
// method=get , doGet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


// 웹 브라우저에서 전송된 데이터 인코딩 설정
request.setCharacterEncoding("UTF-8"); //정보 request 객체로 


// 전송 데이터 
// - getParameter() 메서드를 사용해서 <input> 태그의 name 속성값으로 전송된 value 를 가져온다.

String name = request.getParameter("userName");
String stnAge = request.getParameter("userAge");
int age = Integer.parseInt(stnAge);

// 응답
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();

.java의 코드는 다음과 같습니다.

  1. doGet : form 태그의 메서드 ‘get’의 형태로 입력된 정보를 받습니다.
  2. request (요청) request.setCharacterEncoding("UTF-8") : request 객체로 받은 데이터 인코딩 설정
  3. request.getParameter() : form 태그안의 input태그의 name의 속성값의 value를 받습니다.

 

.html 의 <form method="get" action="Servlet url"></form>

// 값이 여러개일 때는 배열로 처리합니다. String[] arr = request.getParameterValues("");

  1. Integer.parseInt() : java와 js 언어를 둘 다 사용할 수 있습니다. (정수 타입으로 형변환)
  2. response (응답) response.setContentType() : html 의 타입과 인코딩을 거쳐줍니다.
  3. PrintWriter out = response.getWriter(); : 입력된 데이터를 출력합니다. 아래에 응답 형태의 <html> 코드를 작성합니다.

 

 

별도의 맵핑 과정없이 코드 한줄로 처리할 수도 있습니다.

 * annotation

 - 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다. 

 - 실행시(런타임시) 특정 기능을 실행하도록 정보를 제공한다.

 

// annotation 을 이용해서 서블릿 등록

@WebServlet("/memberServlet") //서버의 맵핑 처리를 한 줄로 입력할 수도 있다.

이상 서블릿의 생성과 과정에 대하여 알아보았습니다.