6월 11일 내용정리 및 추가개인공부
지금쌤...넘 실습위주라 이론이 필요할거 같아서 개인공부 중
1.Servlet 이란?
동적웹은 초기에 Servlet이 동적웹 기능을함
Servlet의 단점을 보완하기 위해서 JSP로 발전함.
서블릿이란 서버쪽에서 실행되면서 클라이언트 요청에따라 동적으로 서비스를 제공하는 자바 클래스이다.

출처:자바 웹을 다루는 기술
2.Servlet의 특징
(1)스레드방식으로 실행됨.
(2)자바로 만들어져 객체지향을 가짐
(3)컨테이너(예,톰캣)에서 실행되며, 종료는 상관없음.
(4)보완기능을 적용하기 쉬움
3.Servlet의계층구조

출처:자바 웹을 다루는 기술
GenericServlet 추상클래스는 Servlet과 ServletConfig 인터페이스를 구현하고
HttpServlet은 GenericServlet을 추상클래스로 상속 받음.
GenericServlet에서 네트워크 통신의 관한 서블릿 기능을 구현하고 있으며
우리는 HTTP프로토콜 서블릿 기능이 있는 HttpServlet클래스를 사용한다.
브라우져에서는 HTTP프로토콜을 사용함...
4.HttpServlet
(1)클라이언트 요청->public servise()호출->protected servise()호출->doXXX()호출
(2)서블릿 생명주기 메서드
브라우져가 요청을 하면 미리구현된 메서드가 자동으로 호출됨
init()초기화
doGet()작업수행
doPost()작업수행
destroy()마무리작업
init()과 destroy()메서드는 생략이 가능하나 doXXX()메서드는 반드시 구현해야한다.
init() 메서드는 최초로 한번만 메모리에 올라가면 그다음 서블릿 부터는 init()를 재사용
5.서블릿 생성과정
사용자정의서블릿클래스 만들기->서블릿생명주기메서드구현->서블릿 매핑작업->웹브라우저에서 서블릿매핑이름으로 요청하기
package study_0610;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/study_00")
public class study_00 extends HttpServlet{
protected void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException {
int num1=20;
int num2=200;
int add=num1+num2;
//PrintWriter은 스트림 이다. 스트림 가져옴.
PrintWriter out=res.getWriter();
out.println("<html><head><title>add</title></head>");
out.println("<body>");
out.println(num1+"+"+num2+"="+add);
out.println("</body>");
out.println("</html>");
}
}
6.서블릿 맵핑을 하는이유
url에 'http://주소:포트번호/프로젝트명/패키지명이 포함된 클래스명'
으로 표시가 되어 있는데, 클래스 이름이 길어지면 불편하고, 클래스명이 그대로 보이기 때문에 보완에도 좋지 못함.
그래서 서블릿 클래스와 짝을 지을수 있는 맵핑이름으로 요청함. 즉 서블릿 클래스에 별명을 지어주는것과 같음.
web.xml에 맵핑코드를 등록 해줘야함
<servlet>
<servlet-name>java내부 별명동일</servlet-name>
<servlet-class>클래스 상대경로</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>java내부 별명동일</servlet-name>
<url-pattern>/url에 보이는 별명</url-pattern>
</servlet-mapping>
7.애너테이션을 이용한 맵핑
위와 같이 web.xml에 직접 맵핑코드를 해주는 방법이 번거로워 아래와같이 애너테이션을 이용하여 맵핑을 해줌
@WebServlet("/url에 보이는 별명")
public class study_00 extends HttpServlet{...}