728x90

서블릿(Servlet) 생성과 생명주기

★ JSP == 서블릿 => Spring
 - @WebServlet("/rollDice2) == @Controller + @RequestMapping
 - 서블릿 : 늦은 초기화 :: 요청이 오면 객체를 만들고 초기화
            loadOnStartup=1 하면 미리 객체를 만들어 놓고 초기화 한다.
   Spring : 빠른 초기화 :: 미리 객체를 만들어 놓고 초기화
   
   
서블릿
HttpServlet : Servlet 인터페이스를 구현한 GenericServlet 추상 클래스를 상속받은 클래스
Servlet : HttpServlet 클래스를 상속받은 자바 클래스
doGet(), doPost() 메소드를 필수적으로 오버라이딩 해야함

doGet() 메소드
GET 방식으로 요청이 들어올 경우 처리할 로직 작성

 

package com.fastB.ch2;

import java.io.IOException;
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")
public class HelloServlet extends HttpServlet {
	
	@Override
	public void init() throws ServletException {
		// 1. 서블릿이 초기화 될때 자동 호출되는 메서드
		System.out.println("[HelloServlet] init() is called");
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 입력 , 처리 , 출력
		System.out.println("[HelloServlet] service() ");
	}

	@Override
	public void destroy() {
		// 뒷정리 작업 -  서블릿이 제거 될때 서블릿 컨테이너에 의해 단 한번만 자동 호출
		System.out.println("[HelloServlet] is destroy");
	}
}
 

[ Servlet - URL 매핑 ]

  • 서블릿의 @WebServlet("/URL") 어노테이션을 사용한 매핑
  • web.xml을 통한 매핑
★ @WebServlet("/URL") 
http://localhost/ch2/login/hello.do
 1.  exact mapping     : @WebServlet("/login/hello.do")
 2.  path mapping      : @WebServlet("/login/*")
 3.  extension mapping : @WebServlet(".do")
 4.  @WebServlet("/")
 5. 매핑이 안되는것은 DispatchServlet이 처리
 
@WebServlet("/URL")의 URL 주소로 접속하면 
톰켓 서버의 컨테이너가 매핑된 서블릿을 찾아 실행해 줍니다. 
  
서블릿 한 개에 여러개의 url 주소를 매핑하려면 아래 코드와 같이 배열 형태로 사용해주면 됩니다.
@WebServlet(urlPatterns = {"/main", "/test", "/join"})
public class Controller extends HttpServlet {
 
 
★ web.xml 환경설정 파일에서 직접 매핑
패키지가 있다면 "패키지명.서블릿 클래스 이름"으로 전체 path를 입력해야 합니다.

<servlet>
    <servlet-name>Name</servlet-name>
    <servlet-class>com.java.example.ClassName</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Name</servlet-name>
    <url-pattern>/class</url-pattern>
</servlet-mapping>

web.xml 내용을 수정한 뒤에는 "publish"를 해줘야 실제 톰캣의 설정 파일과 동기화가 되어
"synchronized" 상태가 됩니다.

[ URL 매핑 주소에서 프로젝트명 생략하기 ]

URL을 매핑하면 "IP(또는 URL):포트/프로젝트 이름/지정한 URL" 형태로 입력할 경우 해당

서블릿 파일(또는 JSP파일)을 실행 합니다. 중간에 프로젝트 이름이 들어가는 것을 생략할 수 있습니다. 

 

이클립스의 server 탭에서 톰캣 서버를 더블 클릭해 Modules 의 path를 /로 수정합니다

 server.xml 파일 에서도 

<Context docBase="test_project" path="/" reloadable="true" source="org.eclipse.jst.jee.server:back_project"/></Host> path를 수정합니다

 


 

728x90

+ Recent posts