태그 글목록: servlet

[JSP & Servlet 배경지식] 4. Servlet – Deployment Descriptor(DD) 2014-09-19

> DD(Deployment Descriptor : 배포서술자)를 살펴보기 전에 자바 개발환경에서의 약속된 폴더구조를 알아보자.

>>> eclipse 개발환경에서의 폴더구조
eclipse_folder
>>>>>> description
① 서블릿파일들을 소스형태로 저장한다. 주로 비지니스로직을 구현한다.
② 서블릿파일들이 빌드되어 class형태로 자동 생성된다.
③ 사용자에게 보여지는 부분을 html로 구성한다.
④ 이번 포스팅에서 설명할 배포서술자가 위치하고 있으며 없어서는 안되는 파일이다.
⑤ 개발시 사용될 라이브러리들을 다운받아 추가하고 사용한다.
>>> Tomcat 서비스 환경에서의 폴더구조
service_folder
>>>>>> description
서비스 환경에서는 소스파일은 필요가 없고 빌드된 형태로 WEB-INF/Classes 폴더에 존재하게 된다.

> DD(Deployment Descriptor : 배포서술자)는 WEB-INF폴더 아래 web.xml이라는 파일명으로 항상 존재해야 하며 서버 시작시 메모리에 로딩된다. 클라이언트 요청에 대해 컨테이너는 DD를 참조하여 해당 서블릿에 맵핑시켜 준다. 또한 DD는 다음의 여러가지 환경정보를 설정할 수 있도록 한다.

- ServletContext 설정
- Session이 유지되는 시간 설정
- Servlet/JSP에 대한 정의
- Servlet/JSP 매핑
- Mime Type 매핑
- Welcome File list
- Error Pages 처리
- 리스너/필터 설정
- 보안설정 (에러처리)
>>> ServletContext & ServletConfig

– ServletContext : 어느 서블릿 객체에서든 접근 가능한 String을 저장한다. (READ or WRITE 가능)

<context-param>
   <param-name>propertiesPath</param-name>
   <param-value>/conf/global.properties</param-value>
</context-param>
ServletContext context = this.getServletContext();
String propertiesPath = context.getInitParameter("propertiesPath");

– ServletConfig : 특정 서블릿 객체에서만 접근 가능한 String을 저장한다. (READ만 가능)

<servlet>
   <servlet-name>main</servlet-name>
   <servlet-class>com.MainServlet</servlet-class>
   <init-param>
      <param-name>title</param-name>
      <param-value>홈페이지</param-value>
   </init-param>
</servlet>
ServletConfig config = this.getServletConfig();
String title = config.getInitParameter("title");
>>> session-config : 30분설정
<session-config>
   <session-timeout>30</session-timeout>
</session-config>
>>> Servlet/JSP 정의 및 매핑
<servlet>
   <servlet-name>{서블릿이름}</servlet-name>
   <servlet-class>{서블릿이름에 해당하는 클래스}</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>{서블릿이름}</servlet-name>
   <url-pattern>{클라이언트가 요청할 url패턴}</url-pattern>
</servlet-mapping>
url-pattern의 설정법
> 이름까지 정확히 일치
   /[경로]/이름
> 디렉토리까지 일치
   /[경로]/*
> 확장자만 일치
   *.확장자
>>> mime type 매핑

특정파일을 다운로드 시켰을때 다운로드창이 아닌 파일이 깨져보일때 정상적인 다운로드를 위해 설정해야 한다.

<mime-mapping>
   <extension>xls</extension>
   <mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
* mime type
엑셀 97~2003 통합문서 (*.xls)
> application/vnd.ms-excel
엑셀 통합문서 (2007 이상 *.xlsx)
> application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
ZIP 파일 (*.zip)
> application/zip
TAR 파일 (*.tar)
> application/x-bzip
워드 97~2003 문서 (*.doc)
> application/msword
워드 문서 (2007 이상 *.docx)
> application/vnd.openxmlformats-officedocument.wordprocessingml.document
PDF 파일 (*.pdf)
> application/pdf
한글 (*.hwp)
> application/x-hwp
>>> Welcome File list

도메인으로만 접근하였을때 최초로 보여질 페이지를 지정한다.

<welcome-file-list>
   <welcome-file>index.html</welcome-file>
   <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
>>> Error Pages 처리

error 발생시 안내 페이지를 지정한다.

<error-page>
   <error-code>500</error-code>
   <location>/500.jsp</location>
</error-page>
>>> 리스너/필터 설정

– Listener : 어떠한 이벤트가 발생하면 호출되어 처리하는 객체로 인터페이스만 제공되므로 클래스는 직접 구현해야한다.

<listener>
   <listener-class>{구현된 클래스 경로}</listener-class>
</listener>

– Filter : HTTP요청과 응답을 변경할 수 있는 재사용가능한 코드로 클라이언트와 서블릿 사이에 위치하여 request & response값을 알맞게 변경 할 수있게 한다.

<filter>
   <filter-name>{필터명}</filter-name>
   <filter-class>{클래스 경로}</filter-class>
</filter>
<filter-mapping>
   <filter-name>{필터명}</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

[JSP & Servlet 배경지식] 3. Servlet – concept 2014-09-19

> 서버(Server)와 애플릿(Applet)의 약어로 동적인 웹페이지를 생성하는 서버측 프로그램 혹은 그 사양을 말하며 초창기 CGI방식 웹서버의 성능개선을 목적으로 썬마이크로시스템스에서 발표하였다.

>>> 초창기 CGI방식 웹서버와의 차이점
- 플랫폼 독립성 : JVM(자바가상머신) 위에서 동작해 하드웨어와 운영체제에 따라 다른 애플리케이션을 구현하지 않아도 된다.
- 안전성 : 악의적 혹은 잘못 작성된 서블릿이 서버의 파일시스템에 손상을 입히지 않도록 JVM 에서 접근을 제어한다.
- 효율성 : 멀티스레드 방식으로 동작하므로 서블릿이 생성되면 서버가 종료되지 않는 이상 메모리에 남게 된다. 이로 인해 이후에 오는 요청에 대해서는 서블릿을 새로 생성하지 않아도 되 시스템 메모리 활용에 큰 이점이 있다.
>>> 멀티프로세스 방식 VS 멀티스레드 방식
- 멀티 프로세스 방식
multiprocess ==> 클라이언트의 요청을 받아 웹 애플리케이션을 직접 실행하는 구조로 각각의 요청에 대해 프로세스를 생성하고 응답한 뒤 종료하는 형태이다. 이는 각각의 많은 요청이 들어오는 경우 프로세스를 계속 생성하므로(프로세스를 create하는 작업은 필요이상의 부담을 주게 된다) 시스템 부하가 커지게되 안정적인 서비스가 힘들다.
- 멀티 스레드 방식
multithread ==> 클라이언트의 요청을 받으면 웹 애플리케이션을 거치지 않고 웹 컨테이너로 요청이 전달된다. 그리고 웹 컨테이너가 요청을 처리할 스레드를 생성하는 형태이다. 멀티스레드 방식은 최초 요청 시 웹 애플리케이션을 실행한 후 종료하지 않은 상태에서 같은 요청이 여러 번 오는 경우, 실행되고 있는 웹 애플리케이션의 스레드를 생성해 요청을 처리하는 방법이다. CGI에서 사용하는 멀티프로세스 방식보다 시스템 부하를 줄여 안정적인 서비스를 제공할 수 있다.
>>> 서블릿의 종류
- Generic 서블릿 : GenericServlet(javax.servlet.GenericServlet)을 상속받아 구현 한다.
genericServlet==> 프로토콜 독립적인 서블릿으로 service()를 오버라이딩해 사용한다.
- HTTP 서블릿 : HttpServlet(javax.servlet.http Servlet)을 상속받아 구현 한다.
HttpServlet은 GenericServlet을 상속받아 HTTP 프로토콜에 관련된 기능을 구현한 것이다.
httpServlet==> GenericServlet을 상속받아 사용하는 것보다 편리하며 클라이언트 요청에 따라 doGet, doPost, doPut 등의 메소드를 호출한다.