https://mangkyu.tistory.com/14
https://dahyeee.tistory.com/entry/Servlet-Servlet%EC%9D%B4%EB%9E%80
해당 블로그 글이 굉장히 정리가 잘 되어 있습니다.
아래는 그것에 대한 복습작성이오니 해당 글로 가시는 편이 좋습니다.
-------------------------------------------------------------------------------------------------------------------
1. Servlet(서블릿)이란?
1) 정의
- 자바를 사용하여 Web을 만들기 위해 필요한 기술.
즉, 클라이언트가 특정 요청을 하면, 그에 대한 결과를 다시 전송해 주는 역할을 하는 자바 프로그램.
따라서 자바로 구현된 *CGI.
*CGI(Common Gateway Interface): 웹서버가 외부 프로그램을 실행시키는 표준화된 방법
2) Servlet의 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 Web Application Component
- 확장자는 .java
- jsp와 마찬가지로 클라이언트의 요청에 의해 작동, html로 요청에 응답한다. (java 코드 속에 html이 존재함)
- Java Thread를 이용하여 동작 - 따라서 요청이 많이 들어와도 부하가 적다는 장점 존재.
- MVC 패턴에서 Controller로 이용됨
- Http 프로토콜 서비스를 지원하는 javax.serHTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음. *UDP보다 속도가 느림.
즉 항상 extends HttpServlet 해야함
- HTML 변경 시 Servlet을 재컴파일해야 하는 단점 존재
*UDP 참고 - https://namu.wiki/w/UDP
[ Servlet 동작 방식 ]
1) 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Conatiner로 전송
2) HTTP Request를 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성
3) web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청을 한 것인지 찾음
4) 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 POST, GET여부에 따라 doGet() 또는 doPost()를 호출
5) doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냄
6) 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킴
2. Servlet Container(서블릿 컨테이너)
1) 정의
- 서블릿을 관리해주는 컨테이너.
- 서블릿이 어떠한 역할을 수행하는 정의서라면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 볼 수 있음.
- 서블릿 컨테이너는 클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹서버와 소켓을 만들어 통신함.
- 서블릿 컨테이너의 대표적인 예로 톰캣(Apache Tomcat)이 존재함. 톰캣은 웹서버와 통신하여 JSP(Java Server Page)와 Servlet이 작동하는 환경을 제공해줌.
2) 특징, 역할
(1) 웹서버와의 통신 지원
(2) 서블릿 생명주기(Life Cycle) 관리
(3) 멀티쓰레드 지원 및 관리
(4) 선언적 보안 관리
3) 생명주기
---------------------------------------------------------------------------------------------------------------------
+ WAS와 Servlet Contatiner의 차이는 무엇? (https://sharryhong.github.io/2017/06/03/java-servlet/)
- WAS(Web Application Server) = HTTP Server + Servlet Container
톰캣 서버는 엄밀히 말하면 WAS로, 두 기능(Http Server, Servlet Container)을 탑재하고 있음.
그러나 대체로 HTTP Server는 좀 더 성능이 뛰어난 Apache 등으로 대체해서 사용함.
HTTP Server에서는 웹 애플리케이션의 정적 자원(Static Resource) 즉, HTML, CSS, JavaScript, gif등 변하지 않는 자원을 클라이언트 요청에 따라 그대로 읽어서 전달해줌.
반면 Servlet Container는 웹 애플리케이션의 동적 자원(Dynamic Resource) 즉, JSP, Servlet등을 생성함.
---------------------------------------------------------------------------------------------------------------------
3. JSP(Java Server Page)
1) 정의
- Java 코드가 들어있는 HTML 코드
- 서블릿은 자바코드 속에 HTML이 들어가있는 형태인데, JSP는 반대로 HTML 소스코드 속에 자바 소스코드가 들어가있는 구조를 가짐.
2) 동작구조
3) 개발 디렉토리 구조 (https://okjsp.tistory.com/1165643259)
웹 애플리케이션은 서블릿 스펙에 따라서 디렉토리가 정해진 규칙을 가짐
(1) 서비스와 관련된 디렉토리 구조
/WEB-INF/ 브라우저를 통해서 접근이 불가능한 웹 애플리케이션 핵심정보들을 포함하고 있는 디렉토리 /WEB-INF/classes/ 패키지에 따른 디렉토리별 class파일과 properties 파일이 위치하는 곳 /WEB-INF/lib/ 웹 애플리케이션에서 사용되는 jar 파일이 존재하는 곳 /META-INF/context.xml 톰캣에서 사용되는 manager를 통한 배포용 웹 애플리케이션 Context정보 파일 브라우저를 통해서 접근 가능한 리소스들은 그 외의 디렉토리에 놓으면 된다. 특히 브라우저의 JVM 위에서 돌아가는 애플릿 class와 관련 jar 들은 /WEB-INF/ 밖에 위치해야 한다. 이 디렉토리들을 묶어서 Context 라고 얘기한다. |
(2) 개발용 디렉토리 구조는 java 파일이라는 특징 때문에 다음과 같이 구성
/src 패키지에 따른 디렉토리별 java 파일과 properties 파일이 존재하는 곳 |
개발 디렉토리와 WAS의 서비스되는 디렉토리의 매핑 즉 자연스런 연결은 빌드 툴인 ant를 통하거나 Eclipse같은 IDE에서 자동으로 해준다.
이클립스의 경우 Servers 라는 프로젝트가 웹 프로젝트와 별개로 생성이 된다. 여기에서 설정되는 서버의 세팅은 기본적으로 설치된 세팅과 별도로 운영된다. 즉 톰캣이 설치된 디렉토리의 conf 에 있는 설정과는 별개로 Servers하위의 서버별 server.xml 의 파일에 설정된 내용으로 동작이 된다는 뜻이다.
<%= request.getRealPath("/") %> 를 통해서 확인해 보면 이클립스에서 운영하는 디렉토리가 완전히 엉뚱한 곳에 존재함을 알 수 있다. 웹 프로젝트에서 파일을 변경하면 자동으로 파일이 해당 위치로 복사된다.
+
Java Web Applications are packaged as Web Archive (WAR) and it has a defined structure. You can export above dynamic web project as WAR file and unzip it to check the hierarchy. It will be something like below image.
1) Java Resource - src 폴더 : 이 폴더에 java 파일들을 배치. 해당 폴더안에 있는 java파일만 컴파일을 수행함.
src는 소스컴파일을 수행하며 실행은 webContent에서 실행 됨
2) WebContent : 컴파일되지 않아도 되는 파일들을 배치.
* META-INF 폴더 : 읽어야하는 자원에 대한 정보를 가지고 있는 파일을 배치.
* Web-INF 폴더 : 프로젝트의 환경 설정 파일을 배치. Web.xml 파일이 반드시 위치해야함(다른 폴더에 있으면 설정파일의 역할을 하지 못함)
(출처: https://blog.naver.com/tkddlf4209/220539643154)
4. Mapping(맵핑)
1) 정의
- Url 경로를 간단하게 표현하는 방법 (+보안)
2) 방법
(1) web.xml에서 서블릿 맵핑 정의
<servlet-name> : 임의의 이름 지정
<servlet-class> : 매핑할 클래스 파일명을 패키지명을 포함하여 입력
<url-pattern> : servlet-class를 매핑할 임의의 이름을 입력한다. ('/'로 시작해야함!!)
(2) Annotation 이용
-java코드에 직접 @WebServlet("/맵핑명") 등으로 입력하여 맵핑
Reference
https://mangkyu.tistory.com/14
https://dahyeee.tistory.com/entry/Servlet-Servlet이란
https://okjsp.tistory.com/1165643259
https://www.journaldev.com/1854/java-web-application-tutorial-for-beginners
'Dev > Web' 카테고리의 다른 글
[Eclipse] getter / setter 단축키 (0) | 2019.10.14 |
---|---|
[Struts2] struts.xml 설정하기 (0) | 2019.10.10 |
Struts2, Spring MVC (0) | 2019.10.10 |
Server Setting (0) | 2019.10.08 |
REST API (0) | 2018.10.02 |