2023. 5. 23. 19:46ㆍJSP
JSP 모델1 방식의 게시판1-3
bbs08폴더
WEB-INF에서 web.xml 수정
src/main/java폴더/model.bbs에서 BBSDao.java
xml에서 첫번째로 펴지는것-> HelloWorld앞에 List.jsp의 url을 Context루트 까지 지움
list.jsp
View.jsp
Delete.jsp
★☆★☆★☆모델1과 모델2의 차이★☆★☆★☆
모델1은 자바코드를 jsp에 섞음
요청을 jsp가 받음
소규모 프로젝트
개발생산성이 좋다 모델2에서 1달용이 일주일이면 가능
모델2방식은 자바코드를 서블릿으로 만듬
요청을 서블릿이 다 받아줌
결과만 jsp에서 출력
대규모 프로젝트
개발생산성이 나쁘지만 유지보수가 좋다
el09폴더 생성
EL(Expression Language)이란?
표기: ${}
- 값을 표현하는데 사용되는 스크립트 언어로
JSP의 기본 문법을 보완하는 역할을 함.
즉 값을 출력하는데 사용한다.값을 할당하지는 못한다(예:${sum=10}
- 표현식(<%= %>)을 사용하는 것보다 간단한 방법으로 값을 출력 할 수 있다.
- 자바 코드를 사용해야 하는 모든 곳에서 사용가능
- 자바스크립트에서 확장하고
Xpath(XML 문서의 정보에 접근하기 위해 사용되는 언어)에서 힌트를 얻어
만들어진 언어
- null 값을 갖는 변수에 대해 좀더 관대하고,
데이터형 변환을 조금 더 자동으로 해준다
즉 값이 존재 하지 않을 경우 에러를 발생시키지 않고
아무값도 출력하지 않은다.(NullPointerException에러 안남)
- 개체의 값에 접근할때 자바빈(좁은 의미) 개체의 프로퍼티 규칙을 따라 접근한다.
*EL에서는 요청 파라미터는
param.파라미터명(=request.getParameter():형변환 필요)
Resquest.setAttribute()에 설정한 속성은
${속성명} 혹은 ${requestScope.속성명}으로
(=request.getAttribute():형변환 필요)
※ 각 영역에 저장된 값을 EL로 읽어 올때 속성명이 동일하다면
EL의 내장 객체영역명 생략시 리쿼스트 영역에서 읽어 온다.
영역에 저장된 값을 EL로 읽어 올때 영역을 지정하지 않으면
작은 영역부터 순차적으로 읽어 온다
표현언어의 기능]
- JSP의 네가지 기본 개체가 제공하는 영역의 속성 사용
- 변수와 연산자를 포함.
- 자바 클래스 메서드 호출 가능
- 표현언어만의 개체 제공
표현언어의 구문]
- ${expresion}
- expression는 표현언어가 정의한 문법에 따라 값을 표현하는 식
expression에는 자바코드에서 생성한 개체변수에 직접 접근 못한다.
JSTL을 이용해야 함.
- JSP 스크립트[스크립트릿(<% %>),표현식(<%= %>),
선언부(<%! %>)]에서는 사용 불가능
- Action Tag나 JSTL(<c: set />)등의 속성의 값으로 사용할 수 있다.
<jsp:include page="/${info.type}/info.jsp" />
- 비 스크립트 요소에도 표현식처럼 값을 출력하기 위해 사용 가능.
<b>${sessionScope.memeber.id}</b>
즉 JSP 스크립트 요소에서만 사용이 불가하고
거의 모든 태그 요소에서 표현이 가능하다
결론:jsp스크립트안에서만 사용못하고
모든 태그류(Action Tag,JSTL,HTML)에서는 사용할수 있다.
EL의 데이타 타입]
블리언 타입:true,false
정수타입:0~9로 이루어진 정수값
실수타입:0~9로 이루어져 있고,소수점 및 지수 표현 가능
문자열 타입:' 또는 " 로 표현
널타입:null
EL의 연산자]
1)산술 연산자:+,-,*,/,%,div(/랑같다),mod(%랑 같다)
예] ${"2"+1} =>3 :숫자형식의 문자열은 숫자로 변환됨.
${"이"+1} =>에러
${null+1} => 1 :null은 0으로 처리 됨
${3/2} => 1.5 :double타입으로 변환뒤 연산 수행
주의] 자바에서 스트링 연결시 +도 가능 했으나 EL에서는
+는 숫자 연산에만 적용되는 연산자임.
고로 문자열을 +로 연결시에는 에러[X]
2)비교 연산자:==(eq),!=(ne),<(lt),>(gt),<=(le),>=(ge)
${"hello"=="hEllo"} =>
자바의 주소비교가 아니라 문자열값 비교:false
※숫자 비교시 자바의 String클래스의 compareTo()메소드 방식으로
비교후 true아니면 false를 반환해 준다
3)논리연산자: &&(and),||(or),!(not)
4)empty연산자:개체가 비어 있는지 검사
empty<값> :값이 null,빈문자열(""),
길이아 0인 배열,저장개체가 0인 Collection인 경우 true리턴
5)삼항 연산자
<조건>?<값1>:<값2> 예] ${ 10 >2 ? 10: 2} =>10
EL에서 개체의 접근]
-점(.) 이나 대괄호([])를 사용해서 접근한다.
[]는 배열에서 값을 꺼내올때 주로사용
EL에서의 자바 클래스 메소드 호출]
호출을 위한 작성순서]
1)자바 클래스파일을 작성한다.
-EL에서 클래스의 메서드를 호출하려면 클래스 정의시 메서드를
반드시 public static으로 정의해야 한다.
2)TLD(Tag Library Descriptor) 파일을 작성한다.
-커스텀 태그의 동작을 정의하는 XML형식의 파일
-tld파일은 WEB-INF/아래에 바로 놓거나 하위 디랙토리에 두면
컨테이너가 자동으로 찾아서 씀.(WEB-INF/tlds디렉토리에 위치)
-tld파일의 태그 요소에 대한 정의는 아래 JSP 2.1 스펙에서 참조
http://jcp.org/aboutJava/communityprocess/final/jsr245/index.html
3)web.xml을 작성한다.
-tld파일에 대한 정보 추가
4)자바 메소드에 접근하는 JSP 파일을 작성한다
환경 설정]
Tomcat버전이 9 이하인 경우]
https://mvnrepository.com/ 에서 jstl로 검색후 -> 1. JSTL javax.servlet.jsp.jstl ≫ jstl 클릭
-> 1.2 클릭 -> Repositories의 Central클릭->URL의 https://repo1.maven.org/maven2/ 클릭
-> jstl/ 클릭 -> jstl/ 클릭 -> 1.2/ 클릭 -> jstl-1.2.jar 다운로드
다운 받은 jar파일을 해당 프로젝트의 WEB-INF/lib폴더에 복사한다.
Tomcat버전이 10인 경우]
https://jarcasting.com/artifacts/org.glassfish.web/jakarta.servlet.jsp.jstl/2.0.0/ 에서
jakarta.servlet.jsp.jstl-2.0.0.jar(3M)다운로드
및 Dependencies항목의 jakarta.servlet.jsp.jstl : jakarta.servlet.jsp.jstl-api jar 2.0.0에서
버전번호 2.0.0 클릭
jakarta.servlet.jsp.jstl-api-2.0.0.jar(44KB)다운 후
다운 받은 jar파일을 해당 프로젝트의 WEB-INF/lib폴더에 복사한다.
Tomcat 9와 10버전의 차이]
1. API의 기본 패키지가 javax.*에서 jakarta.*로 변경되었음
2. 10에서는 JSTL 2.0(3M) 사용 9에서는 JSTL 1.2(405KB)사용
3. Tomcat9에서는 POST방식으로 파라미터 전달시 한글이 깨진다.아래 코드 추가
4. 포워드로 페이지 전환시 파라미터로 한글 전달시 한글이 깨진다 이때는 포워드시키는 페이지나 포워드되는 페이지 어느쪽에나 아래 코드 추가
5. 인클루드로 페이지 포함시 파라미터로 한글 전달시 한글이 깨진다 이때는 반드시 인클루드 시키는 페이지에서 아래 코드 추가
3.4.5번일때 추가 코드 : request.setCharacterEncoding("UTF-8");
JSP에서의 사용법]
- taglib 지시어를 사용하여 JSTL의 태그 라이브러리에 접근한다.
<%@ taglib prefix="접두어" uri="각 태그의 관련 URL주소" %>
사용시에는 <접두어:태그명 />식으로 사용
예시) <%@ ctrl + space 누르면 속성 (taglib) ctrl + space 누르면 속성(prefix) ="c"(대부분 c로 정함) ctrl + space 누르면 속성(uri)="ctrl+space 세번째꺼 " (... 끝에 jstl/core)
BuiltonObjectOfETC.jsp
결과)
BuiltObjecetOfParamExamIndex.jsp
BuiltObjecetOfParamExamResult.jsp
결과)
BuiltObjecetOfParamIndex.jsp
BuiltObjecetOfparamResult.jsp
결과)
BuiltObjecetOfScopeIndex.jsp
BuiltObjecetOfScopeResult.jsp
결과)
ELOperator.jsp
결과)
'JSP' 카테고리의 다른 글
56일차 2023-05-25 (0) | 2023.05.25 |
---|---|
55일차 2023-05-24 (0) | 2023.05.24 |
51일차 2023-05-18 (0) | 2023.05.18 |
50일차 2023-05-17 (0) | 2023.05.17 |
49일차 2023-05-16 (0) | 2023.05.16 |