1204 | 스프링의 정석 :: 2-13 (서블릿과 JSP)
서블릿과 jsp
: 서블릿과 jsp는 거의 같은 것.
: 서블릿을 발전시킨 것이 스프링
: DispatcherServlet = servlet
✔ JSP = JAVA SERVER PAGE
: 자바로 작성한 서버페이지. 웹서버로 웹브라우저를 다룬다. HTML문서에 내부적으로 자바문법을 사용할 수 있게 하는 스크립트 언어.< html>자바코드작성</html>
✔ JSP 와 스프링의 차이?
: JSP는 화면 처리 영역에서 사용되고, Spring은 프로그램 전반적 환경을 구성: 자바 언어로 웹 사이트를 만들 수 있도록 도와주는 스프링은 MVC 프레임워크
1. 서블릿과 스프링 비교
Servlet | spring |
@webServlet("/sellProduct") // @Controller+@RequestMapping 애너테이션과 동일 public class SellServlet extends HttpServlet{ @override // http서블릿을 상속받아야함 public void service (HttpServletRequest request, HttpServletResponse responsee) throws IOException{ ..이하 코드 동일 |
@Controller Public class Sell{ @RequestMapping("/sellProduct") // 상속없이 가능 public void main(HttpServletResponse response) // 매개변수는 필요한것만 적어주면 됨 throws IOException{ ...이하 코드 동일 |
service메서드와 request, response가 항상 고정 매핑을 클래스에 하기 때문에 클래스를 여러개 만들어야함 |
여러가지면에서 발전된 모습을 보여줌 1. 상속이 없음 2. 매개변수는 필요한것만 적을 수 있음 3. 애너테이션도 나눠서 처리함으로써 메서드에 매핑하면 하나의 클래스에 새로운 메서드를 만들어서 매핑 가능. |
2. 서블릿의 생명주기
@WebServlet("/studySpring")
public class studySpringServlet extends HttpServlet{
@Override
public void init() throws ServletException{
// 서블릿 초기화 - 서블릿이 생성 또는 리로딩 때, 단 한번만 수행.
System.out.println("[studySpringServlet] init()");
}
@Override // 호출될때마다 반복적으로 수행됨
public void service(HttpServletRequest request, HttpServletResponse response){
// 1.입력
// 2.처리
// 3.출력
System.out.println("[studySpringServlet] service()");
}
@override
public void destroy(){
// 뒷정리 작업 - 서블릿이 unload(제거)될때 단 한번만 수행됨.
System.out.println("[studySpringServlet] service()");
}
/* 메서드는 직접 호출하지않고 서블릿 컨테이너가 자동으로 호출을 함.
우리는 서블릿을 만들때 메서드의 내용만 채워주면 됨. */
@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 {
// 1) 입력
// 2) 처리
// 3) 출력
// 2. 요청이 올 때마다 반복적으로 호출
System.out.println("[HelloServlet] service() is called");
}
@Override
public void destroy() {// 2. 서블릿이 새로 갱신되서 리로드되거나 웹 애플리케이션이 종료될때 뒷마무리 작업을 하기 위해 호출 by.서블릿컨테이너
System.out.println("[HelloServlet] destroy() is called");
}
}
👉 새로고침 할 수록 service()만 계속 재호출 됨을 알 수 있다.
3. JSP란? (Java Server Pages) = 서블릿
: html파트는 서블릿에서 out.println으로 들어감
: jsp페이지는 따로 웹서블릿 써서 맵핑할 필요가 없다. (자동 맵핑됨) 바로 웹에서 접근.
: Url대신에 jsp이름을 써주면 된다. (http://localhost:8080/ch2/twoDice.jsp)
: jsp로 요청이 들어왔을때 jspServlet이 서블릿 인스턴스 여부를 확인. 없을시 최초로 컴파일 진행. (twoDice.jsp ▶ twoDice_jsp.java 서블릿 소스파일 ▶ twoDice_jsp.class 서블릿 클래스파일) ▶ 서블릿 인스턴스 생성 _jsp.init() 초기화 ▶ 서블릿으로 변환된 jsp 반환
: 두번째 호출부터는 변환과 컴파일을 거치지 않고 바로 반환
: jsp파일이 변경되면 변환,컴파일부터 다시 과정을 거친다.
4. jsp의 기본객체
: 생성 없이 사용할 수 있는 객체
: service() 메서드의 지역변수로 기본 객체들이 선언되어있으므로 가져다 쓸 수 있음.
: request, response, session, application, config, page, pageContext, out, exception