[ 최종 수정일 : 2023년 09월 20일 ]

 

 

 

자바빈즈의 표준 스펙에 대한 발행글입니다.

 

 


 

 

스펙에서 클래스 선언시, 아래와 같은 조건에 맞추어 선언된 클래스를 " 자바빈즈(JavaBeans) 클래스"라고 합니다.

이 클래스로부터 생성된 객체를 "자바빈(JavaBean) 컴포넌트, 자바빈, 빈" 다양하게 불리고 있습니다.

 

다음은 자바 빈즈의 특징입니다.

  1. 모든 필드는 private 접근제한자로 캡슐화(은닉화)해야 합니다.
  2. 각 필드별로 Getter/Setter 메서드를 가져야 합니다.
  3. 매개변수 없는 기본 생성자(Default Constructor)를 가지고 있어야 합니다.
  4. POJO 클래스이어야 합니다.
  5. [ Optional ] Serializable 태그 인터페이스를 implements해야 합니다.

 

자바 빈즈는 은닉화된 필드를 감추고 속성(property)만 외부에 노출시킵니다.

즉, 외부에서 빈 객체를 볼 때, 노출된 Getter/Setter 메서드에 의해 속성이 보이게 됩니다.

 

여기서 속성(Properties)이란,

카멜 기법이 적용된 Getter/Setter의 메서드에서 접두사(set, get)을 떼어내고 남은 메서드 이름이 속성으로 취급됩니다.

 

자바 빈즈 클래스는 다음과 같이 작성됩니다.
@NoArgsConstructor
public class Person {
    private String name;
    private Integer age;
    
    
    // 속성은 set을 제거한 'Name'
    public void setName(String name) {
        this.name = name;
    } // setName
    
    // 속성은 get을 제거한 'Name'
    public String getName() {
        return this.name;    
    } // getName
    
    // 속성은 set을 제거한 'Age'
    public void setAge(String Age) {
        this.Age = Age;
    } // setAge
    
    // 속성은 get을 제거한 'Age'
    public String getAge() {
        return this.Age;    
    } // getAge
    
} // end class

 

스프링에서 취급하는 클래스는 모두 자바 빈즈 스펙에 따라 만들어집니다.

 

 

 

 

JSP는 web.xml에서 예외처리를 태그로 정의합니다.

 

 


 

 

web.xml에서 예외 처리를 태그로 정의할 때, 두 가지 방법이 있습니다.

  • 상태 코드별 예외 처리
  • 타입별 예외 처리

 

 

상태 코드별 예외 처리

 

기본적인 문법은 다음과 같습니다.
<error-page>
  <error-code>에러코드 번호</error-code>
  <location>처리할 jsp가 위치한 디렉터리 주소</location>
</error-page>

 

만약 404 에러코드를 404.jsp로 처리하고자 한다면 아래와 같이 코드를 작성할 수 있습니다.

 

<error-page>
  <error-code>404</error-code>
  <location>/error/404.jsp</location>
</error-page>

 

 

타입별 예외 처리

 

기본적인 문법은 다음과 같습니다.
<error-page>
  <exception-type>java.lang.NullPointerException</exception-type>
  <location>예외를 처리할 jsp가 위치한 디렉터리 주소</location>
</error-page>

 

<exception-type> 태그에 발생하는 Exception의 주소를 넣어주시면 됩니다.

 

 

 

'웹 표준 > JSP' 카테고리의 다른 글

JSP 개요  (0) 2023.09.18

 

 

 

JSON(JavaScript Object Notation)은 자바스크립트 객체의 표현기호입니다.

 

 


 

 

 

Javascript To JSON

 

' about:blank '에서 개발자 도구를 활용해 기존 Javascript를 JSON으로 표현할 수 있습니다.

JSON.stringify(target)

 

Javascript
var obj = {
    name: "LEE",
    age: 25,
    hobby : ["독서","영화"]
}   =>

 

JSON
{
    "name": "LEE",
    "age": 25,
    "hobby" : ["독서","영화"]
}

 

 

자바스크립트에서는 객체를 생성할 때, 객체에 더블 코테이션을 사용하지 않습니다.

만약 자바스크립트를 JSON 문자열로 변환한다면 값은 그대로 두고, 객체에만 더블 코테이션을 씌우면 됩니다.

 


 

 

Java To JSON, Java From JSON

 

자바와 JSON은 구글의 변환 라이브러리인 GSON을 통해 문자열을 서로 변환할 수 있습니다.

[아파치 메이븐/의존성] - 라이브러리

 

 

JSON 관련 사이트

 

# Mockaroo

 

Mockaroo는 간단한 JSON 문자열 변환 사이트입니다.

https://www.mockaroo.com/

 

Mockaroo - Random Data Generator and API Mocking Tool | JSON / CSV / SQL / Excel

Mock your back-end API and start coding your UI today. It's hard to put together a meaningful UI prototype without making real requests to an API. By making real requests, you'll uncover problems with application flow, timing, and API design early, improvi

www.mockaroo.com

 

#JSONlink

 

Mockaroo와 동일한 용도입니다.

JSON 문자열을 변환합니다.

https://jsonlint.com/

 

The JSON Validator

JSONLint is the free online validator and json formatter tool for JSON, a lightweight data-interchange format. You can format json, validate json, with a quick and easy copy+paste.

jsonlint.com

 


 

# 대괄호, 중괄호

 

자바에서는 객체의 타입에 때라 JSON의 대괄호, 중괄호가 결정됩니다.

  1. POJO
    { "필드명": 값 }

  2. 배열 객체
    [ 원소값1, 원소값2, ... ] (요소는 어떤 참조타입도 가능)

  3. List 컬렉션
    [ 요소값1, 요소값2, ... ] (요소는 어떤 참조타입도 가능)

  4. Set 컬렉션
    [ 요소값1, 요소값2, ... ] (요소는 어떤 참조타입도 가능)

  5. Map 컬렉션
    { "키1": 값1, "키2":값2, ... }

  6. 중첩된 자바객체(POJO, 즉 필드가 부품(집합)관계임)
    { "필드명": { "필드명": 값, ... } }

  7. 중첩된 배열객체(POJO, 즉 필드가 부품(집합)관계임)
    { "필드명": [ 원소값1, 원소값2, ... ] }

 

 

 

 

 

[ 최종 수정일 : 2023년 09월 20일 ]

 

 

JSP는 MVC 패턴에서 View의 역할로 사용됩니다.

 

 


 

 

 

JSP 개요

 

 

 

JSP 동작 3단계

 

JSP 파일은 다음과 같이 3단계를 거쳐 실행됩니다.

  1. 변환 단계
    요청된 JSP 파일은 [ 파일명_jsp.java ]라는 파일명을 가진 서블릿으로 변환됩니다.

  2. 컴파일 단계
    변환된 서블릿을 컴파일합니다.
    JSP 파일에 문법적 에러가 있다면 컴파일 에러가 발생되어 변환되지 않고 [ 파일명_jsp.java ] 형식을 갖습니다.

  3. 실행 단계
    컴파일된 파일을 실행합니다.
    실행된 결과는 HTML형식으로 응답하며, 웹 브라우저에 예외가 출력되면 JSP 코드 디버깅이 필요합니다.

 

 

 

위 3단계를 거쳐 변환된 서블릿은 tomcat의 wrok 디렉터리의 하위 디렉터리에 저장됩니다.

저는 스쿱으로 톰캣을 설치했습니다.

 

변환된 서블릿 저장 위치

C:\app\scoop\apps\tomcat9\current\work\Catalina\localhost\ROOT\org\apache\jsp

 


 

서블릿 JSP 비교

 

  1. 형식
    서블릿 - Java 코드 내에 HTML 코드가 삽입되어 있는 형태입니다.

    JSP - HTML 코드내에 Java 코드가 삽입되어 있는 형태입니다.

  2. 목적
    서블릿 - 자바코드를 이용한 Business Logic 처리에 적합합니다. 따라서 MVC 패턴의 Controller 역할로 사용됩니다.
    JSP - 태그를 이용해서 Presentation Logic 처리에 적합합니다. 따라서 MVC 패턴의 View 역할로 사용됩니다.     

 


 

 

 

JSP 기본요소

 

 

 

다음은 JSP에서 사용 가능한 기본 태그 요소입니다.

  1. HTML 요소
  2. JSP 스크립팅 요소
  3. JSP 표준 액션태그 요소
  4. EL 요소
  5. 커스텀 태그 라이브러리 요소

 

 

 

JSP 스크립팅 요소

 

JSP 스크립팅 요소는 JSP 페이지가 서블릿으로 변환시, JSP 엔진에 의해 처리됩니다.

 

JSP Script Sintax
  • Conmment tag :    <%--     주석     --%>

  • Directive tag :    <%@     지시자     --%>

  • Declaration tag :    <%!     자바 선언문     %>

  • Scriptlet tag :    <%     자바코드     %>

  • Expression tag :    <%=     자바표현식     %>

 

 

 

Directive tag - JSP같은 서버 스크립팅 언어는 Include로 웹 페이지의 일부분을 다이나믹하게 구현합니다.
<%@page
    language="java"
    contentType="text/html;"
    pageEncoding="UTF-8"
%>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>메인 페이지</title>
</head>
<body>
    <h1>지시어 태그 실습</h1>
    내용 수정중입니다. 다음줄에 삽입됩니다. <br>

    <%@ include file="copyright.jsp" %>
</body>
</html>
<p>Copyright (c) ...... ALL rights reserved.</p>

JSP 만들 때, 생성되는 페이지 디렉티브는 변경하면 안됩니다.

 

 

 

 

Declaration tag -  JSP도 서블릿처럼 init, destroy callback을 구현할 수 있습니다.
<%@ page language="java" 
    contentType="text/html; charset=UTF-16LE"
    pageEncoding="UTF-16LE"%>
    
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Declare tag</title>
</head>
<body>
    <h1>Declaration tag JSP LifeCycle Method</h1>
    <%!
        String initMeg = "********jspInit Method********";
        String delMesg = "********jspDestroy Method********";

        public void jspInit() {
            System.out.println(initMeg);
        } // jspInit
        
        public void jspDestroy() {
            System.out.println(delMesg);
        } // jspDestroy
    %>

</body>
</html>

jspDestroy는 서버의 라이프사이클이 끝날 때 callback됩니다.

 

 

 

 

Scriptlet tag - service() 메서드에서 처리했던 작업을 JSP에서 사용 가능하게 지원하는 태그입니다. 
<%@ page language="java" 
         contentType="text/html; charset=UTF-16LE" 
         pageEncoding="UTF-16LE" %>
		 
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <h1>현재 날짜 출력 실습</h1>
    <%
        Date currentDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = dateFormat.format(currentDate);
    %>

    현재 날짜: <%= formattedDate %>

</body>
</html>

scriptlet tag

 

기본 패키지인 java.lang은 import 안해도 되지만, 그 외 페이지는 import 해야 합니다.

 


 

JSP 내장 객체

 

JSP의 내장 객체에 대한 간략한 설명입니다.

  • request 
    HttpServletRequest 객체를 참조

  • response
    HttpServletResponse 객체를 참조

  • out
    웹 브라우저 출력에 사용되는 JspWriter 객체를 잠조

  • session
    HttpSession 객체를  참조( true인 경우 사용 가능 )

  • application
    ServletContext 객체를 참조

  • config
    ServletConfig 객체를 참조

  • page
    자바 클래스의 this와 동일

  • exception
    발생되는 예외의 Throwable 객체에 대한 참조

 

 


 

 

 

JSP 표준 액션 태그

 

 

스크립팅 태그에는 많은 자바코드가 삽입되어 실행됩니다.

Presentation Login을 구현할 목적이기 때문에 Scriptlet tag로 인해 들어간 자바 실행 문장을 제거할 목적으로 만들어졌습니다.

 

여러가지 태그가 있지만 대표적으로 사용되는 세 가지 태그가 있습니다.

 

1. <jsp:useBean/> : 자바빈(javaBeans) 컴포넌트를 사용하기 위한 액션 태그

2. <jsp:set(get)Property/> : 자바빈 인스턴스에 데이터를 저장하기(얻기) 위한 액션 태그

3. <jsp:param/> : 전송 파라미터를 타겟으로 include나 forward할 때, 요청 파라미터를 추가하기 위한 태그

 

□ 자바 빈즈란

[웹 표준] - 자바 빈즈

 

 

 

 

 

'웹 표준 > JSP' 카테고리의 다른 글

JSP Exception  (0) 2023.09.19

 

 

파일 업로드와 파일 다운로드에 대한 발행글입니다.

 

 


 

 

 

파일 업로드 기능은 Commons FileUpload 라이브러리가 가장 많이 사용됩니다.

스프링 프레임워크에서도 사용되는 매우 안정적인 라이브러리이지만,

Servlet 3.0부터 @MultipartConfig 어노테이션과 javax.servlet.http.Part 인터페이스를 사용하여 보다 쉽게 파일 업로드 기능을 구현할 수 있습니다.

 

 


 

 

@MultipartConfig Attribute

사용 가능 속성 목록
  • maxFileSize : 업로드 파일 최대크기값, 기본값은 -1 (크기 제한 없음)
  • maxRequestSize : HTTP 요청의 최대크기값, 기본값은 -1 (크기 제한 없음)
  • location : 파일 저장 경로, 파일은 Part의 write 메서드가 호출될 때 저장됨

 

 

 

Part Interface Method

사용 가능 메서드 목록
  • String getName() : HTML 태그의 <form> 태그 이름을 반환한다. 태그명이 파트 이름이 됨
  • String contentType() : 파일의 contentType을 반환한다.
  • Collection getHeaderNames() : Part의 모든 헤더명을 반환한다.
  • getHeader(name) : 설정한 헤더의 값을 리턴한다.
  • writer(path) : 업로드한 파일을 출력한다.
  • delete() : 파일과 임시 파일을 삭제한다.
  • InputStream getInputStream() : 업로드한 파일의 내용을 InputStream 객체로 반환한다.

 

 

 

서블릿 컨테이너는 다운로드중인 임시 파일을 생성하고 저장합니다.

대량의 파일 업로드가 여러 사용자에 의해 발생할 때, 임시 파일로 인해 스토리지가 고갈되므로 delete()라는 커맨드를 사용해서 임시파일을 삭제해야합니다.

 

 

 

'웹 표준 > Servlet' 카테고리의 다른 글

Cookie  (0) 2023.09.15
Session Tracking  (0) 2023.09.14
FrontController, Command Patterns  (0) 2023.09.13
Request  (0) 2023.09.13
DTO, DAO, VO  (0) 2023.09.12

 

 

 

쿠키는 세션 트래킹 수행 시, 사용되는 작은 데이터 조각에 해당합니다.

 

 


 

쿠키는 응답 메세지의 헤더에 할당됩니다. 

 

 

쿠키 예시 ( 각 쿠키의 구분자는 세미콜론(;) )
Set-Cookie: name1=value1;name2=value2;...

 

 

쿠키를 응답 문서의 헤더에 할당하여 전송하면, 클라이언트의 쿠키 스토리지에 저장하며

이를 활용하여 클라이언트의 쿠키 스토리지를 이용한 세션 트래킹도 가능합니다.

 

이렇게 쿠키는 클라이언트가 웹 서버로 요청을 전송할 때, 반드시 요청 메세지의 헤더에 저장해서 보내야 합니다.

이는 웹 브라우저의 표준 동작 방식입니다.

 

 

 

 

'웹 표준 > Servlet' 카테고리의 다른 글

파일 업로드, 다운로드  (0) 2023.09.15
Session Tracking  (0) 2023.09.14
FrontController, Command Patterns  (0) 2023.09.13
Request  (0) 2023.09.13
DTO, DAO, VO  (0) 2023.09.12

 

 

 

세션 트래킹(Session Tracking)은 가상의 연결에 기반한 클라이언트의 상태를 지속적으로 모니터링하는 것을 의미합니다.

 

 

 


 

 

세션 트래킹의 목적

HTTP(Hyper Text Trasfer Protocol)은 하나의 요청과 하나의 응답으로 이루어진 전송 프로토콜입니다.

즉 HTTP는 상태 정보를 유지할 수 없는 프로토콜이므로, 이를 보완하기 위해 세션 트래킹이라는 추상적인 개념을 도입했습니다.

 

이러한 세션 트래킹의 핵심은 인증 관리입니다.

세션 트래킹은 클라이언트의 인증 상태와 인가 상태의 변화를 지속적으로 모니터링하며 접근 제어를 하는 것을 목적으로 합니다.

 

 

 

 

세션 식별자

동시에 요청을 보내는 수 많은 클라이언트를 고유하게 식별해야만 각 클라이언트의 상태를 트래킹할 수 있습니다.그래서 세션 ID를 통해 각 클라이언트를 식별하여 트래킹을 수행합니다.

 

간단한 서블릿 코드를 작성하고 cmd를 통해 세션 ID를 확인합니다.
@Log4j2
@NoArgsConstructor

@WebServlet("/TTT")
public class TTTServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

	
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res) 
        throws ServletException, IOException {
        log.trace("service(req, res) invoked.");
		
		
        HttpSession session = req.getSession();
		
    } //service

} // end class

 

 

즉, 최초로 요청을 전송한 클라이언트에게 서버가 쿠키를 통해 세션 ID를 부여하고 한번 세션 ID를 부여받은 클라이언트는 다음 요청 전송 시, 요청 헤더에 세션 ID를 함께 할당하여 전송합니다.그럼 서버는 해당 요청과 세션 ID를 함께 수신함으로서, 세션 트래킹이 수행되며 이러한 세션 ID는 서블릿의 공유 데이터 영역인 Session Scope에 할당됩니다.

 

[서블릿] - 쿠키

 

 

 

'웹 표준 > Servlet' 카테고리의 다른 글

파일 업로드, 다운로드  (0) 2023.09.15
Cookie  (0) 2023.09.15
FrontController, Command Patterns  (0) 2023.09.13
Request  (0) 2023.09.13
DTO, DAO, VO  (0) 2023.09.12

 

 

 

FrontController, Command 디자인 패턴에 대한 발행글입니다.

 


 

 

 

FrontController

FrontController는 클라이언트의 요청을 처리하기 위한 최초 진입점을 정의하는 디자인패턴입니다.

모든 사용자의 요청을 한 곳에 집중시켜 중복된 코드를 제거하고 요청을 분산시키는 방식으로 동작합니다.

 

FrontController 패턴을 적용한 서블릿에서 고려해야 되는 사항은 클라이언트가 어떤 동작을 요청했는지 식별할 수 있어야 합니다.

 

클라이언트 요청 식별 매커니즘
http://서버IP번호:포트번호/context명/식별값

 

클라이언트는 명시적으로 URL에 식별값을 추가하고 요청하고, 서블릿은 '식별값'을 비교해서 어떤 요청인지를 구별합니다.

여기서 '식별값'은 임의의 문자열값입니다. 일반적으로 "XXX.do" 같은 방식으로 지정합니다.

 

 

 

Command

Command는 클라이언트의 요청을 클래스 객체로 처리하는 것을 의미합니다.객체의 형태로 사용하면 서로 다른 클라이언트의 요청값을 필요에 의해서 저장하거나 취소가 가능하며요청을 처리할 작업을 일반화시켜 요청의 종류와 무관하게 프로그램 작성이 가능하게 구현할 수 있습니다.

 

구현방법은 Command 패턴을 적용한 Service 클래스를 추가하며 이름은 "XXXXService" 처럼 짓습니다.
EX) InsertService  |  DeleteService  |  UpdateService  |  SelectService

 

Command 패턴을 적용한Service 클래스는 작업 수행을 요청하는 객체인 서블릿실제 작업을 수행하는

객체

분리시켜주기 때문에 관계를 느슨하게 할 수 있습니다.

 

 

 

 

 

 

 

'웹 표준 > Servlet' 카테고리의 다른 글

Cookie  (0) 2023.09.15
Session Tracking  (0) 2023.09.14
Request  (0) 2023.09.13
DTO, DAO, VO  (0) 2023.09.12
Connection Pool  (0) 2023.09.08

+ Recent posts