반응형
* 로그인 아이디 저장 동작 시나리오(예시-SW Expert Academy 홈페이지)
- 로그인 아이디 저장: 로그인 페이지에서 아이디를 저장하는 기능을 말함
- 로그인에 성공한 경우에만 쿠키를 생성 및 삭제
1) 쿠키에 저장된 아이디가 있으면, 로그인 페이지에서는 아이디가 자동 입력됨
- [아이디 저장] 체크박스 체크 후 로그인 → [로그아웃] → 다시 로그인 창 접속
2) [아이디 저장하기] 체크박스를 해제하고 로그인에 성공하면 쿠키가 삭제됨
- [아이디 저장] 체크박스 체크하지 않고 로그인 → [로그아웃] → 다시 로그인 창 접속(아이디가 자동으로 입력되어있지 않음)
1. 편의 기능 구현하기: 자바스크립트 코드 추가
- 메시지 알림창을 띄운 후 다음 페이지나 이전 페이지로 이동하는 자바스크립트 코드 필요 (로그인 성공/실패 여부에 따른 다음 동작을 처리
1) JSP 코드에 자바스크립트 전체 코드 삽입
- <script> 태그를 써야 하므로 소스가 전체적으로 지저분해지고, 반복되는 코드가 많아짐
- 다음과 같이 JSP의 스크립틀릿 부분 중간에 자바스크립트 코드를 삽입해야 함
<%
...JSP 코드(스크립틀릿) ...
%>
//스크립틀릿 중간에 자바스크립트 코드 추가
//알림창을 띄우고 지정된 페이지로 이동하는 자바스크립트 코드
<script>
alert('메시지');
location.href='이동할 페이지 경로';
</script>
<%
...JSP 코드(스크립틀릿) ...
%>
2) 별도의 “도우미 클래스” 만들기
- 1)의 단점 최소화 - 반복되는 소스가 줄어들어, 소스 코드가 전체적으로 깔끔해짐
- JSP에서 <script> 태그 없이 단 한 줄로 자바스크립트 코드 추가 가능
<%
...JSP 코드(스크립틀릿) ...
%>
//스크립틀릿 중간에 자바스크립트 코드 추가
JSFunction.alertLocation("메시지", "이동할 페이지 경로", out);
<%
...JSP 코드(스크립틀릿) ...
%>
- 다음의 JSFunction 클래스: 메시지 알림창을 띄운 후 특정 페이지로 이동하는 자바스크립트 코드를 추가해주는 메소드들을 담고 있음
//HelloJSP/Java Resources/src/utils/JSFunction.java
package utils;
import javax.servlet.jsp.JspWriter; //1.필요한 클래스 임포트
public class JSFunction {
//메시지 알림창을 띄운 후 명시한 URL로 이동
public static void alertLocation(String msg, String url, JspWriter out) {
try {
String script = "" // 3.삽입할 자바스크립트 코드
+ "<script>"
+ " alert('" + msg + "');"
+ " location.href='" + url + "';"
+ "</script>";
out.println(script); // 자바스크립트 코드를 out 내장 객체로 출력(삽입)
}
catch (Exception e) {}
}
//5.메시지 알림창을 띄운 후 이전 페이지로 돌아감
public static void alertBack(String msg, JspWriter out) {
try {
String script = ""
+ "<script>"
+ " alert('" + msg + "');"
+ " history.back();"
+ "</script>";
out.println(script);
}
catch (Exception e) {}
}
}
- JspWriter 클래스 임포트(참고: 기본 내장 객체인 out이 JspWriter 타입)
- alertLocation( )은 알림창으로 메시지를 보여준 후, 명시한 URL로 이동하는 메소드
→ 매개변수 3개: msg(알림창에 띄울 메시지), url(알림창 닫은 후 이동할 페이지의 URL), out(자바스크립트 코드 삽입할 출력 스트림-JSP의 out 내장 객체) - 2.의 메소드에서 자바스크립트 코드를 문자열 형태로 선언
- 3.에서 선언한 자바스크립트 코드를 out객체로 출력
- alertBack( )은 알림창을 띄운 후 무조건 이전 페이지로 돌아가는 메소드
2. 편의 기능 구현하기: 쿠키 관리자
- 쿠키를 읽을 때는 쿠키를 배열로 가져오므로 반복문과 조건문 필요 → 사용하는 쿠키가 많아지면 조건문은 계속 복잡해지므로, 쿠키를 편하게 사용할 수 있도록 도와주는 클래스 작성
//Java Resources/src/utils/CookieManager.java
package utils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieManager {
//명시한 이름, 값, 유지 기간 조건으로 새로운 쿠키를 생성
public static void makeCookie(HttpServletResponse response, String cName,
String cValue, int cTime) {
Cookie cookie = new Cookie(cName, cValue); //1.쿠키 생성
cookie.setPath("/"); //2.경로 설정
cookie.setMaxAge(cTime); //3.유지 기간 설정
response.addCookie(cookie); //4.응답 객체에 추가
}
// 명시한 이름의 쿠키를 찾아 그 값을 반환
public static String readCookie(HttpServletRequest request, String cName) {
String cookieValue = ""; // 반환 값
Cookie[] cookies = request.getCookies(); //5.
if (cookies != null) {
for (Cookie c : cookies) {
String cookieName = c.getName();
if (cookieName.equals(cName)) { //6.
cookieValue = c.getValue(); // 반환 값 갱신
}
}
}
return cookieValue; //7.
}
// 명시한 이름의 쿠키를 삭제
public static void deleteCookie(HttpServletResponse response, String cName) {
makeCookie(response, cName, "", 0); //8.
}
}
1) makeCookie( ) 메소드 - 3개의 매개변수를 받아 쿠키를 만들고 응답 헤더에 추가
- 쿠키 생성
- 쿠키 경로 설정
- 쿠키 유지 기간 설정
- 쿠키를 응답 헤더(객체)에 추가
2) readCookie( ) 메소드 - 명시한 쿠키의 값을 읽어 반환
5. request 내장 객체로부터, 클라이언트가 보내온 쿠키 목록을 받음
6. 5.에서 받은 쿠키 목록 중 cName과 이름이 같은 쿠키가 있는지 확인
7. 6.의 조건 충족 시, 해당 쿠키의 값을 반환
3) deleteCookie( ) 메소드 - 주어진 이름의 기존 쿠키 삭제
8. makeCookie( ) 메소드 재활용 [쿠키 생성 시 값을 빈 문자열로, 유지 기간을 0으로 부여하면 되기 때문]
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 14. 데이터베이스 - 특징, 오라클 설치(Oracle Database 11gR2 Express Edition), 사용자 계정 생성 및 권한 설정 (0) | 2023.06.27 |
---|---|
JAVA/JSP 13. 쿠키(Cookie) - 로그인 아이디 저장(로그인 페이지 작성하기, 로그인 및 아이디 저장 기능 구현하기, 동작 확인 (0) | 2023.06.20 |
JAVA/JSP 11. 쿠키(Cookie) - 레이어 팝업창 제어 (0) | 2023.05.27 |
JAVA/JSP 10. 쿠키(Cookie) - 정의, 기본 동작 확인 (0) | 2023.05.18 |
JAVA/JSP 9. 내장 객체의 영역(Scope) - session 영역, application 영역 (2) | 2023.05.03 |