Software Engineering/Java, JSP 11

[Eclipse] Solution to 「The default superclass, "jakarta.servlet.http.HttpServlet", according to the project's Dynamic Web Module facet version (5.0), was not found on the Java Build Path.」

이클립스 2023-06 버전에서 Dynamic Web Project를 생성하고 런타임으로 Tomcat 10.1을 사용하는 프로젝트에서 JSP 태그를 작성하면 제목과 같은 오류가 생기는데, 해결 방법을 적어둡니다. 다른 버전도 그런지는 모르겠습니다. 아마 톰캣 버전에 따라서 JSP 관련 클래스의 네임스페이스가 javax에서 jakarta로 바뀌어서 그런 걸로 보입니다. 프로젝트 속성(Properties)에서 Project Facets 화면에서 Dynamic Web Module 항목의 버전을 6.0으로 변경하고 Apply and Close 버튼을 누르면 해결됩니다. 재밌는건 이렇게 해서 오류 마커가 사라지면 모듈 버전을 5.0으로 되돌려도 오류가 다시 생기지 않습니다. 알다가도 모르겠네요

[JSP프로그래밍] 제4장 JSP 동작 원리

1. 단원 요약 JSP 기술은 서블릿 기술에 기반하며, JSP page는 요청 시 서블릿으로 변환→컴파일→실행된다. JSP page를 수정하면 그에 해당하는 서블릿 또한 수정된다. 지시어의 속성 autoFlush: 기본 true, 버퍼가 차면 내용물을 전송하고 다음 작업 수행(false인 경우 버퍼가 차면 exception 발생) buffer: 기본 8kb, 실행 중에 버퍼의 내용물을 수정할 수 있음, 특히 헤더를 수정할 수 있음 동일 기능을 하는 서블릿과 JSP page의 비교 ##### Servlet application ##### import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Example ext..

[JSP프로그래밍] 제3장 JSP 개요

1. 단원 요약 액션(action): 요청을 처리할 때 특정 기능을 수행하는 것 JSP page: 지시어/스크립트/액션태그 등의 JSP 요소를 포함하는 HTML 파일 템플릿 데이터: 고정된 데이터(XML/HTML 요소) JSP 요소: 내부에 작성하는 동적인 요소 JSP: Java EE의 하위 기술 중 하나(JSR245)로, 서블릿 기술에 기반하여 동적인 웹 페이지를 생성하는 기술 지시어: JSP page에 대한 설정 정보를 정의하는 요소 스크립트 요소: JSP page 내에서 로 표현되는 요소 Scriptlet: 내부에 자바 코드를 작성한다. 표현식: 변수나 수식의 값을 템플릿 데이터 중간에 표현 선언: Scriptlet이나 표현식에 사용할 메서드나 멤버 변수(필드)를 선언 주석: 액션태그: JSP pa..

[Java] 비트 연산자(Bitwise Operators) 정리

1. 논리곱(AND) & 입력 비트가 모두 1인 경우 출력이 1인 연산 byte a = 10; // 1010 byte b = a & 2; // 00001010 // 00000010 // 00000010 System.out.println(b); // 2 2. 논리합(OR) | 입력 비트 중 한 개 이상이 1인 경우 출력이 1인 연산 byte a = 10; // 1010 byte b = a | 2; // 00001010 // 00000010 // 00001010 System.out.println(b); // 10 3. 배타적 논리합(eXclusive OR) ^ 두 입력이 서로 다른 경우 출력이 1인 연산 byte a = 10; // 1010 byte b = a ^ 2; // 00001010 // 000000..

[Java] 제8장 java.io 패키지와 스트림

1. 단원 요약 스트림은 순서가 있는 일련의 데이터가 이동하는 통로이다. 스트림을 이용하면 데이터나 목적지의 특성에 대해 독립적으로 프로그래밍이 가능하다. 스트림의 끝에는 파일, 주변기기, 소켓, 배열, 프로세스 등이 위치할 수 있다. 스트림을 통해 바이트, 문자, 객체가 이동할 수 있다. java.io에는 바이트 단위, 그리고 2바이트 단위로 처리가 가능한 스트림이 존재한다. Byte 단위 처리 최상위 추상클래스: InputStream, OutputStream 파일 입출력용 서브클래스: FileInputStream, FileOutputStream 2Bytes 단위 처리 최상위 추상클래스: Reader, Writer 파일 입출력용 서브클래스: FileReader, FileWriter 보조 스트림 클래스는..

[Java] 제7장 java.lang 패키지

1. 단원 요약 java.lang 패키지는 프로그래밍에 필수적인 기본 클래스들을 제공한다. 별도로 import 하지 않아도 자동으로 포함된다. 포함되는 클래스들은 다음과 같다. 최상위 클래스 Object 문자열 처리용 String, StringBuffer 프로세스/스레드 제어용 Process, Runtime, Thread, ThreadGroup 수학 계산용 Math, StrictMath 예외처리용 Exception, Throwable, Error 포장 클래스(Wrapper Class) Boolean, Character, Byte, Short, Integer, Long, Float, Double 시스템 접근용 System 패키지/클래스 제어용 Package, Class, ClassLoader Object ..

[Java] 제5장 제네릭과 람다식

1. 단원 요약 다양한 타입이나 객체에 대해 동작하게 만든 클래스를 제네릭 클래스 또는 제네릭이라고 부른다. 제네릭을 정의할 때 다양한 타입 파라미터를 선언하고, 사용할 때 필요한 타입을 지정한다. 컴파일러를 통한 타입 검사가 가능해진다. 명시적 형변환이 불필요해진다. 자료형 매개변수(타입 파라미터)는 클래스 식별자 뒤에 로 표시한다. 타입 파라미터는 필드의 타입이나 반환형으로 사용된다. 타입 매개변수 없이 사용되는 제네릭 타입을 로우(raw)타입이라 한다. Raw 타입 클래스 내부에서 사용되는 모든 타입이 java.lang.Object로 간주되어 실행된다. 람다식(lambda expression)이란 파라미터를 입력받아 결과값을 반환하는 코드이다. 람다식은 메소드와 비슷하나, 이름이 없고, 메소드 내부..

[Java] 제4장 인터페이스와 다형성

1. 단원 요약 abstract 클래스/메소드는 형식만 정의된 클래스/메소드로, 추상 클래스/메소드라고 한다. 추상 클래스만이 추상 메소드를 가질 수 있다. abstract 클래스/메소드는 자식클래스에서 구현되어야 하므로 abstract인 동시에 final일 수 없다. 추상 클래스는 서로 연관된 클래스들이 유사한 메소드 형식을 공유하고자 할 쌔 사용한다. 인터페이스 클래스는 서로 연관이 없는 클래스들이 유사한 기능을 공유하고자 할 경우 사용한다. 인터페이스는 추상클래스와 유사하나, 객체를 생성할 수 없다. 인터페이스 간 상속 관계가 존재할 수 있다. 인터페이스의 접근제어자는 public 또는 생략이다. 인터페이스의 모든 메소드는 abstract이며 public 또는 생략이다. 인터페이스의 메소드에 그 기..

[Java] 제3장 클래스와 상속

1. 단원 요약 클래스를 정의할 때는 [접근제어자] [final/abstract] class 식별자 [extends 부모클래스] [implements 인터페이스] {} 와 같이 한다. 중괄호 내에는 필드와 메소드를 선언한다. 인터페이스를 구현하는 클래스인 경우 인터페이스에 정의된 메소드를 구현해야 한다. 클래스의 접근제어자를 생략하는 경우 동일 패키지 내에 있는 다른 클래스에서 참조가 가능하다. 클래스가 다른 클래스 내에서 정의된 경우 이를 내부 클래스 또는 네스티드 클래스라 하고, 그렇지 않은 클래스를 외부 클래스 또는 톱레벨 클래스라 한다. 톱레벨 클래스는 public 또는 생략된 접근제어자만 가질 수 있다. final 메소드는 오버라이딩이 불가하다. final 클래스는 부모클래스가 될 수 없다. 부..

[Java] 제2장 Java 기본 문법

1. 단원 요약 /**으로 시작하는 주석은 javadoc 문서이다. 소스코드 맨 위에 작성하며, 클래스에 대한 설명을 기술한다. 달러 사인($)도 식별자로 사용할 수 있다. 고정값(상수값)을 "리터럴"이라 부른다. 식별자는 camel case로, 클래스 이름은 pascal case로 표현한다. (camelCase/PascalCase) 상수는 대문자 snake case로 표현한다. (SNAKE_CASE) 특정 자료형 값을 저장하는 변수를 기본형 변수라 한다. (boolean/byte=char/short/int/float/long/double) char 타입은 2바이트로써, '\u0000'부터 '\uffff'까지 표현할 수 있다. 객체가 위치한 주소를 저장하는 변수를 참조현 변수라 한다. 작은 자료형에서 큰..