HeadFirst servlet&jsp_2

네코·2022년 3월 30일
0

HeadFirst_servlet_jsp

목록 보기
2/3

웹 어플리케이션 아키텍쳐

  • HTTP 메소드의 사용목적, 각 프로토콜의 기술적 특징 설명
  • 서블릿 생명주기 이벤트와 각각의 목적에 대하여 설명
  • 다음을 포함하는 웹 어플 디렉토리 구조 만들기(정적 컨텐츠, JSP펭지, 서블릿클래스,배포 서술자, 태그 라이브러리, JAR 파일, 자바 클래스,
  • HTTP 접근으로부터 위 자원들을 보호할 방법
  • 다음 배포 서술자 문법 및 사용 목적에 대하여 설명하기
    서블릿 인스턴스, 서블릿 이름, 서블릿 클래스, 서블릿 초기화 파라미터, 서블릿 매핑에 사용할 URL

컨테이너

아파치와 같은 웹서버가 사용자로부터 서블릿 호출을 받으면 웹서버는 서블릿을 관리하는 컨테이너에 먼저 전달
요청을 넘겨받은 컨테이너에서 http req,res객체를 만들어 인자로 서블릿 doPost(),doGet()을 호출함

컨테이너가 없다면 어떻게 할까요,.,컨테이너의 역할

  • 통신 지원
    서블릿과 웹 서버 사이에서 통신을 지원한다.
    • 개발자가 직접 ServerSocket 생성
    • 특정 포트에 리스닝
    • 연결 요청이 들어오면 스트림 생성
      과 같은 일을 대신 처리해주는 것
      => 개발자가 비즈니스 로직에 집중할 수 있도록 함.
  • 생명주기 관리
    • 서블릿 클래스 로딩해서 인스턴스화 하기
    • 초기화 메서드 호출
    • 요청에 따른 메서드 호출
      을 대신함
      자원관리에 신경쓸 필요가 없음
  • 멀티스레딩 지원
  • 선언적 보안관리
  • jsp 지원

MVC 모델

MVC의 핵심 : 비즈니스 로직과 프리젠테이션 로직의 분리
WHY: 웹 인터페이스를 통해서만 접근된다고 단언할 수 없음

  • MODEL(자바클래스): 비즈니스 로직,(EX 정보를 읽어오거나 수정하는 로직 등)
    MVC에서 유일하게 DB와 통신하는 파트

  • VIEW(jsp): 화면에 보이는 영역을 담당
    컨트롤러로부터 모델 정보를 읽어옴
    사용자가 입력한 정보를 컨트롤러에게 전달해줌

  • CONTROLLER(servlet): Request 객체에서 사용자가 입력한 정보를 뽑아내 모델에 대하여 어떤 작업을 해야하는지를 알아냄.

간단 MVC 모델 배포

입력받은 메서드에 대한 서블릿 매핑 과정

  1. 논리적인 이름을 서블릿 클래스 파일에 매핑하기
    form에서 submit 될 경우 브라우저는 /TodoList/AddTodo 를 생성
    이 때 HTML의 action 속성에는 TodoList, 프로젝트명(앱이름)을 작성하지 않아도 브라우저가 알아서 붙여줌 왜냐하면 원래 input.html을 호출할 때 루트가 /TodoList/이므로 TodoList를 상대경로로 인식함.

  2. 컨테이너(톰캣) DD의 < servlet-mapping>에서 url-pattern이 AddTodo인 것을 찾음, 이 때 AddTodo는 자원의 논리적인 의미.

  3. DD에서 해당 url-pattern과 쌍을 이루는 DD내에서만 사용하는 서블릿명을 찾음. 이 내부 서블릿명과 일치하는 실제 servlet name을 매핑함.

  4. 컨테이너는 DD의 < servlet> 내부 < servlet-name>에 일치하는 실제 서블릿 이름 < servlet-class>항목 값을 읽음. 이 서블릿이 실제 요청을 처리할 서블릿 클래스, 초기화 된적 없다면 클래스를 로드하고 초기화함.

  5. 요청을 처리할 새로운 스레드를 시작하고 ,서블릿의 service()메서드에 request 객체 참조를 인자로 넘긴다.

  6. 스레드가 완료되면 클라이언트에게 응답을 보냄.

form에서 post 방식으로 한글을 입력받아서 servlet에서 처리할 경우 깨지는 현상
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
둘다 처리해주어 해결

모델 클래스 생성

mvc 아키텍쳐에서 모델은 가장 끝단
대부분 평이한 일반 자바 클래스 (pojo)로 작성한다
모델은 서블릿이 자신을 호출한다는 것을 알 필요 없다.
이 때 "안다"는 것은 모델 코딩 안에 서블릿 관련 내용이 있다는 것, = 종속적인 모델

만약 이럴 필요가 있을 경우 utility 패키지로 빼야한다 (?)

로직을 처리할 java class를 생성 (아마 dao, dto도 여기에 해당할 것 )
servlet에 해당 클래스 import하고 인스턴스 생성해서 처리

생성된 어떤 값을 out.println으로 출력

원하는 것은 서블릿은 로직 처리한 결과를 request에 저장하고
요청을 jsp 파일에 넘겨서 그리는 것.

==> 이를 위해서 jsp에서 스크립틀릿 작성

==> 서블릿에서 로직 처리 결과 담기
request.setAttribute("style",result)

==> jsp forwarding
RequestDispatcher view = request. getRequestDispatcher("asdf.jsp")
view.forward(req,res)

0개의 댓글