JSP (Java Server Page)
- JSP 란?
- Java Server Page이며 서버 사이드 템플릿 엔진이다.
- HTML안에 Java 코드나 EL, JSTL을 사용하여 동적인 페이지를 구성한다.
- JSP 프로젝트 생성 (인텔리제이)
- build.gradle 코드 추가
-
dependencies { // JSP implementation 'jakarta.servlet:jakarta.servlet-api' implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'
-
- application.properties 코드 추가
-
# JSP spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
-
- main 디렉토리 안에 webapp/WEB-INF/views 디렉토리 생성
- views 디렉토리에 .jsp 파일 생성
- jsp 파일 상단에 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 입력
- Controller 클래스 생성
- @Controller 어노테이션 주입
- 생성한 jsp 파일을 return 하는 @GetMapping 메소드 생성
- build.gradle 코드 추가
- JSP 파일의 주석문
- <%— 주석내용 —%> 사용
- JSP 심볼 종류
- 페이지 지시어
- <%@ %>
- 출력문(표현식)
- <%= %>
- 전역변수, 함수 선언부
- <%! %>
- 자바 코드 영역 (스크립트릿)
- <% %>
- 심볼 사용 예시
- JSP 코드
-
<%! int globalVar = 10; public int sum( int a, int b ){ return a + b; } %> <% //스크립트릿 : JSP안의 Java 코드 String title = "java coding!"; System.out.println( title ); %> <!-- 표현식 --> 전역변수 : <%= globalVar %> <br> 타이틀 문자열 : <%= title %> <br> 합계 함수 : <%= sum(10, 20) %>
-
- 출력
- 타이틀 문자열 : java coding!
- 합계 함수 : 30
- 전역변수 : 10
- JSP 코드
- 페이지 지시어
- 페이지 지시어 (<%@ @>)
- contentType
- JSP 문서의 ContentType과 encoding 타입 지정
- 기본 형태는 contentType=”text/html; charset=UTF-8”
- contentType 종류
- text/html, Application/xml, Application/json, Application/x-www-form-urlencode, text/plain, text/xml, multipart/formed-data
- charset 종류
- UTF-8, iso-8859-1, EUC-KR, ASCII
- import
- 자바 클래스 import
- session
- 세션 사용 여부 (기본값은 true)
- buffer
- 출력 버퍼(memory)의 크기 지정 (기본값은 8kb)
- autoFlush
- 출력 버퍼가 다 찼을 경우 자동으로 내보낼지 결정 (기본값은 true)
- info
- JSP 페이지에 대한 설명 기술
- errorPage
- JSP 페이지 실행 중 에러 발생시 보여줄 페이지 기술 (error.jsp)
- isErrorPage
- 현재 페이지가 에러 페이지 여부인지 지정 (기본값은 false)
- pageEncoding
- JSP 페이지 소스 코드의 문자 인코딩을 지정
- charset과 차이점
- charset은 서버가 웹 브라우저에게 보내는 문자 인코딩 타입(통신)
- pageEncoding은 소스 코드 자체의 문자 인코딩 타입(파일)
- isELIgnored
- 표현언어의 사용 여부 (기본값은 false)
- 출력문의 형식
- deferredSyntaxAllowedAsLiteral
- #{} 문자가 값으로 사용될지 여부 (기본값은 false)
- trimDirectiveWhitespaces
- 출력 결과에서 공백문자를 제거할지 여부 (기본값은 false)
- contentType
- request 내장 객체 (<%= 안에 작성 %>)
- request.getRemoteAddr()
- 접속한 클라이언트의 IP주소
- 웹브라우저, 안드로이드폰, 아이폰 등
- 접속한 클라이언트의 IP주소
- request.getContentLength()
- 클라이언트가 전송한 요청정보의 길이
- 길이를 알 수 없으면 -1 출력
- request.getCharacterEncoding()
- 요청정보의 문자 인코딩 정보(charset)
- request.getContentType()
- 클라이언트가 사용한 ContentType
- request.getProtocol()
- 요청정보의 통신 프로토콜
- HTTP 1.0, HTTP 1.1
- 요청정보의 통신 프로토콜
- request.getMethod()
- 요청정보의 전송방식
- GET, POST, PUT, DELETE
- 요청정보의 전송방식
- request.getRequestURI()
- 클라이언트가 요청한 서버의 URI(경로만)
- (루트)/jsp_examples/ex09.jsp
- 클라이언트가 요청한 서버의 URI(경로만)
- request.getContextPath()
- 웹 어플리케이션의 컨텍스트(폴더) 경로
- /jsp_examples
- 웹 어플리케이션의 컨텍스트(폴더) 경로
- request.getServerName()
- 요청한 서버의 이름
- localhost, 도메인 서버 이름
- 도메인
- 서버주소(123.123.123.123) 숫자
- 도메인 서버
- 이름으로 된 주소(www.google.com)를 숫자로 바꿔준다.
- 요청한 서버의 이름
- request.getServerPort()
- 구동중인 서버의 포트 번호
- 톰캣은 8090, 오라클은 8080을 사용중
- 구동중인 서버의 포트 번호
- request.getRemoteAddr()
- JSP 페이지 간의 데이터 전달/받기
- 데이터 전달 방법
- application
- pageContext
- request
- session
- GET 방식으로 주소줄에 데이터 전달
- input type=hidden submit 사용
- jsp:forward jsp:param
- c:redirect c:param
- 데이터 받기
- request.getParameter(”name명")
- 예시
-
<jsp:forward page="ex08.jsp"> <jsp:param name="id" value="hong" /> <jsp:param name="pw" value="1234" /> </jsp:forward> ---------------------------------------------- // ex08에서 데이터 받기 id 파라미터 값은 : <%= request.getParameter("id") %> pw 파라미터 값은 : <%= request.getParameter("pw") %>
-
- 데이터 전달 방법
- 자바빈
- 클래스의 멤버변수 및 데이터, getter/setter 등을 가져온다.
- 자바빈 태그의 종류
- jsp:useBean
- 자바빈 객체(클래스)를 생성하는 태그
- <jsp:useBean id="빈이름" class="자바빈 클래스 이름" scope="범위" /> 의 형태
- 예시
- 엔티티 클래스 생성 후 해당 클래스를 자바빈으로 등록
- Users 클래스 생성
-
@Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Users { private int userNo; private String userId; private String userPw; private String phone; private String address; private LocalDate regDate; }
-
- jsp에서 가져오기 (상단에 작성)
- <jsp:useBean id="users" scope="request" class="com.study.ex17jsp.Users" />
- jsp body 태그 안에서 사용
-
<body> <% users.setAddress("서울"); %> <%= users.getAddress() %> <!-- 반복문 --> <% for(int i=0; i<5; i++){ %> i: <%= i %> <br> <% } %> </body>
-
- Users 클래스 생성
- 엔티티 클래스 생성 후 해당 클래스를 자바빈으로 등록
- jsp:setProperty
- 생성된 자바빈 객체에 Property 값을 지정하는 기능
- <jsp:setProperty name="자바빈" property="이름" value="값" /> 의 형태
- jsp:getProperty
- 생성된 자바빈 객체에 Property 값을 가져오는 기능
- <jsp:getProperty name="자바빈" property="이름" /> 의 형태
- jsp:useBean
- 자바빈 객체의 수명
- page
- 현재 페이지의 범위에서만 한정
- 페이지 처리가 끝나면 유효하지 않다.
- request
- 단일요청
- Request 요청을 받고 처리를 완료할때까지 생존
- session
- 로그아웃전
- 사이트 전체의 범위를 갖지만 지속 시간 동안만 유지
- application
- 웹브라우저 닫히기전까지
- 사이트 전체의 범위를 갖고 계속 유지될 수 있다.
- page
- JSTL (자바 서버페이지 표준 태그 라이브러리)
- JSP 표현식을 간단히 출력하기 위해 사용
- 예시
- <%= student %>에서 ${student}로
- <% if %>에서 <c: if>로
- <% for %>에서 <c: for>로
- 예시
- JSTL core 태그 종류
- <c:set>
- 변수 선언
- 예시
- <c:set var="name" value="홍길동" />
- name: ${ name }
- <c:set var="sum" value="0" />
- <c:set var="name" value="홍길동" />
- <c:remove>
- 변수 제거
- 예시
- <c:remove var="name" scope="page" />
- <c:out>
- 출력
- 예시
- <c:out value="${sum}" />
- <c:if>
- 조건문
- 예시
- <c:if test="${ 10 < 20 }">10은 20보다 작다</c:if>
- <c:if test="${ name eq '홍길동' }">name은 홍길동이다.</c:if>
- <c:choose>
- switch(else if)문과 유사
- 예시
-
<c:set var="grade" value="골드회원" /> <c:choose> <c:when test="${ grade eq '우수회원'}"> 회원등급은 우수회원입니다.<br> </c:when> <c:when test="${ grade eq '골드회원'}"> 회원등급은 골드회원입니다.<br> </c:when> <c:when test="${ grade eq '일반회원'}"> 회원등급은 골드회원입니다.<br> </c:when> <c:otherwide> 그외의 회원등급입니다.<br> </c:otherwide> </c:choose>
-
- <c:when>
- case문과 유사
- <c:otherwise>
- defalut문과 유사
- <c:forEach>
- 향상된 for문
- 예시
- 리스트 출력
-
<c:forEach var="i" begin="0" end="4" step="1"> i : ${ i } <br> </c:forEach>
-
- 배열 출력
-
<c:set var="intArray" value="<%= new int[]{10,20,30} %>" /> <c:forEach var="intValue" items="${ intArray }"> intValue : ${ intValue } <br> </c:forEach>
-
- 값 더하기
-
<c:set var="sum" value="0" /> <c:forEach var="i" begin="1" end="100" step="1"> <c:set var="sum" value="${sum + i}" /> </c:forEach> 합계: <c:out value="${sum}" />
-
- 구구단 (7단)
-
<c:forEach var="i" begin="1" end="9" step="1"> 7 * ${i} = <c:out value="${7*i}" /><br> </c:forEach>
-
- 리스트 출력
- <c:set>
- JSP 표현식을 간단히 출력하기 위해 사용
- var의 status 사용 종류
- status.index
- 현재 값의 인덱스 값 출력 (0부터 시작)
- status.count
- 현재 몇번째 루프인지 출력 (1부터 시작)
- status.current
- 현재 값 출력 (var 속성의 값과 같다.)
- status.first
- 현재가 첫번째 루프이면 true
- status.last
- 현재가 마지막 루프이면 true
- status.begin
- begin 속성을 사용했을 경우 그 값이 나온다.
- status.end
- end 속성을 사용했을 경우 그 값이 나온다.
- status.step
- step 속성을 사용했을 경우 그 값이 나온다.
- 사용 예시
-
<c:forEach var="value" items="${ intArray }" varStatus="status"> value : ${ value }<br> index : ${ status.index }<br> count : ${ status.count }<br> current : ${ status.current }<br> </c:forEach>
-
- status.index
- EL의 연산자 (${ 연산자 })
- 수치 연산자
- +, -, *, /(div), %(mod), 단항연산자 -부호
- ++, — 연산자는 지원하지 않는다.
- 비교 연산자
- ==(eq), ≠(ne), <(lt), >(gt), ≤(le), ≥(ge)
- 논리 연산자
- &&(and), ||(or), !(not)
- empty 연산자
- empty(값)
- true일 때: null, 빈 문자열, 길이가 0인 배열, 빈 Map, 빈 Collection
- 그외 값은 모두 false
- empty(값)
- 삼항 연산자
- 조건식 ? true값 : false값
- 문자열 연결 연산자
- +=
- 예시
- ${ "대한민국" += "만세" }
- 세미콜론 연산자 (;)
- 두개의 식을 붙일 때, 앞의 식은 무시되고 뒤의 식이 출력
- 예시
- ${ 1 + 1; 10 + 10 }
- 기타
- 특수문자 출력하고 싶을 때
- \
- 예시
- \\${ 10 } ⇒ ${10} 출력
- 예시
- \
- 표현 언어에서 $과 #의 차이점
- ${ }
- 미리 컴파일하고 실행
- #{ }
- 참조시(읽을 때) 컴파일하고 실행
- ${ }
- 특수문자 출력하고 싶을 때
- 수치 연산자
'Java' 카테고리의 다른 글
[Java] 프로그래머스 Lv.1 풀며 정리했던 함수들 (1) | 2024.11.29 |
---|---|
[Java] String, StringBuilder, List, Collections, Set, Map, Stack, Queue 정리 (0) | 2024.10.01 |
[Java] Jar 파일 생성 (0) | 2024.04.06 |
[Java] JDBC (0) | 2024.03.18 |
[Java] Collection (0) | 2024.03.18 |