
내장객체(Implicit Object)
내장객체는 WAS 프로그램에 의해 JSP 문서에서 사용되도록 제공되는 Java 객체이다.
page(HttpJspPage) : JSP 문서정보를 제공하기 위한 객체
config(ServletConfig) : WAS 프로그램에 등록된 환경설정 값을 제공하기 위한 객체
out(JspWriter) : 클라이언트에게 응답될 문서파일을 생성하기 위한 객체 - 출력스트림
request(HttpServletResquest) : 클라이언트의 요청정보를 제공하기 위한 객체
response(HttpServletResponse) : 클라이언트의 응답정보를 제공하기 위한 객체
session(HttpSession) : 서버와 클라이언트의 연결 지속성을 제공하기 위한 객체
application(ServletContext) : 웹자원(WebContext)을 관리하는 정보를 제공하기 위한 객체 - WAS
pageContext(PageContext) : 웹프로그램 작성에 필요한 객체를 제공하기 위한 객체
exception(Exception) : 웹프로그램 실행시 발생된 예외를 제공하기 위한 객체 - page Directive에서 isErrorPage 속성값을 [true]로 설정한 경우에만 제공 : 에러페이지에서 사용
예제)
1. 비로그인 상태의 사용자인 경우 사용자로부터 로그인 처리에 필요한 인증정보(아이디와 비밀번호)를 입력받기위한 JSP 문서(login_form.jsp) 생성
→ [로그인] 태그를 클릭한 경우 [login_action.jsp] 문서를 요청하여 페이지 이동 - 입력값(인증정보) 전달
+ 로그인 상태의 사용자인 경우 환영메세지를 전달하여 응답
[login_form.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//바인딩된 세션에 저장된 에러메세지를 반환받아 저장
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
//session.removeAttribute(String attributeName) : 클라이언트의 정보(JSESSIONID 쿠키)로
//바인딩된 세션(session)에서 매개변수로 전달된 속성명의 속성값(객체)을 삭제하는 메소드
// => 바인딩된 세션에 저장된 객체는 세션 소멸 전까지 유지
//다른 JSP 문서에 세션에 저장된 에러메세지를 사용할 수 없도록 삭제 처리
session.removeAttribute("message");
}
String id=(String)session.getAttribute("id");
if(id==null) {
id="";
} else {
session.removeAttribute("id");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>로그인</h1>
<hr>
<form action="login_action.jsp" method="post" name="loginForm">
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="id" value="<%=id%>"></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="passwd"></td>
</tr>
<tr>
<td colspan="2"><button type="button" id="loginBtn">로그인</button>
</tr>
</table>
</form>
<p id="message" style="color: red;"><%=message %></p>
<script type="text/javascript">
loginForm.id.focus();
document.getElementById("loginBtn").onclick=function() {
if(loginForm.id.value=="") {
document.getElementById("message").innerHTML="아이디를 입력해 주세요.";
loginForm.id.focus();
return;
}
if(loginForm.passwd.value=="") {
document.getElementById("message").innerHTML="비밀번호를 입력해 주세요.";
loginForm.passwd.focus();
return;
}
loginForm.submit();
}
</script>
</body>
</html>
2. 인증정보(아이디와 비밀번호)를 전달받아 로그인 처리하기 위한 JSP 문서(login_action.jsp) 생성
→ [login_form.jsp] 문서의 form 태그를 이용하여 post 방식으로 요청하는 JSP 문서이다.
인증 실패 : 전달받은 인증정보가 저장매체에 저장된 인증정보와 일치하지 않는 경우
→ 클라이언트에게 [login_form.jsp]를 요청할 수 있는 URL 주소를 전달하여 응답한다.
인증 성공 : 전달받은 인증정보가 저장매체에 저장된 인증정보와일치하는 경우
→ 인증 성공시, 권한 관련 정보가 저장된 객체를 세션에 저장한다. - 클라이언트에게 권한을 제공한다. (로그인)
→ 클라이언트에게 [login_user.jsp]를 요청할 수 있는 URL 주소를 전달하여 응답한다.
[login_action.jsp]
request.getMethod() : JSP문서를 요청한 요청방식(GET or POST)을 반환하는 메소드
response.sendError(int sc) : 클라이언트에게 에러코드(4XX or 5XX)를 전달하여 응답 처리하는 메소드
response.sendRedirect(int sc) : 클라이언트에게 URL 주소를 전달하여 응답 처리하는 메소드
→ URL 주소를 응답받은 클라이언트는 브라우저의 요청 URL 주소를 변경하여 요청 처리하고 실행결과를 응답받아 출력한다. - 리다이렉트를 이용한 페이지 이동(리다이렉트 이동)
URLEncoder.encode(String s, String enc) : 매개변수로 전달받은 문자열을 원하는 문자형태의 유니코드로 부호화 처리하여 반환하는 메소드
→ JavaScript의 encoderURIComponent 함수와 동일한 기능을 제공한다.
request.setCharacterEncoding(String enc) : POST 방식으로 요청하여 리퀘스트 메세지 몸체부에 저장되어 전달되는 값에 대한 문자형태를 변경하는 메소드
request.getParameter(String name) : 전달값을 문자열(String 객체)로 반환하는 메소드
→ 매개변수로 전달받은 이름의 전달값이 없는 경우 null을 반환한다.
request.getParameterValues(String name) : 같은 이름으로 전달된 값이 여러개인 경우 모든 전달값을 문자열 배열로 반환하는 메소드
session.setAttribute(String attributeName, Object attributeValue) : 클라이언트의 정보(JSESSIONID 쿠키)로 바인딩 세션(session)에 이름(속성명)과 객체(속성값)를 전달받아 저장(변경)하는 메소드
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
if(request.getMethod().equals("GET")) {//JSP 문서를 GET 방식으로 요청한 경우 - 비정상적인 요청
//1) 클라이언트에게 에러코드 전달하여 응답 처리
/*
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);//405
return;
*/
//2) [login_form.jsp] 문서로 이동하기 위한 URL 주소를 전달하여 응답
// => 질의문자열(QueryString)을 사용하여 [login_form.jsp] 문서에 값(에러메세지)을 전달
// => 질의문자열로 영문자, 숫자, 일부 특수문자를 제외한 문자는 전달 불가능 - 부호화 처리하여 전달 가능
/*
String message=URLEncoder.encode("비정상적인 방법으로 페이지를 요청 하였습니다.", "utf-8");
response.sendRedirect("login_form.jsp?message="+message);
return;
*/
//3) 바인딩된 세션에 에러메세지 저장
session.setAttribute("message", "비정상적인 방법으로 페이지를 요청 하였습니다.");
response.sendRedirect("login_form.jsp");
return;
}
//request.setCharacterEncoding("utf-8");//한글 전달값이 없는 경우 생략 가능
String id=request.getParameter("id");
String passwd=request.getParameter("passwd");
if(!id.equals("abc123") || !passwd.equals("123456")) {//인증실패
session.setAttribute("message", "아이디 또는 비밀번호가 맞지 않습니다.");
session.setAttribute("id", id);
response.sendRedirect("login_form.jsp");
return;
}
//인증 성공
session.setAttribute("loginId", id);//권한 관련 정보가 저장된 객체를 세션에 저장
response.sendRedirect("login_user.jsp");
%>
로그인 상태의 사용자에게 환영메세지를 전달하여 응답하는 JSP 문서(login_user.jsp) 생성
→ 비로그인 상태의 사용자인 경우 [login_form.jsp] 문서를 요청할 수 있는 URL 주소를 전달하여 응답
[login_user.jsp]
session.getAttribute(String attributeName) : 클라이언트의 정보(JSESSIONID 쿠키)로 바인딩된 세션(session)에서 매개변수로 전달된 속성명의 속성값(객체)을 반환하는 메소드
→ Object 객체로 반환되므로 반드시 명시적 객체 형변환을 사용해야 한다.
→ 속성명으로 저장된 속성값이 없는 경우 null을 반환한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String loginId=(String)session.getAttribute("loginId");
if(loginId==null) {//반환받은 속성값(객체)가 없는 경우 - 비로그인 상태의 사용자
session.setAttribute("message", "로그인 상태의 사용자만 접근 가능한 페이지입니다.");
response.sendRedirect("login_form.jsp");
return;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>로그인 사용자 전용 페이지</h1>
<hr>
<p>
<%=loginId %>님, 환영합니다.
<a href="logout_action.jsp">[로그아웃]</a>
<a href="login_form.jsp">[메인으로]</a>
</p>
<hr>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<p>로그인 사용자만 확인 가능한 내용입니다.</p>
<hr>
</body>
</html>
로그아웃 처리 후 [login_form.jsp] 문서를 요청할 수 있는 URL 주소를 전달하여 응답하는 [logout_action.jsp] 생성
→ 로그아웃 처리 : 권한 관련 정보가 저장된 객체를 세션에서 삭제 처리
session.invalidate() : 클라이언트의 정보(JSESSIONID 쿠키)로 바인딩된 세션(session)을 삭제하는 메소드 - 세션 언바인딩(Session UnBinding) 처리
[logout_action.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//session.removeAttribute("loginId");
session.invalidate();
response.sendRedirect("login_form.jsp");
%>

상대경로 절대경로

상대경로를 이용하여 웹자원을 제공받아 사용
→ 상대경로 : 현재 요청 JSP 문서의 디렉토리를 기준으로 웹자원의 경로 표현
→ 웹자원의 경로를 잘못 표현한 경우 404 발생이 가능하기 때문에 웹자원의 경로는 절대경로로 표현하는 것을 권장한다.
<img alt="코알라" src="../images/Koala.jpg" width="200">
절대경로를 이용하여 웹자원을 제공받아 사용
→ 절대경로 : 최상위 디렉토리를 기준으로 웹자원의 경로 표현
→ 웹프로젝트의 파일이 저장된 컨텍스트 디렉토리의 경로 변경 가능 - 404 발생이 가능하다
<img alt="코알라" src="/jsp/images/Koala.jpg" width="200">
절대경로에서 웹자원이 저장된 컨텍스트 디렉토리의 경로는 request 객체의 getContextPath() 메소드를 호출하여 반환받아 사용한다.
request.getContextPath() : 컨텍스트 디렉토리 경로를 반환하는 메소드
<img alt="코알라" src="<%=request.getContextPath() %>/images/Koala.jpg" width="200">
'학원 > 복기' 카테고리의 다른 글
[JSP] 표준 액션 태그(Standard Action Tag) - include 태그/forward 태그/param 태그 (0) | 2023.06.25 |
---|---|
[JSP] 객체의 사용범위(Scope) (0) | 2023.06.25 |
[JSP] 지시어(Directive) - taglib (0) | 2023.06.22 |
[JSP] 지시어(Directive) - include (0) | 2023.06.22 |
[JSP] 지시어(Directive) - page (0) | 2023.06.21 |