Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

백엔드 개발 공부 일지

JAV WEB - Servelt & JSP (1) 본문

Java Spring

JAV WEB - Servelt & JSP (1)

JungCat 2022. 12. 28. 14:13

● Servlet

- Servlet 이란?? 

Server Side Applet의 약어
Servlet과 JSB는 Java의 Enterprise Edition에 속하는 웹 어플리케이션 기술로서, 웹 클라이언트의 요청에 의해 웹 서버에 수행 되고 그 수행 결과가 클라이언트에 응답되는 기술로써 Servlet 기술은 프로그래밍 성격이 강하며 JSP는 프레젠테이션 성격이 강하다.
 
Java EE 환경에서 Servlet과 JSP는 웹 컨테이너(엔진이라고도 함)에 의해 관리되고 수행되는 웹 컴포넌트로서 여러 웹 컴포넌트들이 모여 하나의 웹 어플리케이션을 수행한다.

 

 

MVC에서의 Controller는 Servlet객체로 구현하고 뷰는 JSP로 그리고 모델은 VO, DTO, DAO 등의 Java 객체로 구현한다.

 

- Servlet 프로그래밍

Java Servlet은 Java를 사용하여 웹 페이지를 동적으로 생성한는 서버측 프로그램으로서 Java EE  사양의 일부분이다. 

이 기술을 사용하여 쇼핑몰이나 이러닝 그리고 온라인 뱅킹 등의 다양한 웹 시스템이 구축되어 왔다.

 

대부분의 웹 자원들은 파일의 확장자로 파일의 종류를 구분하지만 Servlet의 경우에는 불가능 하다. (기존의 Applet 때문)

그러므로  Servlet 클래스의 경우에는 서버에서 Servlet 프로그램으로 인식되어 처리되도록 등록과 매핑이라는 설정은  web.xml 이라는 디스크립터 파일을 작성해주어야 한다.

* web.sml은 웹 어플리케이션에 대한 다양한 정보를 설정하는 파일로서 디스크립터 파일이라고 하며  다음과 같이 구성으로 WEB-INF 폴더에 만들어야 한다.

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0">
     <servlet>
         <servlet-name>HelloWorldServlet</servlet-name>
         <servlet-class>mypkg.HelloServlet</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>HelloWorldServlet</servlet-name>
         <url-pattern>/hello</url-pattern>
     </servlet-mapping>
</web-app>

 

- 초기 파라미터 전달

<servlet>
    <servlet-name>ServletName</servlet-name>
    <servlet-class>ServletClassFile</servlet-class>
    <init-param>
        <param-name>initParam1</param-name>
        <param-value>initParam1Value</param-value>
    </init-param>
    <init-param>
        <param-name>initParam2</param-name>
        <param-value>initParam2Value</param-value>
    </init-param>
</servlet>

 

Servelt 3.0부터는 web.sml 에 작성되던 Servlet 등록과 매핑, 초기 파라미터 설정, 리스너나 필터 등록과 같은 내용들을 소스 내에서 Annotation 구문으로 대신할 수 있는 구현 방법을 지원하고 있다.

즉, Annotation을 사용하면 web.xml에 일일이 설정 태그에 작성하지 않아도 된다. 개꿀

@WebServlet: Servlet 프로그램을 등록과 매핑을 정의한다.

@WebInitParam: Servlet 프로그램에 전달할 초기 파라미터를 정의한다.

@WebListener: 리스너를 정의한다.

@WebFilter: 필터를 정의한다.

@MultipartConfig: Servlet 프로그램에서 다중 파티션으로 전달되는 파일 업로드를 처리할 수 있음을 정의한 다.

 

아래는 예시이다.

@WebServlet("/hello")
public class Hello1Servlet extends HttpServlet { ...... }

@WebServlet(urlPatterns = {"/hello1", "/hello2"})
public class Hello2Servlet extends HttpServlet { ...... }

@WebServlet(name = "HelloServletExample", urlPatterns = {"/hello"})
public class HelloServlet extends HttpServlet { ...... }

@WebServlet(
 name = "HelloServletExample",
 urlPatterns = {"/hello"},
 initParams = {
 @WebInitParam(name = "param1", value = "value1"),
 @WebInitParam(name = "param2", value = "value2")}
)

public class HelloServlet extends HttpServlet { ...... }

 

요청 및 응답 객체 생성

웹 클라이언트로부터 Servlet 수행 요청이 전달되면, Servlet 컨테이너는 클라이언트로부터 전달된 요청 정보를 가지고 HttpServletRequest 객체와 HttpServletResoponse 객체를 생성하여 Servlet 의 doGet()또는 doPost() 메서드 호출시 아규먼트로 전달한다.

 

이 두 객체의 메서드가 뭐가 있는지만 아래에 나열해보자.

 

- HttpServletRequest 객체 : 웹 클라이런트에서 전송되는 요청 정보 추출

getHeader(name), getHeaders(name), getHeaderNames().

getContentLength(), getContentType(), getCookies()

getRequestURI(), getQueryString(), getProtocol(), getMethod()

 

- HttpServletResponse 객체 : 웹 클라이언트로의 응답 처리

setStatusCode(int statuscode), sendError(int code, String message), sendRedirect(url)

setHeader(String headerName, String headerValue)

setContentType(String mimeType), setContentLength(int length)

 

Servlet 객체 생성과 객체 해제

위의 2객체가 생성된 후, Servlet컨테이너는 요청된 서블릿 객체가 생성된 상태인지 우선 검사한다.

만약 Servlet 객체가 생성되어 있는 상태라면 바로 수행, 아니라면 해당 서블릿 클래스 파일을 찾아서 로딩한 후 객체를 생성하여 수행시킨다.

또한, 생성된 Sevlet 객체는 서버 종료 시까지 또는 웹 어플리케이션의 리로드까지 객체 상태를 유지한다.

Servlet 실행

Servlet은 doGet()또는 doPost() 메소드를 재정의하여 구현한다.

웹클라이언트로 부터 Servlet이 요청된 방식에 따라서 doGet() 또는 doPost() 메소드가 Servlet 컨테이너에 의해 호출되어 Servlet기능을 처리하게 된다.

Servlet 실행 흐름도

 

<FORM> 태그

HTML 문서에서 사용자의 입력을 서버로 전달하는 기능은 <FORM> 태그에서 지원하는 속성이다.

<FORM> 태그

밑에는 <form>태그 내의 사용되는 <input>태그에서 지원하는 주요 속성이다. 자주 사용하니 정리해놓자.

Query 문자열 (요청 파라미터)

Query 문자열이란 웹 클라이언트에서 웹 서버에 요청을 보낼 떄 추가로 전달하는 name과 value로 구성되는 문자열로서 요청 파라미터라고도 한다. 주로 다음과 같은 형식으로 전달되는데 전달 방식은 GET 방식과 POST 방식이 있다.

 

name1=value1&name2=value2&name3=value3

 

문자열 추출의 예시는 다음과 같다.

 

문자열에서 한글을 추출하고 싶다면 HTTPServletRequest에서 제공되는 setCharaterEncoding("utf-8")을 호출한다.

 

상태정보 유지 기술

웹 브라우저에서 웹 서버에 정보를 요청할 때 이전 접속시의 결과물(상태정보)를 일정시간 동안 유지하는 것을 상태정보 유지라고한다. 상태정보 유지 방법이 다음과 같은 것만 있다는것만 알아두자. (나중에 학습하기)

[HTTPsession 객체]

- 각브라우저마다 서버상에 한개 씩 만들어지는 객체이다.

- 객체가 만들어질 떄 부여되는 ID 쿠키기술을 이용하여 클라이언트의 브라우저에 보관한다.

요청 재지정

요청재지정이란 클라이언트에서 요청한 페이지 대신 다른 페이지를 클라이언트가 보게 되는 기능으로서 redirect 방법과 forward 방법으로 나뉜다.

 

redirect : HttpServletResponse의 sendRedirect() 메서드를 사용한다.

forward : RequestDispatcher의 forward() 메서드를 사용한다.

 

객체 공유

객체의 스코프란 객체가 생성되어 유지되는 기간을 의미하며 "Page, Scope, Request Scope, Session Scoper, Application Scope" 으로 구성된다. (일단 개념만 대충 알아두장)

 

 

● 웹 서버 프로그램

- CGI

CGI (Common Gateway Interface)가 원조

웹 서버의 기능을 확장하기 위한 프로그래밍 기술

 

장점 

- 구현언어에 제한이 없다.

- 웹의 표준기술이다.

단점 

- 지원 API가 엄청 빈약했다. -> Web 서버 개발 회사들이 자체적으로 API 제공

- 요청이 있을 떄마다 새로운 프로세스가 생성되어 응답한다

- 다중 프로세스 기반으로 처리한다. (웹 서버의 자식 프로세스로 요청을 각각한다.)

- Fast CGI

CGI의 단점을 대채하려 하였으나 구현이 시스템 프로그래밍 수준으로 어려움

- Servlet

CGI 수행 성능의 단점을 개선, 구현하기도 쉬움.

다중스레드, HTTP Servlet 상속

 

Servlet -------------------------------------------------------------------------------------> 1999년 JSP

                 수행결과를 HTML로 응답할 떄의 효울적인 개발을 위해

 

MVC 패턴 기반으로 웹서버 프로그램을 개발 - View : JSP, Model : JDBC, Controller : Servlet

 

톰캣(WAS) --   Web server (코요테)      +         Application Server (카탈리나)

                     (Html, 이미지 요청수행)                (Servlet 요청 수행)

 

JAVA SE - 일반적인 자바 애플리케이션 개발에 사용되는 기술 모음, 클라이언트 역할의 프로그램 개발에 사용되는 기술 모음

JAVA EE - 웹 서버를 포함한 서버 역할의 프로그램 개발에 사용되는 기술 모음

JAVA ME - HW 장치를 제어하는 프로그램 개발에 사용되는 기술 모음

 

 

- Query  문자열과 요청 파라미터

브라우저 웹 서버에 요청을 보내면서 name과 value로 구성된 문자열을 함께 전달할 수 있다. (웹 서버 프로그램을 요청할떄...)

 

GET 방식과 POST방식이 존재한다.

GET - Query 문자열, 요청하는 서버 프로그램 URL 문자열 뒤에 ? 기호와 함께 붙여서 전달

POST - 요청 파라미터, 요청 바디안에 담겨서 전달

 

[ GET ]

1) 브라우저 주소 필드에 직접 URL 문자열을 입력해서 요청할 때 ? 기호와 nave=value&name&value 을 직접 붙여서 요청

2) <a> 의 href 속성에 URL 문자열을 저장할떄 ? 기호와 name=value&name=value...을 직접 붙여서 요청

3) <form>  태그를 가치고 요청할 떄 method="get"

 

[ POST ]

1) <form> 태그를 가지고 요청할 떄 method = "post"

- 서블릿 프로그램에서 추출하는 방법

request.getParameter("이름") : String

request.getParameterValues("이름") : String []

 

* POST 방식의 경우에는 value에 한글이 있을때 한글이 깨진다.

---> 추출하기전에 request.setCharacterEncoding("utf-8")

 

 

'Java Spring' 카테고리의 다른 글

JAVA Spring - JPA  (0) 2023.02.03
JAVA Spring - MyBatis  (0) 2023.01.19
Java Spring - MVC  (0) 2023.01.16
Java Spring - Spring IOC  (0) 2023.01.12
JAV WEB - Servelt & JSP (2)  (0) 2022.12.30
Comments