-
#2 JSP Project 01(CURD게시판) - 기본개념01JSP 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()함수를 통해 불러만 오면 되는지를 보여준다
'JSP' 카테고리의 다른 글
#2 JSP Project 03(CURD게시판) - 기본개념03(쿠키/세션) (0) 2021.08.15 #2 JSP Project 02(CURD게시판) - 기본개념02 (0) 2021.08.14 #1 JSP Project 09(Blog) - 게시판 댓글 (0) 2021.07.05 #1 JSP Project 08(Blog) - 게시판 - 상세보기/조회수/삭제/수정 (0) 2021.07.04 #1 JSP Project 07(Blog) - 글쓰기/메인화면목록 (0) 2021.07.01 - 웹서비스를 하려면 아파치 서버가 있으면 된다. 아파치는 '웹 서버'