▶ EL(Expression Language)
<%= %>
- JSP에서 표현식을
간단하고 효율적으로 작성할 수 있도록
고안된 언어(JSP 내부에 기본 내장되어 있음!)
- Java 값을 HTML 형태로 쉽게 출력할 수 있다!!
- null을 빈칸("")으로 처리
(NullPointerException을 발생시키지 않음!!)
- get 이라는 단어를 거의 사용하지 않는다( EL은 표현(출력) 언어 )
→ 값을 대입하고, 조건/반복하는 구문을 작성X
오로지 출력!!
(출력하려면 값을 얻어와야되는게 당연한 거라 get 단어 사용 X)
- EL은 자료형 변환(parsing)을 자동 수행 해준다
|
EL은 Java로 변환 되지만 문자열 비교는 == (비교 연산자) 사용 가능
${param.str == "abc"}
|
|
HTML에서 얻어온 데이터는 모두 String 하지만 EL에서 연산 되는 자료형이 다를 경우
자동으로 자료형 변환(parsing) 진행해준다!!!
${param.intNum == 100}
${param.doubleNum == 3.14}
|
- 기본 작성법 : \${key} (백슬래시는 제거하고 사용)
|
전달 받은 파라미터 출력하기
|
- \${param.key} : key가 일치하는 파라미터 얻어오기
- \${paramValues.key} : key가 일치하는 파라미터 모두 얻어오기
|
|
존재하는 파라미터 얻어오기
|
- JSP 표현식으로 으로 str 파라미터 얻어오기 :
<%= request.getParameter("str")%>
- EL구문으로 str 파라미터 얻어오기
${param.str} |
|
존재하지 않는 파라미터 얻어오기
|
- JSP 표현식으로 으로 temp 파라미터 얻어오기 :
<%= request.getParameter("temp")%>
- EL구문으로 str 파라미터 얻어오기
${param.temp} |
▶ JSTL(Jsp Standard Tag Library)
JSP에서 자주 사용하는 Java 코드를
(if, for, 변수 선언, String 관련 메서드 ....)
<%-- <% Java코드 %> --%>
스크립틀릿이 아닌 HTML 태그 모양으로 작성할 수 있도록
태그를 제공하는 라이브러리
[라이브러리 추가 방법]
1. 필요한 라이브러리(.jar) 파일을 다운 받기
2. 프로젝트 webapp/WEB-INF/lib 폴더에
다운 받은 라이브러리 추가(복사, 붙여넣기)
3. JSTL을 사용할 JSP 파일 제일 위에
taglib 추가 구문 작성
< 클라이언트가 서버로 요청을 하는 방법 >
1) form 제출(FET/POST)
2) a 태그 (GET)
3) JS - location.href = "주소"; (GET)
4) JS - Ajax(GET/POST/PUT/DELETE)
| html |
html, css, js 코드 작성 가능
+ 정적 페이지(미리 만들어진 형태 그대로)
|
| jsp |
html, css, js , java, el, jstl 작성 가능
+ 동적 페이지(요청에 따라 응답 화면 변함 가능)
|
▶ Servlet/JSP 범위별 내장 객체
| page(pageContext) | 현재 JSP에서만 사용 가능한 객체(Servlet X) |
| request(요청) | 요청 받은 페이지(Servlet/JSP)와 위임 받은 페이지(Servlet/JSP)에서 유지되는 객체 |
| session(입회, 접속) | - session : 서버에 접속한 클라이언트를 나타내거나, 관련 정보를 get/set 할 수 있는 객체 (session 객체는 서버에서 관리함) - [중요!] session은 브라우저 마다 하나씩 생성된다!!! (새탭, 새창은 아님) - [유지 범위] 사이트 접속 ~ 브라우저 종료 | 세션 만료 - session이 유지되는 상태에서는 아무 곳에서나 가져다 사용할 수 있다! |
| application(ServletContext) | - 하나의 웹 애플리케이션 마다 1개만 생성되는 객체 (Server를 키면 1개만 생성되는 객체) - application 객체는 어디서든 사용 가능 - [유지 범위] 서버 실행 ~ 서버 종료 |
▶ 내장 객체의 우선순위
page > request > session > application
▶ Servlet/JSP 범위 객체에 값(속성) 추가 및 얻어오는 방법
1. 값(속성) 추가하는 방법
범위객체.setAttribute("key", value);
2. 값(속성) 얻어오는 방법
Object 범위객체.getAttribute("key");
-> 반환형 Object -> 필요 시 다운캐스팅
#예제1
[html]
<h1>
<a href="/el_jstl">EL / JSTL 사용해보기</a>
</h1>
[Servlet]
package edu.kh.jsp.controller;
import java.io.IOException;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/el_jstl")
public class ELJstLServlet extends HttpServlet{
// GET 방식 요청 시
// 지정된 JSP로 바로 요청 위임
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1) JSP 경로(webapp 폴더 기준)
String path = "/WEB-INF/views/el_jstl.jsp";
//2) 요청 발송자 얻어오기
RequestDispatcher dispatcher
= req.getRequestDispatcher(path);
//3) 요청 위임(forward)
dispatcher.forward(req, resp);
}
}
[jsp]
<%-- prefix : 접두사(앞에 붙는 단어/말)
만약 prefix="c" -> <c:if>
만약 prefix="core" -> <core:if>
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>EL / JSTL 사용법</title>
</head>
<body>
<h3>전달 받은 파라미터를 출력하는 방법</h3>
<p style="color:red;">
주소 뒤에 쿼리스트링(?name=홍길동&age=20)
직접 작성해보면서 테스트
</p>
<h4>1. JSP 표현식</h4>
<div>
name : <%= request.getParameter("name") %>
<br>
age : <%= request.getParameter("age") %>
</div>
<h4>2. EL</h4>
<div>
<%-- EL에서 파라미터를 얻어오는 방법 : ${param.key값} --%>
name : ${param.name}
<br>
age : ${param.age}
</div>
<hr><hr>
<h3>JSTL c:if문 사용해보기</h3>
<%
int age = Integer.parseInt(request.getParameter("age"));
if(age > 20){%>
<h3>성인 입니다11111</h3>
<% } %>
<c:if test="${param.age > 20}">
<h3>성인 입니다</h3>
</c:if>
<c:if test="${param.age <= 20}">
<h3>성인이 아닙니다</h3>
</c:if>
</body>
</html>
#결과


#예제2
[html]
<%-- form태그 method 기본값은 GET --%>
<form action="/el/test1">
문자열 입력 : <input type="text" name="str">
<br>
정수 입력 : <input type="number" name="intNum">
<br>
실수 입력 : <input type="text" name="doubleNum">
<div>
A <input type="checkBox" name="check" value="A">
B <input type="checkBox" name="check" value="B">
C <input type="checkBox" name="check" value="C">
</div>
<button>제출하기</button>
</form>
<hr>
<h1>
<a href="/el/scope">Servlet/JSP 범위(scope)별 내장 객체
+ EL 사용법</a>
</h1>
<hr>
<h1>
<a href="/jstl/test"> JSTL 간단히 다뤄보기 </a>
</h1>
<hr>
<h1>
<a href="/book/list"> 책 목록 조회하기 </a>
</h1>
<hr>
<h1>forward와 redirect</h1>
<h3>forward : 요청 위임</h3>
<pre>
- 클라이언트 요청을 받은 Servlet/JSP가
직접 응답하는 것이 아닌
다른 Servlet/JSP에
HttpServletRquest, HttpServletResponse
객체를 넘겨서(위임) 대신 응답하게 하는 것
- 요청 위임시
RequestDispatcher(요청 발송자)를 이용
- 요청 위임할 JSP ***파일 경로*** 작성
- 응답 화면(결과 페이지) 주소는
처음 Servlet이 요청 받은 주소 그대로!
</pre>
<form action="/fr/forward">
forward 입력 1 : <input type="text" name="forwardInput1">
<br>
forward 입력 2 : <input type="text" name="forwardInput2">
<button>forward 확인하기</button>
</form>
<hr>
<h3>redirect (재요청, 다른 Servlet 요청)</h3>
<pre>
- 클라이언트의 요청을 받은 Servlet/JSP에서
직접 응답하지 않고
다른 Servlet/JSP를 다시 요청 하는 것
- 보통 Servlet 요청 처리 후
특정 JSP로 요청을 위임해
결과 화면을 응답해 주는 것이 아닌
(요청 받은 Servlet이 응답해줄 JSP가 없음)
다른 Servlet을 다시 요청하여
다른 Servlet의 결과 화면을 응답해줌
- redirect는 다시 요청 하는 것!!!
-> 기존 client의 req, resp 객체가 "사라지고"
새로운 "req, resp 객체가 생성"된다!!!
-> request scope에 세팅된 값들이 모두 사라짐!!
- redirect는 응답 화면의 주소가
처음 요청한 Servlet 주소가 아닌
다시 요청한 Servlet 주소로 변경된다!
- 다른 Servlet을 요청하기 위해서는
"요청 주소"를 작성해야 한다
</pre>
<form action="/fr/redirect">
redirect 입력 1 : <input type="text" name="redirectInput1">
<br>
redirect 입력 2 : <input type="text" name="redirectInput2">
<button>redirect 확인하기</button>
</form>
</body>
</html>
[servlet]
package edu.kh.jsp2.controller;
import java.io.IOException;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/el/test1")
public class ELTestServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//----------------------------------------
/*응답 처리*/
//-> 원래는 Java에서 out.write("<html>") 써야 되는데
// 너무 힘들어..
// -> JSP한테 응답 화면을 만들어 출력하라고
// 떠넘기기(== 요청 위임(forward))
// 1) JSP 경로 작성 (webapp 폴더 기준)
String path = "/WEB-INF/views/el/test1.jsp";
//2) 지정된 JSP 경로로 요청을 넘겨줄
// 요청 발송자(RequestDispatcher) 객체 생성
RequestDispatcher dispatcher
= req.getRequestDispatcher(path);
// 3) 요청 위임하기
dispatcher.forward(req, resp);
}
}
[jsp]
<%-- jsp 엔터 자동완성 이용 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>EL 확인1</title>
</head>
<body>
<hr>
<h3>전달 받은 파라미터 출력하기</h3>
<pre>
- \${param.key} : key가 일치하는 파라미터 얻어오기
- \${paramValues.key} : key가 일치하는 파라미터 모두 얻어오기
</pre>
<h4>존재하는 파라미터 얻어오기</h4>
<ul>
<li>
JSP 표현식으로 으로 str 파라미터 얻어오기 :
<%= request.getParameter("str")%>
</li>
<li>
EL구문으로 str 파라미터 얻어오기 : ${param.str}
</li>
</ul>
<h4>존재하지 않는 파라미터 얻어오기</h4>
<ul>
<li>
JSP 표현식으로 으로 temp 파라미터 얻어오기 :
<%= request.getParameter("temp")%>
</li>
<li>
EL구문으로 str 파라미터 얻어오기 : ${param.temp}
</li>
</ul>
<hr>
<h3>EL은 자료형 변환(parsing)을 자동 수행 해준다</h3>
<ul>
<%-- EL은 Java로 변환 되지만
문자열 비교는 == (비교 연산자) 사용 가능 --%>
<li> ${param.str == "abc"}</li>
<%-- HTML에서 얻어온 데이터는 모두 String
하지만 EL에서 연산 되는 자료형이 다를 경우
자동으로 자료형 변환(parsing) 진행해준다!!!
--%>
<li> ${param.intNum == 100}</li>
<li> ${param.doubleNum == 3.14}</li>
</ul>
<h3>같은 key값을 지닌 파라미터 얻어오기</h3>
<ul>
<%-- check가 여래 개 전달된 경우 첫 번째 값 출력 --%>
<li>
param.check : ${param.check}
</li>
<%-- check라는 key를 가진 모든 값을 모아 String[]로 반환 --%>
<li>
paramValues.check : ${paramValues.check}
</li>
<li>
<li>paramValues.check[0] : ${paramValues.check[0]}</li>
<li>paramValues.check[1] : ${paramValues.check[1]}</li>
<li>paramValues.check[2] : ${paramValues.check[2]}</li>
</li>
</ul>
</body>
</html>
#결과


'BackEnd > Java' 카테고리의 다른 글
| [Servlet/JSP]JSTL / 조건문 / 향상된 for문 (0) | 2024.08.16 |
|---|---|
| [Servlet/JSP]EL/JSTL 예제 (0) | 2024.08.16 |
| [Servlet/JSP]Servlet을 이용해 서버 요청 보내기 (0) | 2024.08.16 |
| [Servlet/JSP] Servlet을 이용한 예제 (0) | 2024.08.16 |
| [Servlet/JSP] 알고 있어야 할 선수 지식 및 웹 개발 상식 (0) | 2024.08.16 |