ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #2 JSP Project 01(CURD게시판) - 기본개념01
    JSP 2021. 8. 13. 19:26

    유투버 'ITTHISGO. IT 이거라도 알고 가자!' 님의 강의 참조

     

     

    1) 아파치 톰켓

    • 웹서비스를 하려면 아파치 서버가 있으면 된다. 아파치는 '웹 서버'
      => 정적파일을 서비스 (HTML/CSS/JS/이미지/비디오 등 고정적인 자원)
    • 우리가 사용하게되는 아파치 톰켓은 '웹 어플리케이션 서버'
      => 정적파일 서비스 + 동적파일처리 및 동적 서비스 (JSP/PHP 등)
    • 아래의 예를 보자
    *index.jsp
    
    <%
    int n1 = Integer.parseInt(request.getParameter("n1"));
    int n2 = Integer.parseInt(request.getParameter("n2"));
    %>
    
    <body>
    Hello JSP! 
    Current Date: <%= new java.util.Date() %>
    <%= n1 + n2 %>
    </body>

    • 웹 개발의 기본 중 기본인 REQUEST/RESPONSE 를 보면 어떻게 요청이 되었고 JSP파일이 톰켓을 통해 어떻게 처리되어 응답이 갔는지 잘 보여준다. JSP의 태그들은 톰켓에 의해 처리가 되어지고 아파치 + 톰켓의 의해 정적/동적인 데이터가 처리되어 화면에 나오는 것

     

     

    2) JSP 기본 뼈대

    • src/main/java 에 자바 파일이 작성이 되고 src->main->webapp 이하에 정적/동적 파일이 위치한다
    • 자바 파일 같은경우는 main()함수에서 실행이되지만 JSP는 CRUD프로젝트를 가지고 가서 톰켓이 서비스한다고 보면 된다 

    하이라이트 부분이 ContextPath!

    • 또 하나 중요한 개념인 Context Path. 위의 이미지의 하이라이트 부분이 ContextPath라고 불리는데 자원이 위치하는곳을 보여준다. 즉 'Hello JSP!...' 가 담긴 자원을 불러오려면 ContextPath를 통해 정확한 경로를 타고 가야한다 

     

     

    3) 동적 서비스 개념 잡기

    • 이클립스로 개발시에 톰켓은 서버, 브라우저는 클라이언트의 역할이 된다
    • 동적 서비스는 정적서비스의 HTML/CSS/JS 포함하여 동적인 자원(JSP/PHP 등)을 서비스 하는 것을 의미하며 톰켓의 서버가 동적 자원을 다룰때 일반 아파치가 정적인 자원을 다루게되고 최종적으로 두개의 자원이 합쳐서 HTML기반으로 화면에 뿌려진다
    • 동적 자원을 다루고싶으면 반드시 동적자원을 이용하여 (JSP) 진행이 되어야하고 이클립스로 웹개발시에는 WEB.XML을 통해서 JSP파일에 커넥션이 가능하다 (현재 기본 커넥션 위치를 <welcome-file>로 알려주고 있다)
    *web.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
      <display-name>CRUD</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    • 아래 코드와 결과를 보면 동적 서비스의 개념의 기초를 볼 수 있다.
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Hi there!</title>
    </head>
    <body>
    <%
    	java.util.Random ran = new java.util.Random();
    	int total = 0;
    	for (int i=0; i<=ran.nextInt(10); i++){
    		total += i;
    	}
    	System.out.println("처리함");
    %>
    	1부터 랜덤한 숫자까지의 합: <%= total %>
    </body>
    </html>

    • 클라이언트가 URI를 통해 요청(REQUEST)하게되고 서버측(아파치-톰켓)은 그 요청을 받아서 아파치는 정적자원(HTML), 톰켓(JSP태그)은 동적자원을 각각 딜링 후 HTML의 형식으로 응답(RESPONSE)을 던져 준다. 동적서비스이기때문에 새로고침이 될때마다 클라이언트가 받는 자원의 값이 달라지게되고 서버측에서도 메세지로 '처리함'이라고 계속 새로 갱신이 되는 것

     

    • JSP 동적자원 표현식 및 처리 예제 1
    <body>
    <h2>JSP 기본 문법 예제</h2>
    <%
    //Scriptlet영역 이라 부르며 자바코드를 작성 할 수 있는 공간(연산,처리기능 등의 정의)
    String str = "스크립틀릿";
    String comment = "주석";
    %>
    
    선언문: <%= declaration %> <br>
    스크립틀릿 <%= str %> <br>
    <!--  <%= comment %> -->
    <%-- <%= comment %> --%>
    
    
    <%!
    //선언문이라 불리며 멤버필드, 멤버메서드를 정의하는 공간
    String declaration = "선언문";
    %>
    </body>

    스크립틀릿 과 표현식만 주로 쓰게 될 것이다!
    클라이언트에서 받아지는 화면은 HTML기반이다. JSP자원은 톰켓에서 다 처리해서 나간다.

    • JSP파일이 처리되는 과정(라이프 사이클)

    • 라이프 사이클 실습
    <h2>JSP 라이플 사이클</h2>
    <%!
    //선언문 - 멤버필드/멤버메서드 정의
    private int num1 = 0;
    public void jspInit() {
    	System.out.println("jspInit() 호출됨");
    }
    
    public void jspDestory() {
    	System.out.println("jspDestory() 호출됨");
    }
    %>
    
    <%
    int num2 = 0;
    num1++;
    num2++;
    System.out.println("num1:"+num1);
    System.out.println("num2:"+num2);
    %>
    <ul>
    	<li>num1: <%= num1 %> </li>
    	<li>num2: <%= num2 %> </li>
    </ul>
    </body>

    => 여기서 수정을 시켜보자(서버용 출력문 삭제)

    => 여기서 JSP 파일 처리과정 이미지에서 설명했던것처럼 톰켓은 JSP 파일을 받아서 자바 파일로 변환을해서 최종적으로는 CLASS파일로 바꿔서 메모리에 올린다. 그렇다면 .java/.class 파일을 삭제해 보자

    삭제!

    • 실습을 통해 봤듯이 최초 웹브라우저에서 요청이들어오면 톰켓은 요청 ContextPath를 따라 CRUD->index.jsp 를 찾아서 index.java 를 만들고 여기서 다시 .class로 컴파일 시킨다. 컴파일 되면서 .jsp 파일안에 있는 함수가 불러진다. 
    • 중요포인트는 자바파일이 만들어진다는 것. 그 자바파일이 다시 .class의 객체화되어 내장되어있는 service()함수만을 이용해서 최초 jsp파일을 읽는것을 제외하면 만들어진 .java/.class를 통해 요청과 응답을 하는 것. jsp파일의 내용이 수정/삭제등이 되면 만들어진 기존 메모리에서 수정전 데이터는 지우고 .java파일에 다시 새롭게 적용이되고 그것을 다시 컴파일해서 .class에도 똑같이 적용시킨 후 메모리에 새롭게 올린다.. 즉 최초 호출시 .jsp -> .java -> .class 가 되고 그 이후에는 .java ↔ .class 의 라이플 사이클이 도는 것
    • 또한 num1과 num2의 차이는 선언문에서 선언되었느냐 단순 스크립틀릿에 선언되었느냐에 따라 메모리에서 바꿔줘야하는지 아니면 단순 service()함수를 통해 불러만 오면 되는지를 보여준다
Designed by Tistory.