01번

스크립트 태그의 세가지 종류에 대해서 간단히 설명하시오.

선언부 태그, 표현부 태그, 스크립틀릿 3가지로 나뉘어진다.

선언부 태그에는 변수나 메소드 등을 선언 할 수 있다. 이 때 선언되는 변수들은 전역변수이다.
표현부 태그는 웹 브라우저에 출력할 부분을 표현한다. 세미콜론이 없이 선언이 가능하다.
스크립틀릿 태그는 메소드 없이 변수만을 선언할 수 있다.그리고 _jspService() 메소드 내부에 배치된다.

02번

선언문 태그와 스크립틀릿 태그의 차이점을 설명하시오

스크립태그는 메소드 없이 변수만을 선언할 수 있다. 그리고 _jspService() 메소드 내부에 배치된다.
하지만 선언부 태그는 변수 뿐만 아니라 메소드를 선언할 수 있다. 그리고 _jspService() 메소드가 외부에 배치된다.

03번

애플리케이션 실행 결과에는 보이지 않는 JSP 주석 표기법은 무엇인가?

<% -- JSP주석 처리 내용 -- %>

04번

선언문 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고, 실행 결과를 확인하시오.

  1. declartion.jsp 파일을 생성합니다.
    • 선언문 태그에 문자형 전역변수를 선언하여 'Hello, Java Server Pages'를 저장합니다.
    • 문자형 변수 값을 반환하는 전역메소드 getString()을 작성합니다.
    • getString() 메소드를 호출하여 문자형 변수 값을 출력합니다.
  2. 웹 브라우저에 'http://localhost:8080/Exercise/ch02/declaration.jsp'를 입력하여 실행결과를 확인합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>declaration</title>
</head>
<body>
    <%!
        String str = "Hello, Java Server Pages";
        String getString(String str) {
            return str;
        }
    %>
    <%
        out.println(getString(str));
    %>
</body>
</html>

05번

스크립틀릿 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고, 실행 결과를 확인하시오.

  1. scriptlet.jsp 파일을 생성합니다.
    • 스크립틀릿 태그를 이용하여 java.util.Date 형 지역변수에 현재 날짜를 저장합니다.
    • 현재 날짜를 출력합니다.
  2. 웹 브라우저에 'http://localhost:8080/Exercise/ch02/scriptlet.jsp'를 입력하여 실행결과를 확인합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>scriptlet</title>
</head>
<body>
    <% java.util.Date date = new java.util.Date(); %>
    Today : <% out.println(date); %>
</body>
</html>

06번

표현문 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고, 실행 결과를 확인하시오.

  1. expression.jsp 파일을 생성합니다.
    • 표현문 태그에 java.util.Calendar 클래스를 이용하여 현재 시간을 출력합니다.
  2. 웹 브라우저에 'http://localhost:8080/Exercise/ch02/expresssion.jsp'를 입력하여 실행결과를 확인합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    Current Time: <%= java.util.Calendar.getInstance().getTime() %>
</body>
</html>

스크립트태그(script tag)

HTML 코드에 자바 코드를 넣어 프로그램이 수행하는 기능을 구현할 수 있다. 선언문, 스크립틀릿, 표현문 3가지의 종류가 있으며, 모두 <% ··· %>를 사용한다.

스크립트 태그의 종류

스크립트 태그 형식 설명
선언문(declaration) <%! ··· %> 자바 변수나 메소드를 정의하는데 사용한다.
스크립틀릿(scriptlet) <% ··· %> 자바 로직 코드를 작성하는 데 사용한다.
표현문(expression) <%= ··· %> 변수, 계산식, 메소드 호출 결과를 문자열 형태로 출력하는 데 사용한다.

주의점으로는, 표현문 태그의 경우에는 서블릿 프로그램에서 out.print() 메소드의 매개변수가 되기 때문에 세미콜론(;)을 사용해서는 안된다.

선언문 태그의 형식

<%! 자바코드; %>

선언문 태그의 기능과 사용법

선언문(declaration) 태그는 변수나 메소드 등을 선언하는 태그이다.
_jspService()메소드 외부에 배치되므로 JSP 페이지 임의의 위치에서 선언할 수 있다.
선언문 태그로 선언된 변수는 서블릿 프로그램으로 번역될 때 클래스 수준의 멤버 변수가 되므로 전역변수로 사용된다.
그렇기 때문에, 스크립틀릿 태그보다 나중에 선언해도 스클립틀릿 태그에서 사용할 수 있다.

스크립틀릿 태그의 형식

<% 자바코드; %>

스크립틀릿 태그의 기능과 사용법

스크립틀릿(scriptlet) 태그는 자바 코드로 이루어진 로직 부분을 표현한다.
또한, out 객체를 사용하지 않고도 HTML 응답을 만들어낼 수 있다.
스크립틀릿 태그는 가장 일반적으로 사용되며 변수 또는 메소드 선언, 유효식 등 다수를 포함할 수 있다.
모든 텍스트, HTML 태그 또는 JSP 요소는 스크립틀릿 태그 외부에 있어야한다.

선언문 태그와 스크립틀릿 태그의 비교
선언문 태그 스크립틀릿 태그
변수뿐만 아니라 메소드를 선언할 수 있다. 메소드 없이 변수만을 선언할 수 있다.
_jspService() 메소드 외부에 배치된다. _jspService() 메소드 내부에 배치된다.

표현문 태그의 형식

<%= 자바코드 %>

표현문 태그의 기능과 사용법

표현문(expression) 태그는 웹 브라우저에 출력할 부분을 표현한다.
표현문 태그를 이용하여 선언문 태그 또는 스크립틀릿 태그에서 선언된 변수나 메소드의 반환값을 외부로 출력할 수 있다.
표현문 태그는 스크립틀릿 태그에서 사용할 수 없으므로, out.print()메소드를 사용해야한다.
표현문 태그에는 숫자, 문자, 불린 등의 기본 데이터 타입과 자바 객체 타입 사용이 가능하다.
그리고 표현문 태그에 작성된 모든 자바 코드의 값은 문자열로 변환되어 웹 브라우저에 출력된다.
기본 데이터 타입은 toString()을 통해서 출력되고, 자바 객체 타입은 java.lang.Object 클래스의 toString() 메소드를 사용하거나, 자체에서 선언한 toString()을 사용하여 출력된다.

JSP 주석태그

JSP에서 주석처리는 다음과 같이 처리한다.

<%--- JSP 주석처리내용 ---%>

'Java, Spring > 개념정리' 카테고리의 다른 글

DI, IoC, Container  (0) 2023.01.10
관심사의 분리, MVC 패턴  (0) 2022.08.21
액션태그  (0) 2022.08.16
디렉티브 태그  (0) 2022.08.15
웹 프로그래밍과 JSP  (0) 2022.08.13

쉽게 배우는 JSP 웹 프로그래밍 <01장 연습문제>

01번

다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

  1. HelloJSP라는 이름의 프로젝트를 생성합니다.
  2. WebContent 폴더에 다음과 같은 hello.jsp 파일을 생성합니다.
    • <h1>태그를 이용하여 'Hello! JSP Programming'을 출력합니다.
    • 'Welcom to JSP'를 출력합니다.
  3. 서버를 실행하고 웹 브라우저에 'http://localhost:8080/HelloJSP/hello.jsp'를 입력하여 실행 결과를 확인합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>hello</title>
</head>
<body>
<h1>Hello! JSP Programming</h1>
<h3>Welcome to JSP</h3>
</body>
</html>

02번

자기소개 페이지를 만들기 위해 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

  1. HelloJSP2라는 이름의 프로젝트를 생성합니다.
  2. WebContent 폴더에 다음과 같은 hello2.jsp 파일을 생성합니다.
    • <h1>태그를 이용하여 'Self-Introduction'을 출력합니다.
    • 'Name : Hong Gil Son'과 'Department : MobileMedia'를 2행으로 출력합니다.
  3. 서버를 실행하고 웹 브라우저에 'http://localhost:8080/HelloJSP2/hello2.jsp'를 입력하여 실행 결과를 확인합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>hello2</title>
</head>
<body>
    <h1>Self-Introduction</h1>
    <h3>Name : Hong Gil Son</h3>
    <h3>Department : MobileMedia</h3>
</body>
</html>

03번

프로젝트의 구조를 이해하기 위해 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

  1. HelloJSP3라는 이름의 프로젝트를 생성합니다.
  2. WebContent 폴더에 다음과 같은 hello3.jsp 파일을 생성합니다.
    • <h1>태그를 이용하여 'Welcome to JSP'을 출력합니다.
    • 'JSP is Dynamic Web Page.'와 'JSP is Java Server Pages.'를 2행으로 출력합니다.
  3. 서버를 실행하고 웹 브라우저에 'http://localhost:8080/HelloJSP3/hello3.jsp'를 입력하여 실행 결과를 확인합니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>hello3</title>
</head>
<body>
    <h1>Welcome to JSP</h1>
    <h3>JSP is Dynamic Web Page.</h3>
    <h3>JSP is Java Server Pages.</h3>
</body>
</html>

JSP의 특징

  • JSP는 서블릿 기술의 확장이다.
  • JSP는 유지 관리가 용이하다.
  • 빠른 개발이 가능하다
  • 코드 길이를 줄일 수 있다.

JSP 페이지의 처리과정

JSP 페이지는 하나의 서블릿 프로그램으로 변환되어 실행된다.
jsp페이지가 서블릿 프로그램인 *.java로 번역되어서 실행되며, 이 서블릿 프로그램이 서블릿 클래스인 *.class를 생성하게 된다.
모든 걸 생성하는 역할은 JSP 컨테이너가 담당한다.
JSP 컨테이너는 웹 서버와 분리하여 설치할 수도 있고, 웹서버에 포함할 수도 있는데, 톰캣은 JSP 컨테이너가 포함되어 있다.

JSP 생명 주기

JSP 페이지를 컴파일한 *.class에는 jspInit(), _jspService(), jspDestory() 메소드가 존재하며, JSP 생성부터 파괴까지의 과정에서 각자의 역할을 수행한다.

  • jspInit() 은 초기화를 수행하는 메소드이다.
  • _jspService()는 요청 및 응답 객체를 전달하는 메소드이며, 오버라이딩 할 수 없다.
  • jspDestory() 은 JSP 컨테이너가 해당 서블릿 인스턴스를 제거할 때 사용하는 메소드이다.

'Java, Spring > 개념정리' 카테고리의 다른 글

DI, IoC, Container  (0) 2023.01.10
관심사의 분리, MVC 패턴  (0) 2022.08.21
액션태그  (0) 2022.08.16
디렉티브 태그  (0) 2022.08.15
스크립트태그  (0) 2022.08.15

hashCode()

객체의 해시코드(hash code)를 반환하는 메서드이다.
Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환한다.

 public class Object {
     ...
     public navtive int hashCode(); // 내용 X 네이티브 메서드 : OS의 메서드 (C언어)
 }

equals()를 오버라이딩하면 hashCode()도 오버라이딩해야 한다.
equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문이다.

 public class Ex9_3 {
     public static void main(String[] args) {
         String str1 = new String("abc");
         String str2 = new String("abc");

         System.out.println(str1.equals(str2)); // true 출력
         System.out.println(str1.hashCode()); // 96354 출력
         System.out.println(str2.hashCode()); // 96354 출력
         // System.identifyHashCode(Object obj)는 Object클래스의 hashCode()와 동일하다.
         System.out.println(System.identityHashCode(str1)); // 589431969 출력
         System.out.println(System.identityHashCode(str2)); // 1252169911 출력
         // 참고 32bit JVM은 주소가 int 범위 이내이다.
         // 하지만 64bit JVM은 주소가 long타입 범위 이내이기에 겹치는 주소가 있을 수도 있다.
     }
 }

toString()

객체를 문자열(String)으로 변환하기 위한 메서드이다.

 public String toString() {
     return getClass().getName()+"@"+Integer.toHexString(hasCode());
           // 반환 설계도객체().클래스이름()+at(위치).정수.16진.(객체주소)
 }

대부분은 다르지만, 오버라이징하면 같을 수도 있다. (가능성)

예제 Ex9_4

 package ch09;

 class Card {
     String kind;
     int number;

     Card() {
         this("SPADE", 1);
     }

     Card(String kind, int number) {
         this.kind = kind;
         this.number = number;
     }
 }

 class Ex9_4 {
     public static void main(String[] args) {
         Card c1 = new Card();
         Card c2 = new Card();

         System.out.println(c1.toString()); // Card@232204a1
         System.out.println(c2.toString()); // Card@4aa298b7
     }
 }

equals가 true일 때는 hashCode값이 같게 나온다.

 import java.util.Objects;

 class Card {
     String kind;
     int number;

     Card() {
         this("SPADE", 1);
     }

     Card(String kind, int number) {
         this.kind = kind;
         this.number = number;
     }
     public String toString() {
         return "kind : "+ kind + ", number : " + number;
     }
     // equals()를 오버라이딩하면 hashCode()도 오버라이딩 해야한다.
     public int hashCode() {
         return Objects.hash(kind, number); // return Object"s"인 것을 주의해야한다.
         // 매개변수가 가변인자라서, 여러개 넣어도 된다.
     }

     // 오버라이딩을 할 때는 선언부가 일치해야한다.
     public boolean equals(Object obj) {
         if (!(obj instanceof Card))
             return false;

         Card c = (Card)obj;
         return this.kind.equals(c.kind) && this.number == c.number;
     }
 }

 class Ex9_4 {

     public static void main(String[] args) {
         Card c1 = new Card();
         Card c2 = new Card();

         System.out.println(c1.equals(c2));

         System.out.println(c1.toString()); // kind : SPADE, number : 1 출력
         System.out.println(c2.toString()); // kind : SPADE, number : 1 출력

         // equals가 true일 때는 hashCode값이 같게 나온다.
         System.out.println(c1.hashCode()); // -1842861219 출력
         System.out.println(c2.hashCode()); // -1842861219 출력
     }
 }

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

메서드  (0) 2022.08.11

메서드의 정의

문장들을 블럭으로 묶어놓은 것

이며, 작업단위로 문장들을 묶어서 이름을 붙인 것이다.
ex. for 구문 작업을 메서드로 묶고, 이름을 부여한다. 이후에, 출력을 하면 메서드를 사용하는 것이다.

아래의 배열출력 작업이 여러개 있는 코드 중복일 경우에 좋은 코드가 아니다. 그렇기에, 메서드를 이용해 코드 중복 제거 작업을 한다.

for (int i = 0; i < 10; i++)
    System.out.printf("%d", numArr[i]);
System.out.println();

for (int i = 0; i < 10; i++)
    System.out.printf("%d", numArr[i]);
System.out.println();

메서드를 아래와 같이 생성한다. 이름은 임의로 printArr로 지정한 것이다.

static void printArr(int[] numArr) {
    for (int i = 0; i < 10; i++)
        System.out.printf("%d", numArr[i]);
    System.out.println();
}

이후에 코드 대신에 메서드 이름만 호출하면 코드 라인도 줄어들고 코드 중복도 제거된다.

printArr(numArr);

값(입력)을 받아서 처리하고, 결과를 반환(출력)

메서드는 항상 클래스 안에 있어야하는 제약조건이 있지만, 함수는 그렇지 않다.
그렇기에, 함수는 클래스에 독립적이다. 이외에는 차이점이 거의 없다.

int add (int  x, int y) {
    int result = x + y;

    return resuilt;
}

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

hashCode(), toString()  (0) 2022.08.11

+ Recent posts