카테고리 없음
68day - el 1
첼로그
2023. 7. 12. 18:50
el
main> java>xyz.itwill.el)
Car .java
package xyz.itwill.el;
public class Car {
private String modelName;
private String carColor;
public Car() {
// TODO Auto-generated constructor stub
}
public Car(String modelName, String carColor) {
super();
this.modelName = modelName;
this.carColor = carColor;
}
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public String getCarColor() {
return carColor;
}
public void setCarColor(String carColor) {
this.carColor = carColor;
}
}
Member .java
package xyz.itwill.el;
public class Member {
private String name;
private Car car;
public Member() {
// TODO Auto-generated constructor stub
}
public Member(String name, Car car) {
super();
this.name = name;
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}
mvc/src/main > webapp > el)
basic_car .jsp
<%@page import="xyz.itwill.el.Car"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//pageContext 내장객체에 속성명(car)을 사용하여 Car 객체를 속성값으로 저장
pageContext.setAttribute("car", new Car("싼타페","하얀색"));
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL(Expression Language)</h1>
<hr>
<h2>EL 미사용</h2>
<%
//pageContext 내장객체에 저장된 속성값을 속성명(car)을 사용하여 Car 객체로 반환받아 저장
Car car=(Car)pageContext.getAttribute("car");
//속성명에 대한 속성값이 없는 경우 [null]를 반환받아 저장
//Car car=(Car)pageContext.getAttribute("pageCar");
%>
<p>자동차 = <%=car %></p>
<%-- 객체의 필드값을 반환받아 JSP 표현식으로 출력 처리 --%>
<%-- => [null]이 저장된 참조변수로 메소드를 호출할 경우 NullPointerException 발생 --%>
<p>자동차 모델명 = <%=car.getModelName() %></p>
<p>자동차 색상 = <%=car.getCarColor() %></p>
<hr>
<h2>EL 사용</h2>
<p>자동차 = ${car }</p>
<%-- EL 표현식을 사용하여 스코프 속성명으로 객체를 제공받아 메소드 호출 가능 --%>
<%-- <p>자동차 모델명 = ${car.getModelName() }</p> --%>
<%-- ${속성명.필드명} 형식의 EL 표현식을 사용하여 스코프 속성명으로 객체를 제공받아 필드값 출력 처리 --%>
<%-- => 객체의 Getter() 메소드를 호출하지 않아도 객체 필드값을 제공받아 출력 처리 가능 --%>
<%-- => Getter 메소드를 작성 규칙에 맞지 않게 선언한 경우 또는 Getter 메소드가 없는 경우 에러 발생 --%>
<p>자동차 모델명 = ${car.modelName }</p>
<p>자동차 색상 = ${car.carColor }</p>
<%-- EL 표현식의 속성명으로 제공되는 속성값이 없는 경우 EL 미실행 - NullPointerException 미발생 --%>
<p>자동차 모델명 = ${pageCar.modelName }</p>
</body>
</html>
basic_map .jsp
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//HashMap 객체(Map 객체)를 생성하여 저장
Map<String, String> carMap=new HashMap<String, String>();
//HashMap 객체(Map 객체)에 엔트리(Entry : 이름과 값을 하나로 묶어 표현한 요소)를 추가하여 저장
carMap.put("modelName", "싼타페");
carMap.put("carColor", "하얀색");
//pageContext 내장객체에 속성값으로 HashMap 객체(Map 객체) 저장
pageContext.setAttribute("carMap", carMap);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL(Expression Language)</h1>
<hr>
<h2>EL 미사용</h2>
<%
//pageContext 내장객체에 저장된 속성값을 속성명(carMap)을 사용하여 Map 객체로 반환받아 저장
//@SuppressWarnings : 프로그램에서 발생되는 경고를 제거하는 어노테이션
// => value 속성값으로 제거할 경고의 종류를 설정 - 다른 속성이 없는 경우 속성값만 설정 가능
@SuppressWarnings("unchecked")
Map<String, String> car=(Map<String, String>)pageContext.getAttribute("carMap");
%>
<p>자동차 = <%=car %></p>
<%-- Map 객체에 저장된 엔트리에서 맵키(Key)를 이용하여 맵값(Value)을 반환받아 JSP 표현식으로 출력 처리 --%>
<p>자동차 모델명 = <%=car.get("modelName") %></p>
<p>자동차 색상 = <%=car.get("carColor") %></p>
<h2>EL 사용</h2>
<p>자동차 = ${carMap }</p>
<%-- ${속성명.맵키} 형식의 EL 표현식을 사용하여 스코프 속성명으로 Map 객체를 제공받아 맵값 출력 처리 --%>
<%-- => Map 객체의 get() 메소드를 호출하지 않아도 Map 객체의 맵값을 제공받아 출력 처리 가능 --%>
<p>자동차 모델명 = ${carMap.modelName }</p>
<p>자동차 색상 = ${carMap.carColor }</p>
</body>
</html>
basic_string .jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//pageContext.setAttribute(String attributeName, Object attributeValue)
// => pageContext 내장객체에 속성명(문자열)과 속성값(객체)를 전달받아 저장하는 메소드 - page Scope
//page Scope : 스코프 속성값을 저장한 웹프로그램에서만 속성값을 객체를 반환받아 사용 가능
pageContext.setAttribute("name", "홍길동");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL(Expression Language)</h1>
<hr>
<p>EL : 스코프(Scope) 객체의 속성값으로 저장된 객체를 제공받아 출력 처리하기 위한 언어</p>
<hr>
<h2>EL 미사용</h2>
<%
//pageContext.getAttribute(String attributeName) : pageContext 내장객체에 저장된
//스코프 속성값을 속성명을 이용하여 객체로 반환하는 메소드
// => Object 타입의 객체로 반환하므로 반드시 명시적 객체 형변환하여 사용
String name=(String)pageContext.getAttribute("name");
//매개변수로 전달받은 속성명에 대한 속성값이 없는 경우 null 반환
String pageName=(String)pageContext.getAttribute("pageName");
%>
<%-- 반환받은 객체는 JSP 표현식(Expression)를 이용하여 출력 처리 --%>
<p>이름(name) = <%=name %></p>
<%-- 반환받은 객체가 [null]인 경우 JSP 표현식은 "null" 문자열로 변환되어 출력 처리 --%>
<p>이름(pageName) = <%=pageName %></p>
<%-- if 구문을 사용하여 반환받은 객체가 [null]이 아닌 경우에만 JSP 표현식으로 출력 처리 --%>
<p>이름(pageName) = <% if(pageName!=null) { %><%=pageName %><% } %></p>
<hr>
<h2>EL 사용</h2>
<%-- ${속성명} : EL 표현식으로 스코프 객체의 속성명을 사용하면 속성값을 제공받아 출력 처리 --%>
<%-- => getAttribute() 메소드를 호출하지 않아도 스코프 속성값을 제공받아 출력 처리 가능 --%>
<%-- => EL 표현식을 사용하여 스코프 속성명으로 값을 제공받아 출력 처리 --%>
<p>이름(name) = ${name}</p>
<%-- EL 표현식에서 사용한 스코프 객체의 속성명에 대한 속성값이 없는 경우 EL 미실행 - 속성값 미출력 --%>
<p>이름(pageName) = ${pageName}</p>
</body>
</html>
member .jsp
<%@page import="xyz.itwill.el.Car"%>
<%@page import="xyz.itwill.el.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- Member 객체를 생성하여 Request Scope 속성값으로 저장하고 다른 웹프로그램(JSP)으로
포워드 이동하는 JSP 문서 - 요청을 처리하는 웹프로그램(Model) --%>
<%
Member member=new Member("홍길동", new Car("싼타페", "하얀색"));
//request 내장객체에 Member 객체를 속성값으로 저장 - Request Scope
//Request Scope : 스코프 속성값을 저장한 웹프로그램과 스레드가 이동된 웹프로그램에서만
//속성값을 객체로 반환받아 사용 가능
request.setAttribute("member", member);
//포워드 이동 : 현재 웹프로그램의 명령을 실행하는 스레드를 다른 웹프로그램으로 이동시켜
//명령을 실행하여 응답 처리하기 위한 기능 제공
// => 스레드가 이동되는 웹프로그램은 현재 웹프로그램의 request 객체와 response 객체를 전달받아 사용
//request.getRequestDispatcher("member_non_el.jsp").forward(request, response);
request.getRequestDispatcher("member_el.jsp").forward(request, response);
%>
member_el .jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- [member.jsp] 문서의 Request Scope 속성값을 객체로 반환받아 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%-- => 요청 페이지의 대한 실행 결과를 Scope 속성값으로 제공받아 응답 처리하는 웹프로그램(View) --%>
<%-- => 응답 페이지를 요청한 경우 Request Scope 속성값이 없으면 EL 미실행 - NullPointerException 미발생 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 사용</h1>
<hr>
<%-- <p>회원정보= ${member }</p> --%>
<p>회원의 이름= ${member.name }</p>
<%-- <p>회원의 자동차= ${member.car }</p> --%>
<p>회원 자동차의 모델명 = ${member.car.modelName }</p>
<p>회원 자동차의 색상 = ${member.car.carColor }</p>
<hr>
<%-- EL 표현식에서 . 연산자 대신 [] 연산자를 이용하여 필드명(맵키)으로 필드값(맵값)을
제공받아 출력 처리 가능 --%>
<%-- => [] 연산자에 필드명(맵키)를 사용할 경우 반드시 " " 안에 표현 --%>
<p>회원의 이름= ${member["name"] }</p>
<p>회원 자동차의 모델명 = ${member["car"]["modelName"] }</p>
<p>회원 자동차의 색상 = ${member["car"]["carColor"] }</p>
</body>
</html>
member_non_el .jsp
<%@page import="xyz.itwill.el.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- [member.jsp] 문서의 Request Scope 속성값을 객체로 반환받아 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%-- => 요청 페이지의 대한 실행 결과를 Scope 속성값으로 제공받아 응답 처리하는 웹프로그램(View) --%>
<%-- => 응답 페이지를 요청한 경우 Request Scope 속성값이 없으므로 NullPointerException 발생 --%>
<%
//Request Scope 속성값을 객체로 반환받아 저장
Member member=(Member)request.getAttribute("member");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL 미사용</h1>
<hr>
<%-- <p>회원정보 = <%=member %></p> --%>
<p>회원의 이름 = <%=member.getName() %></p>
<%-- <p>회원의 자동차 = <%=member.getCar() %></p> --%>
<p>회원 자동차의 모델명 = <%=member.getCar().getModelName() %></p>
<p>회원 자동차의 색상 = <%=member.getCar().getCarColor() %></p>
</body>
</html>