ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 day44(2). Tomcat, JSP
    기록 2022. 11. 7. 19:05

    Dynamic Web Project 구성

    src/main/java

    - 패키지, 자바클래스를 정의하는 소스폴더

     

    webapp

    - 웹 애플리케이션 프로그램(jsp)을 정의하는 폴더

    - 웹 정적 리소스(html, css, js, image, video, audio)를 정의하는 폴더

    * 각각의 리소스별로 하위 폴더를 생성하고 해당 리소스를 저장한다.

    webapp/resources/images : 이미지 저장 폴더

    webapp/resources/css : css파일 저장 폴더

    webapp/resources/js : javascript 파일 저장 폴더

     

    WEB-INF

    - 웹 애플리케이션 설정정보를 정의하는 폴더

    - 보통 web.xml파일이 위치한다. 서블릿 버전 3.x 이상부터는 web.xml파일이 없어도 상관없다.

    - WEB-INF 폴더 및 그 하위 폴더에 존재하는 모든 파일은 클라이언트에게 엑세스가 금지되어 있다.

     

    WEB/INF/lib

    - 웹 애플리케이션에서 사용되는 라이브러리 파일을 추가하는 곳

    - Oracle jdbc 드라이버 파일, ibatis 라이브러리 파일 등


    Tomcat

    • Web Application Server(WAS)
    • Web Application Program을 실행시켜주는 서버다.
    • 웹 애플리케이션 전용 서버다.
    • Servlet/JSP 엔진, Servlet/JSP 컨테이너의 역할을 수행하는 서버다.

     

    URL과 웹페이지 vs URL과 웹애플리케이션

    • URL(Uniform Resource Locator)
      • 자원(웹페이지, 웹애플리케이션, 그림, 동영상, 파일)의 위치를 나타내는 주소다.
      • 서버에 있는 자원을 요청할 때 클라이언트가 입력하는 주소다.
      • 일반적으로 웹에서 웹브라우져(클라이언트)의 주소창에 URL을 입력하면
        • 웹브라우져가 해당 URL을 서버로 전달한다. (웹서버는 URL이 나타내는 주소에 해당 자원이 존재하면 그 자원을 응답으로 제공한다.)
      • URL 형식
        • http://jhta.co.kr/page/edu/view.php?type=1&id=179
          • http : 프로토콜
          • jhta.co.kr: 호스트명, 서버명, 도메인네임
          • /page/edu/view.php : 실제 자원의 위치(웹애플리케이션의 위치) - type=1&id=179 : 쿼리스트링(서버에 보내는 추가정보)
    • 웹페이지와 웹애플리케이션
      • 웹 페이지
        • 정적 자원(정적 HTML 컨텐츠) 제공
        • 미리 작성해둔 html문서가 응답으로 제공되는 것
      • 웹 애플리케이션
        • 동적 자원(동적 HTML 컨텐츠) 제공
        • 동적 웹 컨텐츠를 제공하는 프로그램(Servlet/JSP)이다.

    JSP

    • JavaServer Pages
    • 동적 웹 컨텐츠를 응답으로 제공하는 웹애플리케이션을 개발할 때 사용되는 자바의 웹 기술
    • JSP는 HTML 태그로 구성된 문서내에서 자바코딩이 가능한 파일이다.
      • 자바코딩이 가능하기 때문에 DB Acess작업, 동적으로 태그를 생성하는 것도 가능
    • JSP를 사용해서 개발된 웹 애플리케이션을 실행하기 위해서는 웹 애플리케이션 서버가 필요하다.
      • 대표적인 웹 애플리케이션 서버
        • Tomcat, Jetty, Jboss, Weblogic, JEUS

    => 톰캣안에 여러개의 웹 애플리케이션 프로젝트를 배포할 수 있다.

    웹 애플리케이션을 생성할 때 Context Root(Path)를 정의할 수 있다.

    ContextRoot는 웹서버가 웹 애플리케이션을 식별하는 식별자다.

    지정하지 않으면 프로젝트 이름과 똑같이 된다.

    내가 배포한 웹 애플리케이션 이름 확인하는 방법 : 이클립스에서 server를 더블 클릭 - 모듈 클릭 - path를 확인하면 됨

    내가 만든 웹 어플리케이션 프로그램들이 웹 애플리케이션 프로젝트 안에 들어간다.

    톰캣이 클라이언트 브라우저로부터 요청받은 url을 분석해서 요청 URL과 일치하는 JSP를 찾아서 실행시켜준다. 그러면 클라이언트는 실행결과로 동적 웹 컨텐츠를 응답으로 받을 수 있다.

     

    JSP의 실행 순서

      1. 브라우저의 주소창에 JSP의 실행을 요청하는 URL을 적는다.

      2. 브라우저는 주소창의 URL이 포함된 HTTP 요청메세지를 만들어서 서버로 보낸다.

      3. Tomcat의 브라우저의 요청메세지를 접수받는다.

      4. 요청객체(HttpServletRequest)와 응답객체(HttpServletResponse)객체를 생성한다.

    • 요청메세지를 분석해서 요청객체에 전부 저장한다.
    • 응답메세지 제공을 책임질 응답객체도 함께 생성한다.

      5. Tomcat이 요청URL을 분석해서 JSP 파일을 찾아서 로드한다.

      6. JSP파일을 java파일로 변환한다

      7. java파일을 컴파일해서 class파일을 만든다.

      8. 컴파일된 class파일 로드해서 객체를 생성한다. 객체 안에는 3개의 메소드가 있다. 

      9. Tomcat이 _jspService(HttpServletRequest request, HttpServletResponse response)를 실행한다.

    • 실행시 4번에서 생성된 요청객체와 응답객체를 각각 request와 response 변수에 전달한다.
      • _jspService 메소드는 jsp에서 진입점이 되는 메소드다.
      • _jspService 메소드에는 jsp파일에서 작성한 모든 자바코드와 html 태그가 포함되어 있다.
      • jsp의 실행을 요청하는 것은 결국, _jspService 메소드의 실행을 요청하는 것이다
      • jsp 파일을 작성한다는 것은 결국, _jspService 메소드에 포함될 코드 및 태그를 작성하는 것이다.

      10. _jspService 메소드가 실행되면 응답컨텐츠가 스트림을 통해서 클라이언트로 보내진다.

      11. 브라우저는 응답메세지에 포함된(응답컨텐츠)를 화면에 표시한다.

     

    +) sample-1.jsp를 반복 요청할 경우에는, 객체가 이미 만들어져있으므로 _jspService메소드만 실행시킨다. 

    +) 객체는 웹 애플리케이션 서버가 켜지고 종료될때까지 유지된다. 

    +) 싱글톤 객체 : 하나만 만들어서 유지된다.

    +) 톰캣은 Servlet/JSP엔진이라고도 하고 Servlet/JSP컨테이너라고도 불린다.

         (컨테이너란, 객체를 생성, 유지, 실행시켜주는 것을 의미함)

     

     

    jsp의 구성요소 (5가지)

     

    - 디렉티브(지시어)

    <%@ page  %> : page 지시어 - JSP 페이지에 대한 설정정보를 정의하는 구성요소다. (컨텐츠타입, 페이지인코딩 등의 설정을 지정한다.)

    <%@ include  %> : include 지시어 - JSP 페이지에 다른 JSP 페이지를 포함시키는 지시어다.

    <%@ taglib  %> : tag library 지시어 - JSP 페이지에서 사용할 태그 라이브러리를 정의하는 지시어다.

     

    - 스크립틀릿

    <%   %> : JSP페이지에서 자바코딩영역을 지정하는 지시어. 스크립틀릿 안에서 변수를 선언하거나 객체를 생성하거나 메소드를 호출할 수 있다. ( 자바 소스코드로 변환될 때 _jspService메소드 안에 포함된다.)

    (HTML문서와 JSP문서의 차이점 : HTML에서는 자바코딩을 할 수 없는데 JSP문서에서는 자바코딩이 가능하다.)

     

    - 표현식

    <%=   %> : 스크립틀릿에서 정의한 변수나 객체에 저장된 값을 출력시키는 지시어.

     

    - 선언식

    <%!   %> : 메소드, 멤버변수, 정적변수를 선언하는 지시어다. (사용빈도가 매우 낮다.클라이언트 요청이 오면 _jspService를 실행하는데 선언식은 바깥에 만들어지니까)

     

    - 주석

    <%--   --%> : JSP 주석이다. JSP주석으로 작성된 내용은 JSP가 자바코드로 변환될 때 제외된다. HTML주석<!-- -->HTML의 구성요소이기 때문에 서버로 내려보내준다. 하지만 브라우저가 무시한다

     

    include 지시어

    JSP의 모든 HTML 태그는 _jspService메소드 안에서 클라이언트로 출력시킨다. JspWriter의 out이라는 메소드를 호출하면 컨텐츠를 브라우저쪽으로 내려보낸다.

    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>반복문을 사용해서 값 출력하기</h1>
    	
    	<%
    	 	List<String> names = new ArrayList<>();
    		names.add("김유신");
    		names.add("강감찬");
    		names.add("이순신");
    		names.add("류관순");
    		names.add("안중근");
    		names.add("윤봉길");
    		names.add("이봉창");
    	%>
    	
    	<h3>교육 참석자 명단</h3>
    	<ul>
    	<% 
    		for (String name : names) {
    	%>			
    			<li><%=name %></li>
    	<% 
    		}
    	%>
    	</ul>
    </body>
    </html>

    댓글

Designed by Tistory.