JAVA

Servlet, Get/Post 요청방식, ContextPath

J휘 2024. 9. 13. 21:06

#스크립틀릿(<% %>)

html문서 내에 자바코드를 쓸 수 있는 영역


서블릿(Servlet) 

웹 서비스를 위한 JAVA의 Class이며 자바로 웹을 만들기 위한 기술 (.servlet 파일로 만들기 가능)

사용자의 요청을 받아서 처리하고 그에 해당하는 응답페이지를 만들어서 다시 전송자에게 전송한다

>> 즉, 웹에서의 동적인 페이지를 java로 구현할 수 있게 도와주는 서버 측 프로그램 (html을 java로 구현)


데이터 요청방식

 http://localhost:5000/st/test1.do?name=%EC%B5%9C%EC%A7%80%EC%9B%90&gender=M
 <h1>Get방식으로 요청 후 응답페이지 보기</h1>

브라우저에서 서블릿으로 데이터를 요청하는 방식에는 2가지가 있다.

1. GET 요청 방식

특징

- URL의 Header영역에 데이터들을 포함시켜 요청한다

  • 사용자가 입력한 값(데이터)들이 url에 노출됨 (네이버 검색)
  • 보안유지가 불가능해서 로그인이나 회원가입 같은데 쓰면 안 됨

- Header영역은 전송하는 길이에 제한이 있음

  • 방대한 데이터들을 담았을 경우 초과하는 데이터는 절단되서 넘어감
  • 게시판 작성 같은 경우 GET방식에 부적합

- url에 데이터가 노출되어 있기 때문에 즐겨찾기(북마크)가 가능

  • url을 저장해 놨다가 재요청하는 방식
  • 검색기능에 적합 

 

2. POST 요청 방식.

특징

- POST방식으로 요청 시 URL의 BODY영역에 데이터를 포함시켜 넘김

  • 사용자가 입력한 값들이 url에 노출되지 않음
  • 보안유지가 가능함
  • = 로그인이나 회원가입 같은 경우 POST방식에 적합함 

- Body영역은 전송하는 길이에 제한이 없다

  • 방대한 데이터들을 담았을 경우 초과하는 데이터는 절단돼서 넘어감
  • = 게시판 작성 같은 경우 POST방식이 적합함

- 즐겨찾기는 가능하나 데이터가 url에 노출되지 않음

  • 기존에 봤던 응답화면을 볼 수 없다
  • 검색 기능은 경우 POST방식에 부적합

- Time out이 존재하기 때문에 페이지요청, 기다리는 시간이 있다.


+ form내의 제출버튼(submit타입) 클릭 시
form태그 속성 중 action에 작성된 url로 요청됨 (요청 시 사용자가 입력한 값들도 넘어간다.> value)

 <form action="/st/test2.do" method="POST"> <!-- /st/test2.do으로 요청 -->


즉, Controller(Servlet)을 호출한다고 생각하면 된다.

근데 여기서 url의 경로 방식에 2가지가 있다. 절대 경로상대경로 2가지로 나뉘는데

 

절대경로 방식 ( /로 시작하는 경우 )

: http://localhost:5000 뒤에 action값이 더해지면서 요청 (위 코드가 바로 절대경로 방식)

 

상대경로 방식 (문자로 시작하는 경우)

현재페이지가 보여질 때 url의 마지막 /로부터 그 뒤에 action값이 더해짐



ContextPath (컨텍스트 패스)

"웹 서버에서 웹 애플리케이션들을 구분하기 위한 길(path)"

좀 더 확실하게 이해야 할 거 같은데..

영어로는 "문맥의 길" 정도로 해석

 

웹 애플리케이션이 웹 서버에 배포됐을 때, 그 애플리케이션이 접근 가능한 기본 URL 경로를 말한다

간단하게 용어 정리를 하고 들어가면 더 이해하기 편할 거 같은데.. 


[ 용어정리하고 보는 ContextPath ]

웹 애플리케이션 (Web Application)

: 사용자가 웹 브라우저를 통해 접속할 수 있는 프로그램으로 블로그, 쇼핑몰, 이메일 등을 말함

 

웹 서버(Web Server) = WS = HTML

 

 

 

ContextPath

: 웹 서버 는 여러 개의 웹 애플리케이션을 배포할 수 있기 때문에, 각각의 애플리케이션을 구분하는 루트 경로가 필요한데 이 루트 경로가 바로 ContextPath 

 

총정리

하나의 웹 서버에서 여러 웹 애플리케이션을 운영할 때, 각각의 웹 애플리케이션을 구분하기 위해서

/app1, /app2 같은 경로(path)를 설정하는데 여기서 /app1, /app2가 각각의 웹 애플리케이션ContextPath 이다.

 

그리고 여기서 이제 아까 처음에 들었던 말을 다시 들어보자

 

ContextPath란.

웹 서버에서 웹 애플리케이션들을 구분하기 위한 길(path

 


실전 예)

http://www.example.com/app1/potato.jpg 을 해석해보자면 라는 도메인이 있고

http://www.example.com 라는 도메인이 있고

/app1  라는 contextPath 안에 

potato.jpg 라는 이미지가 있다는 것


Servlet은 반드시 contextPath 뒤에 작성되어야 한다

http:localhost:5000/st/test1.do

 

 

/st 라는 contextPath 뒤에( /

test1.do 라는 Servlet 이 작성돼있다.

 

 


  • context rootcontextPath:
    1. context root:
      • 정의: 웹 애플리케이션이 웹 서버에 배포될 때의 루트 디렉터리를 의미합니다. 서버의 파일 시스템 상에서 애플리케이션의 물리적 위치를 나타냅니다.
      • 설정 방법: Eclipse에서 웹 애플리케이션을 설정할 때 context root를 설정하면, 이는 웹 애플리케이션이 웹 서버에서 접근할 때의 루트 경로가 됩니다.
    2. contextPath:
      • 정의: 웹 애플리케이션이 웹 서버에서 접근할 때의 URL 경로를 의미합니다. 사용자가 웹 브라우저에서 애플리케이션에 접근할 때 사용하는 URL의 일부입니다.
      • 설정 방법: context root로 설정한 이름은 웹 애플리케이션이 웹 서버에서 접근할 때의 URL 경로인 contextPath로 사용됩니다. 예를 들어, context root를 myapp으로 설정하면, contextPath는 /myapp이 됩니다.