웹사이트 검색

초보자를 위한 Java 웹 애플리케이션 자습서


Java 웹 응용 프로그램은 동적 웹 사이트를 만드는 데 사용됩니다. Java는 서블릿 및 JSP를 통해 웹 애플리케이션을 지원합니다. 정적인 HTML 페이지로 웹사이트를 만들 수 있지만 동적인 정보를 원할 때는 웹 애플리케이션이 필요합니다.

자바 웹 애플리케이션

이 기사의 목적은 웹 응용 프로그램의 다양한 구성 요소에 대한 기본 세부 정보와 Servlet 및 JSP를 사용하여 첫 번째 Java 웹 응용 프로그램을 만드는 방법을 제공하는 것입니다.

  1. 웹 서버 및 클라이언트
  2. HTML 및 HTTP
  3. URL 이해
  4. 서블릿과 JSP가 필요한 이유
  5. 서블릿과 JSP를 사용한 최초의 웹 애플리케이션
  6. 웹 컨테이너
  7. 웹 애플리케이션 디렉토리 구조
  8. 배포 설명자

웹 서버 및 클라이언트

웹 서버는 클라이언트 요청을 처리하고 응답을 다시 클라이언트로 보낼 수 있는 소프트웨어입니다. 예를 들어 Apache는 가장 널리 사용되는 웹 서버 중 하나입니다. 웹 서버는 일부 물리적 시스템에서 실행되며 특정 포트에서 클라이언트 요청을 수신합니다. 웹 클라이언트는 서버와의 통신을 돕는 소프트웨어입니다. 가장 널리 사용되는 웹 클라이언트는 Firefox, Google Chrome, Safari 등입니다. 서버에서 URL을 통해 무언가를 요청할 때 웹 클라이언트는 요청을 생성하고 서버로 보낸 다음 서버를 구문 분석합니다. 응답하고 사용자에게 제시합니다.

HTML 및 HTTP

웹 서버와 웹 클라이언트는 두 개의 별도 소프트웨어이므로 통신을 위한 공통 언어가 있어야 합니다. HTML은 서버와 클라이언트 간의 공통 언어이며 HyperText Markup Language를 나타냅니다. 웹 서버와 클라이언트는 공통 통신 프로토콜이 필요하며 HTTP(HyperText Transfer Protocol)는 서버와 클라이언트 간의 통신 프로토콜입니다. HTTP는 TCP/IP 통신 프로토콜 위에서 실행됩니다. HTTP 요청의 중요한 부분은 다음과 같습니다.

  • HTTP 메서드 - 일반적으로 GET, POST, PUT 등 수행할 작업
  • URL - 액세스할 페이지
  • 양식 매개변수 - Java 메소드의 인수와 유사합니다(예: 로그인 페이지의 사용자, 비밀번호 세부사항).

샘플 HTTP 요청:

GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

HTTP 응답의 중요한 부분은 다음과 같습니다.

  • 상태 코드 - 요청이 성공했는지 여부를 나타내는 정수입니다. 잘 알려진 상태 코드 중 일부는 성공의 경우 200, 찾을 수 없음의 경우 404, 액세스 금지의 경우 403입니다.
  • 콘텐츠 유형 - 텍스트, html, 이미지, pdf 등 MIME 유형이라고도 함
  • 콘텐츠 - 클라이언트가 렌더링하고 사용자에게 표시되는 실제 데이터입니다.

샘플 HTTP 응답:

200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>

MIME 유형 또는 콘텐츠 유형: 위의 샘플 HTTP 응답 헤더를 보면 "Content-Type\ 태그가 포함되어 있습니다. MIME 유형이라고도 하며 서버는 클라이언트에 전송하여 데이터 종류를 알려줍니다. 도움이 됩니다. 사용자를 위해 데이터를 렌더링하는 클라이언트 가장 많이 사용되는 MIME 유형 중 일부는 text/html, text/xml, application/xml 등입니다.

URL 이해

URL은 Universal Resource Locator의 약자이며 서버와 리소스를 찾는 데 사용됩니다. 웹의 모든 리소스에는 고유한 주소가 있습니다. 예를 들어 URL의 일부를 살펴보겠습니다. 웹 서버 가상 호스트는 특정 서버 인스턴스에 대한 요청 전송을 처리합니다. 8080 - 이것은 서버가 수신하는 포트이며 선택 사항이며 URL에 제공하지 않으면 요청이 프로토콜의 기본 포트로 이동합니다. 포트 번호 0~1023은 잘 알려진 서비스용으로 예약된 포트입니다. 예를 들어 HTTP의 경우 80, HTTPS의 경우 443, FTP의 경우 21 등입니다. FirstServletProject/jsps/hello.jsp - 서버에서 요청한 리소스입니다. 정적 html, pdf, JSP, 서블릿, PHP 등이 될 수 있습니다.

서블릿과 JSP가 필요한 이유는 무엇입니까?

웹 서버는 정적 콘텐츠 HTML 페이지에 적합하지만 동적 콘텐츠를 생성하는 방법이나 데이터를 데이터베이스에 저장하는 방법을 모르기 때문에 동적 콘텐츠를 생성하는 데 사용할 수 있는 다른 도구가 필요합니다. PHP, Python, Ruby on Rails, Java Servlet 및 JSP와 같은 동적 콘텐츠를 위한 여러 프로그래밍 언어가 있습니다. Java Servlet 및 JSP는 동적 응답 및 데이터 지속성을 지원하여 웹 서버의 기능을 확장하는 서버측 기술입니다.

자바 웹 개발

서블릿과 JSP를 사용한 최초의 웹 애플리케이션

package com.journaldev.first;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")})
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public static final String HTML_START="<html><body>";
	public static final String HTML_END="</body></html>";
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Date date = new Date();
		out.println(HTML_START + "<h2>Hi There!</h2><br/><h3>Date="+date +"</h3>"+HTML_END);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>

FirstServlet 프로젝트 다운로드

서블릿 Hello World 예제 프로젝트 다운로드

향후 게시물에서 서블릿 및 JSP에 대해 자세히 살펴보겠지만 이 게시물을 마치기 전에 Java 웹 애플리케이션의 몇 가지 측면을 잘 이해해야 합니다.

웹 컨테이너

Tomcat은 웹 컨테이너입니다. 클라이언트에서 웹 서버로 요청이 있을 때 요청을 웹 컨테이너와 웹 컨테이너 작업으로 전달하여 요청을 처리할 올바른 리소스(서블릿 또는 JSP)를 찾은 다음 응답을 사용합니다. 응답을 생성하고 웹 서버에 제공하는 리소스. 그런 다음 웹 서버는 응답을 다시 클라이언트로 보냅니다. 웹 컨테이너가 요청을 받고 서블릿용인 경우 컨테이너는 HTTPServletRequest 및 HTTPServletResponse라는 두 개의 객체를 생성합니다. 그런 다음 URL을 기반으로 올바른 서블릿을 찾고 요청에 대한 스레드를 생성합니다. 그런 다음 서블릿 service() 메서드를 호출하고 HTTP 메서드 service() 메서드를 기반으로 doGet() 또는 doPost() 메서드를 호출합니다. 서블릿 메서드는 동적 페이지를 생성하고 응답에 씁니다. 서블릿 스레드가 완료되면 컨테이너는 응답을 HTTP 응답으로 변환하여 다시 클라이언트로 보냅니다. 웹 컨테이너가 수행하는 중요한 작업 중 일부는 다음과 같습니다.

  • 통신 지원 - 컨테이너는 웹 서버와 서블릿 및 JSP 간의 쉬운 통신 방법을 제공합니다. 컨테이너 때문에 웹 서버의 요청을 수신하고 요청을 구문 분석하고 응답을 생성하기 위해 서버 소켓을 구축할 필요가 없습니다. 이 모든 중요하고 복잡한 작업은 컨테이너에서 수행되며 우리가 집중해야 할 것은 애플리케이션의 비즈니스 로직입니다.
  • 라이프사이클 및 리소스 관리 - 컨테이너는 서블릿의 라이프사이클 관리를 담당합니다. 컨테이너는 서블릿을 메모리에 로드하고, 서블릿을 초기화하고, 서블릿 메서드를 호출하고, 파괴하는 작업을 처리합니다. 컨테이너는 리소스 풀링 및 관리를 위한 JNDI와 같은 유틸리티도 제공합니다.
  • 멀티스레딩 지원 - 컨테이너는 서블릿에 대한 모든 요청에 대해 새 스레드를 생성하고 처리가 완료되면 스레드가 종료됩니다. 따라서 서블릿은 각 요청에 대해 초기화되지 않으며 시간과 메모리를 절약합니다.
  • JSP 지원 - JSP는 일반적인 Java 클래스와 같지 않으며 웹 컨테이너는 JSP를 지원합니다. 애플리케이션의 모든 JSP는 컨테이너별로 컴파일되어 서블릿으로 변환된 다음 컨테이너가 다른 서블릿처럼 관리합니다.
  • 기타 작업 - 웹 컨테이너는 리소스 풀을 관리하고, 메모리 최적화를 수행하고, 가비지 컬렉터를 실행하고, 보안 구성을 제공하고, 여러 응용 프로그램을 지원하고, 핫 배포 및 우리의 삶을 더 쉽게 만들어 주는 몇 가지 다른 작업을 배후에서 수행합니다.

웹 애플리케이션 디렉토리 구조

배포 설명자

web.xml 파일은 웹 응용 프로그램의 배포 설명자이며 서블릿(3.0 이전), 시작 페이지, 보안 구성, 세션 시간 초과 설정 등에 대한 매핑을 포함합니다. 자바 웹 응용 프로그램 시작 자습서의 전부입니다. 서블릿을 살펴보겠습니다. JSP는 향후 게시물에서 자세히 설명합니다. 업데이트: 이 시리즈의 다음 튜토리얼은 Java Servlets Tutorial입니다.