Out 객체
- out 객체는 서버에서 페이지로 output Stream하는 기능을 한다.
- 실제적으로는 페이지에 문자열을 출력하는 것 정도로만 사용
Response 객체
- Response 객체는 요청에 대해 응답 페이지를 전달해 주는 객체
- 페이지를 만드는(write) 객체라 out 객체처럼 출력이 가능
- 특정 페이지로 이동하는 것도 가능
- 데이터를 고객PC로 내려보내는 것도 가능
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p><a href="print.jsp">각 객체별 페이지 출력</a></p>
<p><a href="redirect.jsp">response를 이용한 페이지 이동</a></p>
<!-- redirect 활용 -->
<form action="redirect.jsp" method="post">
<input type="text" name="id" value=""/>
<input type="submit" value="send"/>
</form>
</body>
</html>
- 페이지 출력하는 방법 3가지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- response의 기능 1 : 응답할 페이지를 그린다. -->
<%= "<p>첫번째, 스크립틀릿을 활용하는 방법</p>" %>
<%
out.print("<p>두번째, out객체를 이용하는 방법</p>");
%>
<!-- response는 응답전용이기 때문에 가장 빠름 -->
<%
response.getWriter().write("<p>세번째, response 객체를 이용하는 방법</p>");
%>
- out은 response로부터 추출되어 나온 객체이기 때문에 순서가 느림
- scriptlet(<%= %>) 출력문은 사실 out객체이기 때문에 동급일 때는 위에서 아래로 읽음
- 여러개를 출력할 경우 한가지로 통일시켜서 출력(순서 바뀌지 않도록)
- request.setCharacterEncoding("UTF-8"); : 입력받는 언어 설정(한글로 입력할 경우 깨질 수 있어 설정해줌)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>여기를 거쳐서 goToPage.jsp로 이동</h1>
<%
//post방식으로 한글을 보내면 깨짐 / request를 UTF-8로 인코딩해줘야 함
request.setCharacterEncoding("UTF-8");
//index.jsp에서 보낸 id 값을 받아서 출력해보자
String id = request.getParameter("id");
System.out.println(id);
//받아온 id값이 admin일 경우 goToPage.jsp로 보냄
if(id.equals("admin")){
response.sendRedirect("goToPage.jsp");
}else{//아닐 경우 index.jsp로 보냄
response.sendRedirect("index.jsp");
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>redirect.jsp를 거쳐서 이동된 페이지입니다.</h1>
</body>
</html>
내장객체 cookie & session
- 웹에서 만들어지는 특정한 데이터를 저장하고 싶을 경우 cookie와 session이라는 저장객체를 사용
- 저장위치가 서로 다르므로 사용법과 보안 수준이 다름
Cookie
- client PC에 저장 : 브라우저를 닫거나 서비스를 종료해도 정보가 남음 ex) 방문한 페이지 기록
- 공공장소에서 사용하는 PC의 경우 쿠키에 저장된 내용을 누구든지 사용할 수 있음 => 보안성 낮음
- Java script로도 제어 가능
- 헷갈려하는 것 중 자동로그인이 있는데 자동로그인 기능 만들 때 사용하지 않음
- 쿠키 사용시간(수명) 지정 : setMaxAge(초단위); >> 시간지정 쉽게 하는 법 : 60(초)*n(분)*m(시간)*d(일)
- 쿠키 저장 방법(고객 PC로 저장) : response.addCookie();
- 쿠키 지우는 법 : setMaxAge(0);으로 설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.쿠키 객체화( ,나 - 등의 특수문자 사용x)
Cookie cookie = new Cookie("name","hong_gil_dong"); //key, value
//2.쿠키 수명(사용시간) 지정
cookie.setMaxAge(60*10); //초 단위(10분)
//3.쿠키 저장(고객PC)
response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input type="button" value="쿠키부르기" onclick="location.href='cookieResult.jsp'"/>
<br/>
<a href="exam/infoinput.jsp">쿠키 사용 예시</a>
<h2>쿠키 이름 : <%= cookie.getName() %></h2>
<h2>쿠키 값 : <%= cookie.getValue() %></h2>
<h2>쿠키 만료시간 : <%= cookie.getMaxAge() %></h2>
</body>
</html>
- 쿠키 불러오기 : request.getCookies(); (고객의 PC에 있는 쿠키를 불러와야하므로 request를 통해 가져와야 함)
- 쿠키는 여러 개인 경우가 많아 배열로 받아옴
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[] list = request.getCookies();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for(Cookie c : list){
%>
<p><%=c.getName()%> : <%=c.getValue()%></p>
<%
}
%>
</body>
</html>
- cookie 사용 예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>언어를 설정해주세요</h3>
<form action="coocieSet.jsp" method="post">
<input type="radio" name="lang" value="kor"/> 한국어
<input type="radio" name="lang" value="eng"/> English
<input type="submit" value="설정"/>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[] list = request.getCookies();
String name = "";
String value = "";
for(Cookie c : list){
name = c.getName();
if(name.equals("lang")){
value = c.getValue();
}
}
System.out.println("cookie value : " + value);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if(value.equals("kor")){
%>
<h2>한글 페이지에 오신 것을 환영합니다.</h2>
<%}else{ %>
<h2>Welcome to English Page</h2>
<%
}
%>
</body>
</html>
- cookie 값 저장 & null 방어
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.페이지에서 보낸 lang 값을 받음
String lang = request.getParameter("lang");
//null은 발생하지 않는게 좋다. 하지만 발생한다면?
//null 방어
if(lang != null){
//2.쿠키에 값을 저장
Cookie cookie = new Cookie("lang",lang);
cookie.setMaxAge(60*60*24); //하루
response.addCookie(cookie);
//3.다른 페이지로 보냄
response.sendRedirect("cookieGet.jsp");
}else{
response.sendRedirect("infoinput.jsp");
}
System.out.println(lang);
%>
Session
- server에 저장
- 서비스에서 나가거나 브라우저가 변경될 경우 끊김 ex) 로그인 & 로그인 후 저장되는 정보들
- Server side program으로만 제어 가능
- 보안성 높음
- cookie보다 다루기가 편함
- session.getMaxInactiveInterval(초단위); : 세션 정보 저장 유지시간 지정(default : 30분)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션값 확인
String name = (String)session.getAttribute("name");
//유지시간(inactive)
int age = session.getMaxInactiveInterval();
//session의 ID
String id = session.getId();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>SESSION</h2>
<h3>세션의 name 값 : <%= name %></h3>
<h3>세션의 유지시간 : <%= age %></h3>
<h3>세션의 ID 값 : <%= id %></h3>
<a href="sessionSet.jsp">세션 속성 저장</a>
<a href="sessionDel.jsp">세션 속성 삭제</a>
<a href="sessionInit.jsp">세션 초기화</a>
<p><a href="exam/login.jsp"/>로그인 예제</p>
</body>
</html>
- 세션 속성 저장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.setAttribute("name", "dongly"); //String, Object(어떤 타입이든 넣을 수 있음)
// 움직이지 않고 있을 때 유지되는 세션 시간(기본 30분)
session.setMaxInactiveInterval(60*10); //초
response.sendRedirect("index.jsp");
%>
- 세션 속성 삭제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션의 특정 속성을 지운 후
session.removeAttribute("name");
//index.jsp로 이동
response.sendRedirect("index.jsp");
%>
- 세션 초기화
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션 종료 -> 재생성(ID가 변경됨)
session.invalidate();
response.sendRedirect("index.jsp");
%>
- login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table, th, td{
border : 1px solid black;
border-collapse : collapse;
}
th, td{
padding : 5px 10px;
}
</style>
</head>
<body>
<form action="result.jsp" method="post">
<table>
<tr>
<th>ID</th>
<td><input type="text" name="userId"/></td>
</tr>
<tr>
<th>PW</th>
<td><input type="text" name="userPw"/></td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="login"/></th>
</tr>
</table>
</form>
</body>
</html>
- result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.login.jsp로부터 userId와 userPw 값을 받는다.
String id = request.getParameter("userId");
String pw = request.getParameter("userPw");
//System.out.println(id + "/" + pw);
if(id == null || pw == null){
response.sendRedirect("login.jsp");
}else{
//2.받아온 id와 pw가 admin과 pass인지 확인한다.
if(id.equals("admin") && pw.equals("pass")){
//4.일치하면 session에 loginId라는 이름으로 id 값을 저장한다.
session.setAttribute("loginId", id);
//5.현재 페이지에 머무른다.
}else{ //3.일치하지 않으면 login.jsp로 보낸다.
response.sendRedirect("login.jsp");
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>Login 성공 페이지</h3>
<div>
안녕하세요 <%= session.getAttribute("loginId") %>님
<a href="logout.jsp">로그아웃</a>
</div>
</body>
</html>
- logiut.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.session에서 loginId가 null이 아니면 삭제
if(session.getAttribute("loginId") != null){
session.removeAttribute("loginId");
}
//2.login.jsp로 보냄
response.sendRedirect("login.jsp");
%>
'코딩도전기 > JSP' 카테고리의 다른 글
JSP Templates 설정 (0) | 2023.03.02 |
---|---|
CODO Day17_JSP(JSTL태그&함수) (0) | 2023.02.23 |
CODO Day16_JSP(Scope/AtionTag/JavaBean/ElTag/JSTL) (0) | 2023.02.22 |
JSP_TEST (1) | 2023.02.20 |
CODO Day14_Java Servlet(server) Page(Web/WAS/TOMCAT/Scriptlet/내장객체(Request객체)) (0) | 2023.02.20 |