JAVA/JAVA개발자 양성과정

[JSP] 에러페이지 코드별 설정하기, EL로 기본객체 조작하기, JSTL 주요 기능 예제

728x90
반응형

👩‍💻 자바 개발자 양성과정 30일차

  1. 에러페이지 코드별 설정하기
  2. EL로 기본객체 조작하기
  3. JSTL 주요 기능 예제

 

29일차 날아갔다 ㅠ_ㅠ


🎀 에러페이지 설정하기

두가지 방법이 있다.

1. 오류코드별로 다른 페이지 보여주기

2. 오류가 발생할 경우 공통적인 페이지 보여주기

 

 

1. 오류코드별로 다른 페이지 보여주기

web.xml에 코드별로 페이지를 설정해준다.

<%-- xml.jsp --%>
<error-page>
	<error-code>404</error-code>
	<location>/404error.jsp</location>
</error-page>

- 404오류 발생시 /404error.jsp페이지가 열리게 한다. (포워딩 방식)

 

 

2. 오류코드에 상관없이, 오류가 발생할 경우 공통적인 오류 페이지 보여주기

에러페이지에 isErrorPage="true" 로 설정하고, 오류 발생 페이지에 errorPage="에러페이지 경로"를 적어준다

 

오류발생 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page errorPage="/error.jsp"%>

<%
String name = null;
%>

<%=name.length()%>

 

오류페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>요청하신 페이지가 존재하지 않습니다.</h1>
</body>
</html>

 

🎀 EL 내장 객체

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


<%

//page영역에 uesremail이라는 속성이름으로 사용자 이메일 정보를 저장한다.
pageContext.setAttribute("userEmail", "java@naver.com");

//page영역에 저장된 이메일 정보를 구한다.
String userEmail = (String)pageContext.getAttribute("userEmail");


%>
<%-- 페이지 영역에 바인딩된 값은 아래와 같이 가져올수있다. --%>
<h3>${pageScope.userEmail}</h3>


pageScope

requestScope

sessionScope

applicationScope

param

paramValues

header

headerValues
cookie
initParam
pageContext


🎀 EL예제 - EL표현 방식

자바 빈(java bean) ?

생성자 메서드랑 getter setter 설정까지 해준 경우

package domain;


//자바 빈(bean) - 생성자 메서드랑 getter setter 설정까지 해준 경우
//데이터를 표현하는 클래스
public class MemberVo {

	//property
	private String name;
	private int age;
	
	public MemberVo(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	
	
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="domain.MemberVo" %>

<%

//page영역에 member라는 속성이름으로 회원정보를 저장한다.
pageContext.setAttribute("member", new MemberVo("julla", 10));

//page영역에 저장된 이메일 정보를 구한다.
MemberVo member = (MemberVo)pageContext.getAttribute("member");


%>
<%-- 페이지 영역에 바인딩된 값은 아래와 같이 가져올수있다. --%>
<h3>el버전 : ${pageScope.member.name}</h3>
<h3>el버전 : ${pageScope.member.age}</h3>

-> memberVo에 getName이 없으면 오류가 발생한다.

즉, ${pageScope.member.name} = member.getName();

 


🎀 pageContext기본 객체에 ArraytList저장시, EL출력방식

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>

<%
	ArrayList<MemberVo> members = new ArrayList<MemberVo>();
	members.add(new MemberVo("dd", 10));
	members.add(new MemberVo("hh", 30));
	members.add(new MemberVo("gg", 70));
	
	pageContext.setAttribute("memberList", members);
%>

${pageScope.memberList[0].name}, ${pageScope.memberList[0].age} <br>
${pageScope.memberList[1].name}, ${pageScope.memberList[1].age} <br>
${pageScope.memberList[2].name}, ${pageScope.memberList[2].age}

🎀 pageContext기본 객체에 Map저장시, EL출력방식 2가지

- 꺽세를 사용하는 방법 : ${pageScope.memberList["java1"].name}

- .을 사용하는 방법 : ${pageScope.memberList.java1.name}

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>

<%
	Map<String, MemberVo> map = new HashMap<String, MemberVo>();
	map.put("java1", new MemberVo("ju",10));
	map.put("java2", new MemberVo("jfdf",14));
	map.put("java3", new MemberVo("gds",66));
	
	pageContext.setAttribute("memberList", map);
%>
방식 1<br>
${pageScope.memberList["java1"].name}<br>
${pageScope.memberList["java1"].age}<br><br>

방식 2<br>
${pageScope.memberList.java1.name}<br>
${pageScope.memberList.java1.age}<br>

🎀 request기본 객체에 저장한 값을 forwarding한 곳에서 EL방식으로 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//request영역에 member라는 속성이름으로 회원정보를 저장한다.
request.setAttribute("userEmail", "java@bave.om");

//viewRequestSet.jsp페이지로 이동한다.
RequestDispatcher dispatcher = request.getRequestDispatcher("/viewRequestSet.jsp");
dispatcher.forward(request, response);
%>

 

viewRequestSet.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

${requestScope.userEmail}


🎀 session기본 객체에 저장한 값을 redirect한 곳에서 EL방식으로 출력하기

<%@page import="domain.MemberVo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page session="true"%>

<%
session.setAttribute("java1", new MemberVo("ju",10));

/* 리다이렉트 방식으로 이동한다 */
response.sendRedirect(request.getContextPath() + "/viewSessionScope.jsp");
%>

 

viewSessionScope.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

${sessionScope.java1.name}


🎀 application기본 객체에 저장한 값을 다른 곳에서 EL방식으로 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page session="true"%>

<%
application.setAttribute("adminEmail", "admin@naver.com");
%>

위에 코드를 먼저 실행시켜 application에 저장하고

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

관리자이메일 : ${applicationScope.adminEmail}

위 코드를 실행시키면 application이 켜져있는 동안 값이 유지된다.

 

- redirect로 값이 유지가 되는건 session이랑 application이다.

- 웹에서 application이 켜졌다 꺼졌다 한다는건 "서버가 켜졌다 꺼졌다" 한다는 것이다.

 

 


🎀 파라미터를 통해 다른 곳에서 EL방식으로 출력하기

param_1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form onsubmit="return false" id="form">
		<label for="name">이름 :</label><input type="text" name="name" id="name"><br>
		<label for="name">닉네임 :</label><input type="text" name="name" id="name"><br>
		<label for="age">나이 :</label><input type="text" name="age" id="age"><br>
		<button type="reset" id="resetBtn">취소</button>
		<button id="submitBtn">로그인</button>
	</form>
	
	<script>
		const form = document.getElementById("form");
		const submitBtn = document.getElementById("submitBtn");
		

		submitBtn.addEventListener("click", function () {
			form.action = "${pageContext.request.contextPath}/param_2.jsp";
			form.mothod = "POST";
			form.submit();
		})
	</script>
</body>
</html>

 

param_2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%--동일한 name의 파라미터 값이 있는 경우 "paramValues" 사용--%>
이름 : ${paramValues.name[0]}
닉네임 : ${paramValues.name[1]}

<%--유일한 name의 파라미터 값이 있는 경우 "param" 사용--%>
나이 : ${param.age}

이름과 닉네임의 name이 중복된다.


🎀 Header 기본객체를 통해 EL방식으로 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%-- 브라우저에 대한 정보 출력 --%>
user-agent : ${header["User-Agent"]}

${header["User-Agent"]}

 


🎀 cookie 기본객체를 통해 EL방식으로 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%
	Cookie cookie = new Cookie("userEmail", "java@gmail.com");
	cookie.setMaxAge(60*60*24);
	response.addCookie(cookie);
%>
쿠키 저장!

위에 코드를 먼저 실행시켜 cookie를 생성하고

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

사용자 이메일 (cookie) : ${cookie.userEmail.value}
사용자 이메일 (cookie) : ${cookie.userEmail.name}

${cookie.userEmail.value}

 


🎀 web.xml에 설정한 포기화 파라미터를 initParam기본객체를 통해 EL방식으로 출력하기

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	id="WebApp_ID" version="4.0">
	<display-name>jspWebApp</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>

	<context-param>
		<param-name>adminEmail</param-name>
		<param-value>admin@naver.com</param-value>
	</context-param>

</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

컨텍스트 초기화 파라미터 관리자 이메일 : ${initParam.adminEmail}

${initParam.adminEmail}


🎀 EL에서 제공하는 연산자 - empty, not empty

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>

<%
	ArrayList<MemberVo> members = new ArrayList<MemberVo>();
	members.add(new MemberVo("dd", 10));
	members.add(new MemberVo("hh", 30));
	members.add(new MemberVo("gg", 70));
	
	pageContext.setAttribute("memberList", members);
%>

<%-- el에서 제공하는 연산자 중에 하나 --%>
${empty pageScope.memberList}<br>
${not empty pageScope.memberList}<br>

${1+5}

empty -  값이 존재하는지 확인한다. 존재하면 true

not empty - 값이 존재하지 않는지 확인한다. 존재하지 않으면 true

 


🎀 JSTL을 이용해서 page기본객체 사용하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
//page영역에 uesremail이라는 속성이름으로 사용자 이메일 정보를 저장한다.
//pageContext.setAttribute("userEmail", "java@naver.com");
%>
<%-- page영역에 "userEmail"이라는 속성이름으로 사용자 이메일 정보를 저장한다. --%>
var - 변수이름
value - 값
<c:set var="userEmail" value="java@naver.com" scope="page"/>

<%-- 페이지 영역에 바인딩된 값은 아래와 같이 가져올수있다. --%>
<h3>${pageScope.userEmail}</h3>

pageContext.setAttribute("userEmail", "java@naver.com");

<c:set var="userEmail" value="java@naver.com" scope="page"/>

 

두개의 코드가 동일한 작동을 한다.

 


🎀 JSTL을 사용하기 위해서 라이브러리 설치

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

🎀 JSTL을 이용해서 SESSION기본객체 사용하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%-- session영역에 "userId"이라는 속성이름으로 사용자 이메일 정보를 저장한다. --%>
<c:set var="userId" value="java@naver.com" scope="session"/>

<%-- 페이지 영역에 바인딩된 값은 아래와 같이 가져올수있다. --%>
<h3>${sessionScope.userId}</h3>

 


🎀 JSTL을 이용해서 Request기본객체 사용하기

<%@page import="domain.MemberVo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
MemberVo member = new MemberVo("julla", 10);
%>

<%-- request영역에 "member"이라는 속성이름으로 사용자 정보를 저장한다. --%>
var - 영역에 바인딩된 속성이름
<c:set var="m" value="<%=member %>" scope="request"/>

<%-- 페이지 영역에 바인딩된 값은 아래와 같이 가져올수있다. --%>
<h3>${requestScope.m.name}</h3>
<h3>${requestScope.m.age}</h3>

 


🎀 JSTL을 이용해서 IF문 작성하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
	ArrayList<MemberVo> members = new ArrayList<MemberVo>();
	/* members.add(new MemberVo("dd", 10));
	members.add(new MemberVo("hh", 30));
	members.add(new MemberVo("gg", 70)); */
%>

<c:set var="memberList" value="<%=members %>" scope="page"></c:set>

<c:if test="${not empty pageScope.memberList}">
	${pageScope.memberList[0].name}, ${pageScope.memberList[0].age} <br>
	${pageScope.memberList[1].name}, ${pageScope.memberList[1].age} <br>
	${pageScope.memberList[2].name}, ${pageScope.memberList[2].age} <br>
</c:if>

<c:if test="${empty pageScope.memberList}">
	회원정보가 없습니다.
</c:if>

<c:if test="${not empty pageScope.memberList(조건)}">

조건이 참인 경우 실행할 코드

</c:if>

 


🎀 JSTL을 이용해서 Case문 작성하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="season" value="fail" scope="page"></c:set>

<c:choose>
	<c:when test="${pageScope.season == 'spring'} }">봄</c:when>
	<c:when test="${pageScope.season == 'summer'} }">여름</c:when>
	<c:when test="${pageScope.season == 'summer'} }">가을</c:when>
	<c:when test="${pageScope.season == 'summer'} }">겨울</c:when>
	<c:otherwise>계절을 정확히 작성하세요</c:otherwise>
</c:choose>

 


🎀 JSTL을 이용해서 ForEach문 작성하기/ForEach Index 값 받기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
	ArrayList<MemberVo> members = new ArrayList<MemberVo>();
	members.add(new MemberVo("dd", 10));
	members.add(new MemberVo("hh", 30));
	members.add(new MemberVo("gg", 70));
	
%>

<c:set var="memberList" value="<%=members %>" scope="page"></c:set>

<c:if test="${not empty pageScope.memberList}">
	<c:forEach var="member" items="${pageScope.memberList}" varStatus="loop">
		${loop.count} : ${loop.index} : ${member.name}, ${member.age}<br>
	</c:forEach>
</c:if>

 


🎀 JSTL을 이용해서 Url작성하기 

- 파라미터 전송에 가독성이 좋다

- 주소 작성시 컨텍스 패스를 작성할 필요가 없어서 편리하다

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%-- value를 보면 슬레이시로만 시작하는데, 이는 컨텍스 패스값을 포함하기 때문에 편리하다. --%>
<c:url var="url" value="/url.jsp" scope="page">
	<c:param name="email" value="java@gmail.com"></c:param>
	<c:param name="age" value="10"></c:param>
</c:url>

<a href="${pageScope.url}">이동</a>

url.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	${param.email} / ${param.age}
</body>
</html>

🎀 JSTL을 이용해서 디폴트 값을 설정한다.

- value에 들어있는 값을 출력한다. 만약 값이 없는 경우 디폴트 값을 설정할수 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

value에 들어있는 값을 출력한다. 만약 값이 없는 경우 디폴트 값을 설정할수 있다.
<c:set var="email"  value="thwls@navr.cpm" scope="page"></c:set>
<c:out value="${pageScope.email}" default="no"></c:out>
<c:out value="${sessionScope.email}" default="no"></c:out>

🎀 JSTL을 이용해서 Redirect하기 -sendredirect와 같은 기능

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ page session="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%-- sendredirect와 같은 기능 --%>
<c:redirect url="/redirect.jsp" >
	<c:param name="email" value="thwls@naver.com"/>
</c:redirect>

/redirect.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

이메일 : ${param.email}

리다이렉트여서 주소가 /redirect.jsp가 바뀐다.

 


🎀 JSTL 내장 function

jstl내장 function을 사용하기 위해선 관련 라이브러리를 설정해줘야한다.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

🎀 JSTL 내장 function - 데이터 갯수 카운팅하기 (fn:length)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="domain.MemberVo, java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%
	ArrayList<MemberVo> members = new ArrayList<MemberVo>();
	members.add(new MemberVo("dd333322", 10));
	members.add(new MemberVo("hh", 30));
	members.add(new MemberVo("gg", 70));
	
%>

<c:set var="memberList" value="<%=members %>" scope="page"></c:set>

${fn:length(pageScope.memberList)}

 

728x90
반응형