자바웹개발 워크북

자바웹개발 워크북(1)

rjqnrdl83 2024. 12. 30. 23:06

1.1 자바 웹 개발환경 만들기

 

대부분의 웹 프로젝트는 아래 사진 구조처럼 이루어집니다.

브라우저: 서버에서 전송한 결과를 화면에 보여주고 사용자의 화면 조작을 이용해 서버에 원하는 데이터를 보내고 받는 프로그램

관련 기술:HTML/CSS/자바스크립트

 

웹 서버 혹은 WAS

이미지와 같은 고정된 데이터를 제공하거나 동적으로 매번 새로운 데이터를 만들어낼 수 있는 WAS

관련 기술: 서블릿/JSP/각종 프레임워크와 언어들

 

데이터베이스

영구적으로 데이터를 보관하고 운영하기 위한 프로그램으로 기본적으로 관계형 패러다임을 이영한 관계형 데이터베이스를 사용

관련 기술: SQL/데이터베이스 설계와 구현

 

어노테이션(Annotation)은 주로 코드상에 추가적인 정보를 남겨두거나 특정 코드에 대한 추가적인 처리나 설정을 위해서 사용합니다.

 

톰캣 설정과 웹프로젝트 생성

 

Tomcat Server를 지정하고 압축을 풀어둔 경로를 지정합니다.

버전은 Java EE8, 라이브러리는 기본적으로 설정된 Servlet만 지정한 상태로 생성합니다.

 

한글에 대한 처리는 [Help] 에서 [Edit Custom VM Options]를 선택하면 -Xmx 설정이 있습니다. 맨 아래에       

-Dfile.encoding=UTF-8, -Dconsole.encoding=UTF-8 설정을 추가합니다.

 

브라우저의 주소창을 간결하게 만들기 위해 [Edit Configurations]를 선택합니다.

상단의 [Deployment]를 선택하고[-]를 눌러 제거 후 [+]를 눌러 Artifact를 (explode)가 포함된 항목으로 지정합니다. Application Context의 값은 /로 지정합니다.

 

 

 

 

코드를 변경한 후에는 톰캣을 재시작해야 합니다. 재시작을 최소화하기 위해 'Edit Configurations'의 설정을 사진처럼 조정합니다.

 

서블릿 코드 작성하기

MyServlet 을 생성해 HttpServlet을 상속하고 @WebServlet을 이용해 서블릿의 경로를 지정했습니다.

package com.example.webapp;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name= "MyServlet", urlPatterns = "/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println("<html><body>");
        out.println("<h1>My Servlet</h1>");
        out.println("</body></html>");
    }
}

doGet은 브라우저의 주소를 직접 변경해서 접근하는 경우에 호출되는 메소드입니다.

프로젝트를 재시작하고 주소를 사진과 같이 변경하면 사진과 같은 결과를 확인할 수 있습니다.

 

JSP 코드 작성하기

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Test JSP PAGE</h1>

</body>
</html>

 

1.2 웹 기본 동작 방식 이해하기

웹 애플리케이션을 작성하려면 서버와 브라우저간의 관계를 이해해야합니다.

 

REQUSEST/RESPONSE

브라우저는 자신이 원하는 정보를 전달하기 위해서 두 가지 방식을 이용합니다.

GET방식: 주소창에 직접 원하는 데이터를 적거나 링크를 클릭해서 호출

-주로 특정한 정보를 조회하는 용도로 사용

 

POST방식: 입력 화면에서 필요한 내용을 작성한 후에 전송과 같은 버튼 등을 클릭해서 호출

-웹 화면을 통해서 실제 처리가 필요한 작업에 사용(회원 가입, 로그인)

 

서버는 브라우저로 응답을 보내는데 정적 데이터인지 동적 데이터인지에 따라 다르게 처리합니다.

정적 데이터: 항상 동일하게 고정된 데이터를 전송(주로 파일로 고정된 HTML, CSS, 이미지 파일)

동적 데이터: 매번 필요할 때마다 다른 데이터를 동적으로 구성해서 전송

 

정적 데이터를 보내는 역할만 수행하는 서버는 '웹서버'

동적 데이터를 만들어 보내는 경우 '웹 애플리케이션 서버(WAS)'

 

HTTP

브라우저의 요청과 서버의 응당 사이에는 약속을 통해서 처리되는데 이러한 데이터 교환 약속을 '프로토콜(protocol)'이라고 하고 웹에서는 'HTTP(Hyper Text Transfer Protocol)'라는 데이터 방식으로 데이터를 주고 받습니다.

 

브라우저에서 전송할 때 뿐 아니라 서버에서 데이터를 전송할 때도 사용합니다. 브라우저에서 데이터를 보낼 때(요청)의 데이터와 서버에서 보낼 때(응답)의 메시지는 내용과 구성이 조금 다릅니다.

 

비연결성

웹의 특성상 여러 사용자가 브라우저를 통해서 서버를 호출하는 구조이기에 서베에서는 최대한 많은 사용자에게 서비스를 제공하기 위해 비연결성이라는 방식을 택했습니다. 이는 하나의 요청과 응답을 처리한 후 연결을 종료한다는 것을 의미합니다.(웹 페이지에서 특정 결과를 다시 확인하기 위해 새로 고침을 해야합니다. 그 이유는 이미 브라우저와 서버의 연결이 끝났기 때문에 다시 연결하지 않으면 과거의 결과만이 남기 때문입니다.)

 

자바 서버 사이드 프로그래밍

 

서버 사이드 프로그래밍은 서버 쪽에서 프로그래밍을 통해 데이터를 처리할 수 있도록 구성하는 것을 의미합니다. 개발 시 다음을 고려해야 합니다.

-동시에 요청이 들어온다면 어떻게 처리해야 하는가?

-서버에 문제가 생기면 이를 어떻게 처리해야 하는가?

-어떤 방법으로 데이터 전송을 최적화할 수 있을까?

-분산 환경이나 분산 처리와 같은 문제들은?

  분산 환경: 여러 대의 컴퓨터나 서버가 네트워크로 연결되어 하나의 시스템처럼 동작하는 환경

  분산 처리: 하나의 작업이나 데이터를 여러 대의 컴퓨터(노드)로 나누어 동시에 처리하는 기술

 

새로운 서비스를 개발할 때마다 이런 고민을 한다면 엄청난 시간과 비용이 소모됩니다. 이러한 처리를 JavaEE라는 기술 스펙으로 정리해두었고 Servlet과 JSP도 이에 속합니다.

 

서블릿

 

가장 기본적인 기술인 서블릿은 서버에서 동적으로 요청과 응답을 처리할 수 있는 API들을 정의한 것.

JSP는 서블릿과 같은 원리지만 HTML을 쉽게 이용할 수 있는 방식으로 코드를 작성할 수 있기 때문에 서블릿으로는 코드를 이용한 처리, JSP로는 화면개발같이 분담해 개발하는 것이 일반적입니다.

 

서블릿 컨테이너: 서블릿을 실행 및 관리하는 소프트웨어 컴포넌트

일반 자바프로그램과 비교했을 때 다음과 같은 점들이 달라집니다.

  • 객체를 생성하거나 호출하는 주체는 사용자가 아닌 서블릿 컨테이너가 하게 됩니다.
  • 서블릿 클래스에서 생성하는 객체의 관리 자체가 서블릿 컨테이너에 의해서 관리됩니다.
  • 서블릿/JSP의 코드 개발은 기본적인 자바 API와 더불어 서블릿 API도 같이 사용해야합니다.

JSP 기술

 

JSP는 'Java Server Pages'의 약자로 서블릿 기술과 동일하게 서버에서 동적으로 데이터를 구성하는 기술입니다.

JSP 기술은 HTML 코드를 그대로 이용하고 필요할 때 약간의 자바코드를 넣는 반면에

서블릿 코드자바코드를 이용해서 HTML문자열을 만들어내는 방식의 차이가 있습니다.

JSP는 서블릿과 같은 목적이지만 브라우저에 보내는 HTML 데이터를 만들어내는데 좀 더 특화된 기술입니다.

 

요약하면 다음과 같습니다.

  • 서블릿/JSP 둘다 Java EE 스펙의 일부
  • 서블릿/JSP를 실행하기 위해서는 서블릿 컨테이너가 필요
  • 서블릿 컨테이너가 서블릿/JSP 객체를 생성하고 생명주기를 관리
  • JSP는 내부적으로 서블릿과 같은 방식의 코드로 변환됨
  • JSP는 HTML 내에 자바코드를 추가하는 방식, 서블릿은 자바코드안에 HTML코드를 추가하는 방식

GET/POST

  GET POST
주용도 조회 등록.수정.삭제와 같은 처리
구성 URL 두의 '?'와 쿼리 스트링 URL전달 후 HTTP몸체로 쿼리 스트링
효과 사용자가 손쉽게 사용할 수 있는 링크를 제공할 수 있음 단순 조회가 아니라 원하는 작업을 처리할 수 있게 됨
한계 - 브라우저에 따라 길이의 제한
- URL 뒤의 쿼리 스트링으로 모든 정보가 전달되는 단점
- 쿼리 스트링 길이에 대한 제한
- GET 방식에 비해서 많은 양의 데이터를 전송함
- 주소창만으로는 테스트가 어려움

URL 뒤의 쿼리 스트링으로 모든 정보가 전달되는 단점

이게 왜 단점인가라는 궁금증에 더 공부해본 결과

  • URL에 데이터가 포함되므로, 민감한 정보(예: 비밀번호, 계좌정보, 인증 토큰 등)가 쉽게 노출될 수 있습니다.
  • 쿼리 스트링에 많은 정보를 담아야 할 경우, 길이 제한을 초과하여 요청이 실패할 수 있습니다. 따라서 대량의 데이터전송에는 적합하지 않습니다.
  • 동적으로 변해야 하는 데이터가 캐싱 문제로 인해 최신 상태가 아닌 데이터를 반환할 가능성이 있습니다.
  • URL에 많은 쿼리 스트링이 포함되면, URL이 길어지고 가독성이 떨어집니다.

1.3 WEB MVC

 

JSP를 이용한 개발 방식의 경우 유지보수나 URL 변경 등은 유연하지 못하다는 단점이 부각되며 MVC형식을 이용

웹 MVC라는 구조는 Mode - View -Controller의 역할을 분리해서 처리하는 구조로 데이터는 컨트롤러에서 결과는 뷰에서 처리합니다.

 

MVC 구조로 설계하는 계산기 

(1) 컨트롤러에서 뷰 호출

package com.example.webapp.calc;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet( name= "inputController", urlPatterns = "/calc/input")
public class InputController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("InputController...doGet...");
        RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/calc/input.jsp");
        dispatcher.forward(req, resp);
    }
}

@WebServlet으로 UrlPatterns 속성을 지정해서 처리해야 하는 경로를 지정했습니다.

부모 클래스인 HttpServlet의 doGet()을 재정의하고

Get방식으로 들어오는 요청에 대해서만 처리하도록 했습니다.

가장 핵심은 RequestDispatch를 이용해서 forward()를 실행한 부분입니다. RequestDispatcher은 서블릿에 전달된 요청을 다른쪽으로 전달하는 객체입니다. 이를 이용하면  InputController가 /WEB-INF/calc/input/jsp 라는 목적지로 가는 경유지가 되는 것입니다.

 

(2) POST 방식을 통한 처리 요청

서블릿은 doPost()라는 메소드를 오버라이드해서 POST 방식으로 들어오는 요청을 처리할 수 있기 때문에 기존의 InputController에 doPost()를 추가하거나 새로운 서블릿을 생성해서 작성하면 됩니다. 

package com.example.webapp.calc;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name="calcController", urlPatterns = "/calc/makeResult")
public class CalcController extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String num1 = req.getParameter("num1");
        String num2 = req.getParameter("num2");
        
        System.out.printf(" num1: %s",num1);
        System.out.printf(" num2: %s",num2);
    }
}

urlPatterns 속성값이 '/calc/makeResult'로 지정되어 있음-브라우저에서 <form> 태그의 submit 경로를 수정할 필요가 있습니다.

doPost()를 오버라이드-브라우저에서 POST 방식으로 호출하는 경우에만 호출이 가능하게 됩니다.

req.getParameter()라는 메소드를 이용해서 쿼리 스트링으로 전달되는 num1, num2 파라미터를 처리하고 있으며 이때 숫자가 아닌 문자열로 처리하고 있습니다. JSP에서는 ${param.num1}과 같이 단순하게 사용하지만 서블릿에서는 HttpServletRequest라는 API를 사용해야 합니다.

 

(3) sendRedirect()

POST 방식의 처리는 가능하면 빨리 다른 페이지를 보도록 화면을 이동시키는 것이 좋습니다. 이때 사용하는 메소드가 HttpServletRespone의 sendRedirect()입니다.

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String num1 = req.getParameter("num1");
        String num2 = req.getParameter("num2");

        System.out.printf(" num1: %s",num1);
        System.out.printf(" num2: %s",num2);
        
        resp.sendRedirect("/index");
    }

CalcController의 doPost()를 수정했습니다.

프로젝트를 재실행해서 입력하면 /index 경로로 이동됩니다.

 

PRG패턴(Post-Redirect-get)

 

웹 MVC 구조에서 가장 흔하게 사용하는 패턴은 Post방식과 Redirect를 결합한 PRG패턴입니다.

PRG 패턴은 웹 애플리케이션에서 사용자 경험을 개선하고, 중복 데이터 전송(예: 폼 재제출)을 방지하기 위해 사용하는 웹 개발 패턴입니다.

  • 사용자는 컨트롤러에 원하는 작업을 POST 방식으로 처리하기를 요청
  • Post 방식을 컨트롤러에 처리하고 브라우저는 다른 경로로 이동하라는 응답
  • 브라우저는 Get방식으로 이동

 

PRG 패턴을 게시판으로 예를 들어본다면

1. 사용자가 새로운 게시글의 내용을 작성하고  POST방식으로 전송

2. 서버에서 새로운 게시글을 처리한 후에 브라우저의 주소를 목록 화면 경로로 이동하도록 응답

3. 브라우저는 목록 화면을 보여주고 사용자는 자신이 추가한 게시글이 추가된 결과를 확인

 

POST방식의 처리 후에 바로 다른 주소로 브라우저가 이동되기에 반복적으로 POST호출이 되는 상황을 막을 수 있으며 사용자의 입장에서도 처리가 끝나고 다시 처음 단계로 돌아간다는 느낌을 받게 됩니다.

장점

  • 중복 데이터 방지: 폼 재제출로 인한 데이터 중복 전송을 차단합니다.
  • URL 공유 가능: 결과 페이지를 쉽게 북마크하거나 공유할 수 있습니다.
  • HTTP 요청 역할 분리: POST는 데이터 전송, GET은 데이터 조회로 요청 구조가 명확해집니다..

단점

  • 추가 요청 발생: POST → Redirect → GET으로 인해 요청이 최소 2번 발생합니다.
  • 복잡성 증가: 간단한 요청에서도 리다이렉션 처리가 필요해 코드가 다소 복잡해질 수 있습니다..

1.4 HttpServlet

  • Get/Post 등에 맞게 doGet(), doPost() 등을 제공하므로 본인에게 필요한 메소드를 오버라이드하는 것만으로 GET/POST 방식 처리를 나누어서 처리할 수 있습니다.
  • HttpServlet을 상속받은 클래스 객체는 톰캣과 같은 WAS의 내부에서 자동으로 객체를 생성하고 관리하기 때문에 개발자가 객체 관리에 신경 쓸 필요가 없습니다.
  • 멀티 스레드에 의해서 동시에 실행될 수 있도록 처리되기 때문에 많은 사용자를 어떻게 처리해야 하는지에 대한 고민을 줄일 수 있습니다.

HttpServlet의 라이프사이클

 

서블릿은 기본적으로 요청을 처리해서 응답을 목적으로 설계되었습니다. 다만 웹이라는 특수한 환경으로 인해서 개발자가 직접 객체를 생성하는 대신에 톰캣에서 객체들을 관리합니다.(이 때문에 서블릿 관점에서 톰캣은 서블릿 컨테이너라는 의미로 바라볼 수 있습니다.)

서블릿 클래스들은 다음과 같은 과정을 통해서 처리됩니다.

 

  • 브라우저가 톰캣에 서블릿이 처리해야 하는 특정한 경로를 호출합니다.
  • 톰캣은 해당 경로에 맞는 서블릿 클래스를 로딩하고 객체를 생성합니다. 이 과정에서 init()라는 이름의 메소드를 실행해서 서블릿 객체가 동작하기 전에 수행해야 하는 일들을 처리할 수 있습니다.
  • 생성된 서블릿 객체는 브라우저의 요청에 대한 정보를 분석해서 GET/POST 등의 정보와 함께 같이 전달되는 파라미터들을 HttpServletRequerst라는 타입의 파라미터로 전달받습니다. 이 과정에서 응답을 처리하는데 필요한 기능들은 HttpServletResponse라는 타입의 객체로 전달 받습니다.
  • 서블릿 내부에서는 GET/POST에 맞게 doGet()/doPost() 등의 메소드를 실행합니다. 이 후 동일한 주소의 호출이 있을 때 서블릿은 동일한 객체 하나만을 이용해서 이를 처리합니다.
  • 톰캣이 종료될 때는 서블릿의 destroy()라는 메소드를 실행합니다.
기능 메소드 설명
HTTP 헤더 관련 getHeaderNames()
getHeader(이름)
HTTP 헤더 내용들을 찾아내는 기능
사용자 관련 getRemoteAddress 접속한 사용자의 IP주소
요청관련 getMethod()
getRequestURL()
getRequestURL()
getServletPath()
GEt/POST 정보, 사용자가 호출에 사용한 URL 정보 등
쿼리 스트링 관련 getParameter()
getParameterValues()
getParameterNames()
쿼리 스트링 등으로 전달되는 데이터를 추출하는 용도
쿠키 관련 getCookies()  브라우저가 전송한 쿠키 정보

전달 관련 getRequestDispathcer()

 
데이터 저장 setAttribute() 전달하기 전에 필요한 데이터를 저장하는 경우에 사용

 

getParameter()

가장 빈번하게 사용하는 메소드로 '?name=AAA&age=20'과 같은 쿼리 스트링에서 'name' 이나 'age'라는 키를 이용해서 값을 얻어내는 역할

결과는 항상 String이며 해당 파일에 파라미터가 존재하지 않는다면 null을 반환할 수 있습니다.

 

getParameterValues()

동일한 이름의 파라미터가 여러개 있는 경우에 사용합니다.

 

setAttribute()

JSP로 전달할 데이터를 추가할 때 사용합니다. key와 value의 형태로 데이터를 저장할 수 있습니다. key는 문자열, value는 모든 객체타입을 이용할 수 있습니다.

 

RequestDispatcher

웹 MVC구조에서는  HttpServletRequest getRequestDispatcher()을 이용해서 RequestDispatcher 타입의 객체를 구할 수 있습니다. RequestDispathcer현재의 요청을 다른 서버의 자원에게 전달하는 용도로 사용합니다.

RequestDispatcher에는 2개의 메소드가 존재합니다.

1. forward(): 현재까지 모든 응답을 무시하고 JSP가 작성하는 내용만을 브라우저로 전달.

2. include(): 지금까지는 만들어진 응답내용+ JSP가 만든 내용을 브라우저로 전달

개발에서는 거의 forward()만 사용

 

HttpServletResponse의 주요 기능

 

HttpServletRequest가 주로 읽는 기능을 제공한다면 HttpServletResponse쓰는 기능을 담당합니다.

기능 메소드 설명
MIME타입 setContentType() 응답 데이터의 종류를 지정
헤더 관련 setHeader() 특정 이름의 HTTP 헤더 지정
상태 관련 setStatus() 404, 200, 500 등 응답 상태 코드 지정
출력 관련 getWriter() PrintWriter를 이용해서 응답 메시지 작성
쿠키 관련 addCoockie() 응답 시에 특정 쿠키 추가
전달 관련 sendRedirect() 브라우저에 이동을 지시

 

sendRedirect()

 

웹MVC 구조에서 HttpServletResponse는 JSP에서 주로 처리되기 때문에 서블릿 내에서 직접 사용되는 일은 많지 않고 주로 sendRedirect()를 이용하는 경우가 많습니다.

sendRedirect()는 브라우저에게 다른 곳으로 가라는 응답 메시지를 전달합니다. HTTP에서 Location이름의 HTTP헤더로 전달되는데 브라우저는 Location이 있는 응답을 받으면 화면을 처리하는 대신에 주소창에서 지정된 주소로 이동하고 다시 호출하게 됩니다. 

sendRedirect()를 사용하면 브라우저의 주소가 아예 변경되지 않기 때문에 사용자의 새로고침과 같은 용청을 방지하며 특정한 작업이 완전히 끝나고 새로 시작하는 흐름을 만들 수 있다는 장점이 있습니다.

 

(1) TodoListController 

@WebServlet(name= "todoListController", urlPatterns = "/todo/list")
public class TodoListController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("/todo/list");
        req.getRequestDispatcher("/WEB_INF/todo/list.jsp")
                .forward(req, resp);
    }
}

 

@WebServlet(name="todoRegisterController", urlPatterns = "/todo/register")
public class TodoRegisterController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("입력화면을 볼 수 있도록 구성");
        RequestDispatcher dispatcher= req.getRequestDispatcher("/WEB-INF/todo/register.jsp");
        dispatcher.forward(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("입력을 처리하고 목록 페이지로 이동");
        resp.sendRedirect("/todo/list");
    }
}

GET방식으로 호출되는 경우에는 입력할 수 있는 화면을 보여주고 POST 방식으로 호출되는 경우에는 등록이 처리된 후에 다시 목록 페이지로 호출하게 됩니다.(sendRedirect)

1.5 모델

 

모델과 3티어

 

웹MVC입장에서 모델은 컨트롤러에 필요한 기능이나 데이터를 처리해주는 존재이지만 시스템 전체 구조로 보면 모델은 컨트롤러와 뷰를 제외한 남은 부분입니다.

 

DTO(Data Transfer Object)

 

3티어와 같이 계층을 분리하는 경우 반드시 계층이나 객체들간에 데이터 교환이 이루어집니다. 이 경우 대부분 한 개 이상의 데이터를 전달할 때가 많기 때문에 여러 데이터를 묶어서 하나의 객체로 전달하는데 이를 DTO라고 합니다.

여러 데이터를 묶어서 필요한 곳에 전달하거나 호출을 결과로 받는 방식으로 사용하기에 특별한 규격이나 제약은 없지만 대부분 Java Beans형태로 구성합니다.

  • 생성자가 없거나 반드시 파라미터가 없는 생성자 함수를 가지는 형태
  • 속성은 private으로 작성
  • getter/setter를 제공

서비스 객체

 

DTO는 여러 데이터를 묶어서 하나의 객체를 구성하는 용도로 사용하고 주로 서비스 객체 메소드들의 파라미터나 리턴 타입으로 사용됩니다.

서비스 객체는 간단히 기능(로직)들의 묶음이라고 할 수 있습니다. 프로그램이 구현해야 하는 기능들의 실제 처리를 담담한다고 생각하면 됩니다.

 

JSP-EL(Expression Language)

 

JSP코드에서 사용하는 '${}'는 EL의 표현식입니다. JSP는 주로 HTML태그들과 자바스크립트, CSS등을 이용해서 코드를 작성합니다.

 

EL을 이용한 출력

 

EL을 이용한 경우에는 자동으로 getter를 호출합니다. 

private으로 처리되어 있으면 자바에서는 외부에서 바로 접근이 불가능하지만 EL은 gett를 호출합니다. EL은 '${}'내부에 표현식이 결과를 만들어낼 수 있다면 언제든 사용이 가능합니다.

 

'자바웹개발 워크북' 카테고리의 다른 글

자바웹개발 워크북(6)  (1) 2025.01.20
자바웹개발 워크북(5)  (0) 2025.01.16
자바웹개발 워크북(4)  (0) 2025.01.05
자바웹개발 워크북(3)  (0) 2025.01.02
자바웹개발 워크북(2)  (0) 2025.01.01