Software Engineering/Java & JSP 14

[Eclipse] '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] 제6장 패키지와 예외처리

패키지(Package)정의: 관련있는 타입(클래스, 인터페이스)들의 묶음목적: 이름 충돌 방지, 접근 제어, 필요한 타입을 찾기 쉽게 분류하기 위함Java 기본 API 또한 계층적 패키지로 구성된다.예를 들어, Java 기본 클래스들은 java.lang에, 입출력용 클래스들은 java.io에 모여 있다.java.lang은 묵시적으로 import 되나, 다른 패키지의 클래스를 쓰려면 import java.io.* 처럼 해야 한다.java.lang.String 클래스는 %JAVA_HOME%/jre/lib/rt.jar/java/lang/String.class에 존재한다.커스텀 패키지를 사용하려면 OS의 환경변수 CLASSPATH에 자신이 만든 패키지 위치를 지정해야 한다.커스텀 패키지 만들기(package 구..

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

제네릭다양한 타입이나 객체에 대해 동작하게 만든 클래스를 제네릭이라 한다.제네릭을 정의할 때 다양한 타입 파라미터를 선언하고, 사용할 때 필요한 타입을 지정한다.제네릭이 주는 장점은 다음과 같다. 컴파일러에 의한 타입 검사가 가능해진다.명시적 형변환이 불필요해진다.제네릭의 제한 사항은 다음과 같다.기본 자료형을 타입 매개변수에 사용할 수 없다.제네릭 타입의 배열 선언은 불가하다.타입 매개변수를 static 필드에는 사용할 수 없다.타입 매개변수는 클래스 식별자 뒤에 로 표시한다. List l = new ArrayList();l.add("ilovejava"); String s = list.get(0);타입 매개변수는 필드의 타입이나 반환형으로 사용된다.를 다이아몬드 연산자라 하며, 타입 매개변수를 지..