728x90

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 파일이 존재하는 곳

/WebContent/ 앞에 언급한 브라우저를 통해서 접근 가능한 리소스들. 웹 애플리케이션의 컨텍스트 루트 디렉토리에 해당.

/WebContent/WEB-INF/ 앞에 언급했던 /WEB-INF/ 디렉토리와 같은 성격

/build/classes /src 하위 자바파일의 컴파일된 class 들이 놓이는 곳. properties 파일은 자동 복사되는 곳.

 

개발 디렉토리와 WAS의 서비스되는 디렉토리의 매핑 즉 자연스런 연결은 빌드 툴인 ant를 통하거나 Eclipse같은 IDE에서 자동으로 해준다.


이클립스의 경우 Servers 라는 프로젝트가 웹 프로젝트와 별개로 생성이 된다. 여기에서 설정되는 서버의 세팅은 기본적으로 설치된 세팅과 별도로 운영된다. 즉 톰캣이 설치된 디렉토리의 conf 에 있는 설정과는 별개로 Servers하위의 서버별 server.xml 의 파일에 설정된 내용으로 동작이 된다는 뜻이다.
<%= request.getRealPath("/") %> 를 통해서 확인해 보면 이클립스에서 운영하는 디렉토리가 완전히 엉뚱한 곳에 존재함을 알 수 있다. 웹 프로젝트에서 파일을 변경하면 자동으로 파일이 해당 위치로 복사된다.

 

 

+

 

https://www.journaldev.com/1854/java-web-application-tutorial-for-beginners

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

 

 

728x90

'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
728x90

현재 팀에서 유지보수를 오래하고 있는 프로젝트가 Struts2 기반이라고 한다.

주된 업무가 안드로이드 개발이다보니, 이에 대한 개념이 명확하지 않아서 찾아보는 중.

 

 

1. Struts2 vs. Spring MVC?

Struts2는 Web MVC Framework다.

따라서 Spring MVC Framework는 동급으로, Spring Framework와는 동급이 아니다.

 

Spring의 개념에 대한 정리는

https://sthwin.blog.me/221271008423

 

 

Spring MVC의 장점 - 1) 확장성이 유연, 2) MVC 모델의 명확한 분리

https://gmlwjd9405.github.io/2018/12/20/spring-mvc-framework.html

 

[SpringMVC] Spring MVC Framework란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

2. Struts2란?

Apache에서 개발한 Struts2는 Struts1에 기반을 두고 있지 않고, WebWork Framework에 기반한다.

개별처리 액션을 별도의 Action class를 상속해야하는 1과 달리, 2에서는 POJO로 작성할 수 있음.

 

-----------------------------------------------------------------------------------------------------------------------------------

POJO란?

Plain Old Java Object, 즉 간단히 표현하면 Java Bean.

순수하게 setter, getter 메소드로만 이루어진 Value Object성 Bean을 의미한다. 

 

이는 별도의 클래스 상속, 인터페이스 구현, 어노테이션 사용 등을 강제하지 않기 때문에,

특정한 라이브러리나 컨테이너의 기술에 종속적이지 않고, 가장 일반적인 형태로 코드를 작성할 수 있다는 장점이 있다.

-----------------------------------------------------------------------------------------------------------------------------------

 

 

 

Reference

https://blog.naver.com/skykbc/221438813505

https://heeestorys.tistory.com/447

https://joonyon.tistory.com/18

 

 

 

728x90

'Dev > Web' 카테고리의 다른 글

[Eclipse] getter / setter 단축키  (0) 2019.10.14
[Struts2] struts.xml 설정하기  (0) 2019.10.10
[웹 개발 기초] Servlet, Servlet Container, JSP 개발 디렉토리 구조, Mapping  (0) 2019.10.10
Server Setting  (0) 2019.10.08
REST API  (0) 2018.10.02
728x90

 

- STS(Spring Tool Suite), 전자정부프레임워크: Eclipse의 확장판 (Eclipse와 같다고 보면 됨)

- mybatis: DB에 접근하는 프레임워크 (DB가 아님)

- DB: 오라클/mysql/mssql 등

 

 

1. 이클립스를 이용하여 svn 사용하기

http://lmc.cs.kookmin.ac.kr/readmore/eclipse-svn

 

 

 

 

2. 

Eclipse - Deployment Descriptor: WEB-INF 아래에 존재하는 web.xml파일을 말한다. 배포 서술자라 부르는데, JSP나 Servlet를 위한 설정 파일이다.
https://2everyday.tistory.com/entry/Eclipse-Deployment-Descriptor는

 

 

 

 

https://mkil.tistory.com/306

 

tomcat 실행에러/port중복사용/Several ports (8080,***) required by Tomcat v7.0 Server at localhost are already in use. The server may alr

갑자기 eclipse가 먹통이 되고 나면 , 사용하고 있던 port 번호가 이미 사용중이라 사용할 수 없다는 경고 팝업이 뜨면서 서버가 실행이 되지 않는 경우가 종종 발생한다. 정말 짜증이남. 하하하하핫 이거 해결방..

mkil.tistory.com

http://myblog.opendocs.co.kr/archives/1702

 

[문제해결] Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. | Opendocs

1. 문제상황 > 개발중 비정상적인 was 종료로 인해 다음과 같은 에러와 함께 재시작 되지 않는다. 실 운영환경에서도 이런경우가 있다. Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be u

myblog.opendocs.co.kr

 

 

728x90

'Dev > Web' 카테고리의 다른 글

[Eclipse] getter / setter 단축키  (0) 2019.10.14
[Struts2] struts.xml 설정하기  (0) 2019.10.10
[웹 개발 기초] Servlet, Servlet Container, JSP 개발 디렉토리 구조, Mapping  (0) 2019.10.10
Struts2, Spring MVC  (0) 2019.10.10
REST API  (0) 2018.10.02
728x90


REST API란?


https://www.youtube.com/watch?v=80PbMwOquJs


https://meetup.toast.com/posts/92


http://bcho.tistory.com/953




728x90

+ Recent posts