Study/JSP

[JSP] 서블릿, JSP 입문

minulbora 2024. 1. 9. 11:49

bin - 실행파일

conf - 시작할때 필요한 파일

lib - 사용하는 라이브러리

webapps - 기본으로 읽는 파일

web.xml - 시작할 때 읽음. 

 

포트(port) : 

window hosts 파일에 ip(127.0.0.1)랑 localhost 추가한 이유: localhost 하면 여기 바라보라는 뜻. 

서블릿?

 

📍HTTP 프로토콜이란?

이는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜

어플리케이션 레벨의 프로토콜로 tcp/ip 위에서 작동함. (참고: 네트워크 7계층)

HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있음. 

HTTP로 보낼 수 있는 데이터는 HTML 문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러 종류가 있음. 

하이퍼텍스트 기반으로 데이터르르 전송하겠다. (Transfer) = 링크 기반으로 데이터에 접속하겠다는 의미.

 

작동 방식: HTTP는 서버/클라잉언트 모델을 따름. 클라이언트에서 요청(request)을 보내면, 서버는 요청을 처리해서 응답(response)함. 

클라이언트: 서버에 요청하는 클ㄹ라이언트 소프트웨어(IE, Chrome, Firefox, Safari...) 가 설치된 컴퓨터를 이용함. 클라이언트는 url을 이용해서 서버에 접속하고, 데이터를 처리할 수 있음. 

서버: 클라이언트의 요청을 받아서, 요청을 해석하고 응답을 하는 소프트웨어가 설치된 컴퓨터(Apache, nginx, lls, lighttpd) 등이 서버 소프트웨어임. 

웹서버는 보통 표준포트인 80번 포트로 서비스함. 

web-server & was 나누는 이유...

https://codechasseur.tistory.com/25

 

[Web] 웹 서버와 WAS의 차이를 쉽게 알아보자

서버 개발에 있어서 가장 기초적인 개념인 '웹 서버'와 'WAS(Web Application Servier)'의 차이점을 다뤄보려고 한다. 💡 웹 서버 사전적 정의 "웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML

codechasseur.tistory.com

 

-method(메서드)

: 메서드는 요청의 종류를 서버에게 알려주기 위해서 사용

get: 정보를 요청하기 위해 사용 (select)

post: 정보를 밀어넣기 위해 사용. get으로 보낼 수 없는 정보를 전송할 때 (insert)

put: 서버에 데이터 저장을 요청할 때 사용.

delete: 서버에 데이터 삭제를 요청할 때 사용. 

 

head: (http) 헤더 정보만 요청한다. get을 통해 받아오는  response의 header를 받아올 때 사용함. 

options: 웹서버가 지원하는 메서드의 종류 (request 목록)를 요청함. 

trace: 클라이언스 요청을 그대로 반환함. 

ex. echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용함. 

각 용도에 맞는 메서드가 준비되어 있어도 get과 post 만으로도 모든 종류의 요청을 표현할 수 있음. 

 

-요청 데이터 포멧

1. 요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식

 

-응답 헤더 포멧

프로토콜과 응답코드 : (HTTP/1.1 200 OK)

날짜 : (Date: Sun, 12 Aug 2019 11:30:00 GMT)

서버 프로그램 및 스크립트 정보 : (Apache/2.2.4 (Unix) PHP/5.2.0)

응답 헤더에는 다양한 정보를 추가할 수 있다. 

컨텐츠의 마지막 수정일

캐시 제어 방식, 컨텐츠 길이, Keep Alive 기능 설정

 

-응답 코드

2XX: 서버가 요청을 성공적으로 처리했음을 의미함 

ex. 200 : 서버가 요청을 성공함. 

4XX: 요청 오류-클라이언트 요청에 오류가 있음

ex. 400 잘못된 요청 ( 주로 헤더 포멧이 HTTP 규약에 맞지 않을 경우)

403 금지 (서버가 요청을 거부하고 있음)

404 찾을 수 없음 ( 요청한 자원이 서버에 존재하지 않음. 웹서버는 존재함.)

 

<<web service architecture>>

process / thread (스레드는 프로세스에 묶여 있어서 프로세스가 죽으면 스레드도 같이 사라짐. )

servlet 이란?

 서블릿이란 자바를 이용하여 웹을 만들기 위해 필요한 기술. 

클라이언트가 어떠한 요청을 하면, 그에 대한 결과를 다시 전송해 주어야 하는데 이 역할을 하는 자바 프로그램을 의미

 

서블릿의 특징(장점)

자바 언어를 이용해 작성하기 때문에, 기본적으로 자바 언어에 대한 지식을 가지고 있어야 프로그램을 작성할 수 있으며 동적으로 html 문서를 생성해서 서비스를 하는데에 그 목적이 있음. 

-자바를 기반으로 하므로 자바 api를 모두 사용할 수 있음

-운영체제나 하드웨어에 영향을 받지 않으므로, 한 번 개발된 애플리케이션은 다양한 서버 환경에서도 실행할 수 있음

-웹 애플리케이션에서 효율적인 자료 공유 방법을 제공

-다양한 오픈소스 라이브러리와 개발 도구를 활용할 수 있음

 

서블릿의 단점

-화면에 표현된 html 코드를 프로그램적으로 작성해야 한다. 

-서비스하기 전에 반드시 컴파일을 해야 함  

 

서블릿과 서블릿 컨테이너

: 서블릿 컨테이너는서블릿을 실행하기 위한 서버 소프트웨어를 말하는 것으로, jsp 나 서블릿으로 만들어진 웹 프로그램을 개발하고 실행하기 위한 환경. 톰캣(tomcat)이 대표적임

 

구분 웹서버 서블릿 컨테이너
사용목적 웹서비스를 제공하기 위해 필요한 서버 기반의 소프트웨어 서블릿으로 개발된 자바 프로그램을 실행하고 처리하기 위한 서버 기반의 소프트웨어
처리 콘텐츠 HTML, CSS, 자바스크립트, 이미지 파일 등 서블릿 클래스
실행 방법 콘텐츠가 위치판 url 요청에 의해 실행하며 요청할 때마다 매번 디스크에서 읽어 처리함 서블릿 클래스 정보에 따라 서버에 매핑된 url 정보에 따라 실행하며, 컨테이너에 적재된 상태에서 처리함 
jsp 실행 자체로 처리할 수 없음. 서블릿 컨테이너로 처리를 넘김 jsp 자체로 처리할 수 있음
특징 웹서비스 제공을 위한 다양한 설정을 제공하기 때문에 서버를 유연하게 운영하려면 웹 서버를 사용해야 함 컨테이너에 따라 기본적인 웹서버 기능을 내장하고 있으나 고급 설정이나 성능이 떨어지기 때문에 웹 서버와 병행해서 사용할 것을 권장함  

  

서블릿 동작 과정

서블릿은 개발자가 소스 작성 후 컴파일 과정을 거쳐 컨테이너에 배치 (deploy)하게 되면 컨테이너에 의해 실행되어 관리됨. 이후 사용자 요청에 따라 스레드 단위로 실행되면서 데이터베이스 연동 등 필요한 작업을 수행하고 처리 결과를 사용자에게 html 형식으로 전달하는 구조로 동작함. 

등록 - web.xml (여기에 어떤 클래스를 쓸 지를 등록해야)

서블릿은 일반적인 애플리케이션처럼 버튼을 누르면 시작되고 처리를 마치면 종료되는 구조가 아님. 

서버에서 컨테이너에 의해 실행되면서 생명 주기를가지며, 특정 이벤트와 상태가 존재하는 구조. 

서블릿 개발은 해당 생명주기 메서드를 오버라이딩(부모에 있는 메서드 자식에서 재정의-선언부가 일치해야 함) 하거나 doGet(), doPost()와 같은사용자 요청 처리 메서드를 구현하는 것임. 

init()은 서블릿 실행 시 한 번만 실행되는 메서드(생성자)이고, service() 메서드는 사용자 요청시 매번 호출되는 메서드이다. destroy()는 서블릿 종료 시 실행되는 메서드.  

api(application programming interface)

일반적으로 서블릿은 javax.servlet.HttpServlet 클래스를상속받아 구현. 

GET 방식

- 전송할 때 url 뒤에 name = value 형태로 전송하고, 여러개일때는 &로 연결함. 

- ? 이후의 값들은 서버에서 query_string을 통해 전달된다. '키=값' 형태로 사용해야 하며, &는 여러 속성 값을 전달할 때 연결해주는 문자열

default 전송방식이며 url 이 노출되기 때문에 보안에 문제가 생길수 있음

POST 방식

-전송할 때 TCP/IP Protocal 의 HEAD 영역에 숨겨진 채 전송

-전송데ㅣ터 크기 제한이 없고, 보안

 

<<서블릿 생명주기>>

 

init() 메서드 (서블릿 초기화)

: 서블릿 실행시 호출되는 메서드로 초기에 한 번만 실행

service() method (요청/응답)

사용자 요청에 따라 스레드로 실행되는 메서드로, 각각 service() 메서드를 통해  doGet() 혹은 doPost() 메서드가 호출

파라미터인 HttpServletRequest (요청)와 HttpServletResponse(응답 전송)를 통해 사용자 요청을 처리

 

매개변수가 파라미터?

 

destory() 메서드 (서블릿 종료) : 컨테이너로부터 서블릿종료 요청이 있을 때 호출되어 한 번 실행되는 메서드.   

틀린게 없는데 글자가 깨지는경우 : UTF-8 확인하기

 

🪅 JSP 란

HTML을 코딩하기 너무 어렵고 불편해서 html 내부에 java 코드를 삽입하는 형식이 JSP임. 다시 말해 서블릿의 단점을 보완하고자 만든 서블릿 기반의 스크립트 기술. 

서블릿을 이용하게 되면 웹 프로그래밍을 할 수 있지만 자바에 대한 지식이 필요하며, 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 비효율적인 측면이 있음. 때문에 서블릿을 작성하지 않아도 간편하게 웹 프로그래밍을 구현하도록 만든 기술이 JSP(Java Server Pages).

JSP(Java Server Pages)는 서블릿 기반의 '서버 스크립트 기술'임. 

 

JSP와 서블릿 차이

servlet jsp
자바 코드로 구현하고 컴파일하고 내보내야 함
html 태그로 문자열("")로 처리해야 함
코드가 수정되면 다시 컴파일하고 배포해야 함
키워드가 태그화되어 서블릿에 비해 배우기 쉬움
자바 코드를 <%%> 태그 안에 처리해 주어야 함. 
Html처럼 태그를 사용하여 자바코드도 사용이 가능. 

 

 

  JSP형식

구분  JSP 태그 용도
지시자 <%@   %> 페이지 속성 지정
주석 <%-- --%> 주석 처리
선언 <%!  %> 변수, 메서드의 선언
표현식 <%=  %> 결과값 출력
스크립트릿 <%     %> JAVA 코드 삽입 (알고리즘 구현)
액션 태그 <jsp:action> </jsp:action> 페이지 삽입, 공유, 자바 빈사용 등. 

 

- 지시자 <%@ %>

jsp 페이지가 컨테이너에게 필요한 메세지를 보내기 위한 태그

page: jsp 페이지의 전체적인 속성을 지정

include: 다른 페이지를 현재 페이지에 삽입

taglib: 태그라이브러리의 태그 사용

범위 : jsp 파일 전체 (class 를 import 할 경우 파일 내 어디서든 접근할 수 있음)

 

jsp 페이지의 기본 성격을 나타내는 부분이며, 컨테이너가 jsp 파일을 서블릿으로 변환시킬 때 필요한 정보를 기술함. 자바클래스를 import 시켜서 사용한다거나, 다른 페이즈를 삽입한다거나 할 때 사용됨.   \

 

- 선언 <%! %>

변수와 메서드를 선언함

범위 : 페이지 내 어디서나 접근할 수 있는 전역 변수 및 메서드 

 

클래스를 수정했는데 업데이트가 계속 안되면

C:\project\tomcat-9.0.84\work\Catalina\test.sist.co.kr\ROOT\org\apache\jsp

위 경로에서 class 파일 싹 다 날리

 

jsp 에서 선언부는 무조건 맨 위로 올라가므로, 순서가 달라도 상관 없다. 

-표현식 :<%= %>

변수 또는 메서드의 결과값을 출력

자바 코드를 삽입하는 것 보다, 더 간단하게 출력 가능

변수나 메서드를 사용할 때 세미콜론(;)을 사용하지 않음   

	<h3>표현식을 이용한 메서드 결과 출력</h3>
	<%
		a=50;
		b=20;
	%>
	<h4>메서드 결과는 <%=sum(a,b)%></h4>
</body>
</html>
<%!
		String team = "jsp";
		String msg1;
		int msg2;
	%>
	<h3>출력되는 결과는 <%=name %>입니다.</h3>
	<br/>
	<h3>표현식을 이용한 메서드 결과 출력</h3>
	<%
		a=50;
		b=20;
	%>
	<h4>메서드 결과는 <%=sum(a,b)%></h4><br/>
	<h4>msg1 값은 <%=msg1%></h4><br/>
	<h4>msg2 값은 <%=msg2%></h4>
	
</body>
</html>

인스턴스 변수이기 때문에 초기화되며 처음 값을 넣지 않아도 저렇게... 들어감 (자바 문법)