- page - 한 페이지 내부에서 사용할 때(지역변수)
- request - 한개의 요청에서 처리되는 모든 페이지에서 유지
- session - 브라우저를 끄거나 제한시간까지 모든 페이지에서 유지
- 로그인
- 사용자 저장하려는 정보 서버에 기록하고,
요청이 있으면 활용가능 - 각 브라우저별로 독립적
-한개의 컴퓨터에서 ie, chrome 접속시 : 별개의 세션 - 사용법
<%@ page session = "true" %> 디폴트로 되어있음, 사용안할때만 끔 - getId() - 세션의 고유아이디 확인
- getCreationTime() - 생성시간 (유닉스 시간 : 1970년부터 밀리세컨드)
- getLastAccessedTime() -최근 접근시간 (유닉스 시간)
- getAttribute()
- setAttribute()
- invalidate() - 세션 새로 생성
- 로그아웃
- application -웹사이트가 리부팅될 때까지 모든 페이지에서 유지
저장 : setAttribute('key' , 내용(객체))
출력 : getAttribute('key')
forward / include 액션 태그
데이터 전달
- jsp: param -request.getParamter
- request.setAttribute -request.getAttribute
1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("아이디 : "+ session.getId() + "<br>");
java.util.Date time = new java.util.Date();
time.setTime(session.getCreationTime());
out.println("생성시간 : "+ time.toLocaleString()+ "<br>");
time.setTime(session.getLastAccessedTime());
out.println("접근시간 : "+ time.toLocaleString()+ "<br>");
//세션 유효시간 //30분동안 동작이 없으면 자동 파기 //tomcat 설정에 의해서 처리
//세션 유효시간 관리를 잘해줘야지 서버 메모리를 효율적으로 사용가능
out.println("유효시간 : "+ session.getMaxInactiveInterval()+ "<br>");
%>
</body>
</html>
2
로그인 구조
- 아이디 ,비밀번호 form
- 검사
- (ok) session 추가 ▶ 로그인 된 페이지로 ▶세션을 검사
- (no) 이전페이지로
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login_ok.jsp" method="post">
아이디 <input type="text" name="id" size="20"><br>
비밀번호 <input type="password" name="password" size="20"><br>
<input type="submit" value='로그인'>
</form>
</body>
</html>
login_ok<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String id =request.getParameter("id");
String password =request.getParameter("password");
//아이디 비번 검사
int flag = 1;
if(id.equals("tester") && password.equals("1234")){
flag = 0;
//로그인유지를 위한 session 값 넣음
//서버에서 처리하는 것이기 때문에 클라이언트가 id값을 조작할 수 없음
session.setAttribute("id", id);
}
//페이지 이동
out.println("<script type='text/javascript'>");
if(flag==0){
out.println("alert('로그인이 되었습니다');");
out.println("location.href = 'login.jsp';");
}else{
out.println("alert('아이디나 비밀번호가 틀립니다');");
out.println("history.back();");
}
out.println("</script>");
%>
login<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//세션값 불러옴
String id = (String)session.getAttribute("id");
boolean checkLogin = (id==null)?false:true;
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if(checkLogin){
out.println("로그인이 되었습니다.");
}else{
out.println("로그인이 안 되었습니다.");
}
%>
</body>
</html>
3.로그아웃
login_ok
lt;%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String id =request.getParameter("id");
String password =request.getParameter("password");
//아이디 비번 검사
int flag = 1;
if(id.equals("tester") && password.equals("1234")){
flag = 0;
session.setAttribute("id", id);
}
//페이지 이동
out.println("<script type='text/javascript'>");
if(flag==0){
out.println("alert('로그인이 되었습니다');");
out.println("location.href = 'login.jsp';"); //로그아웃 링크
}else{
out.println("alert('아이디나 비밀번호가 틀립니다');");
out.println("history.back();");
}
out.println("</script>");
%>
logout<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//로그아웃시 세션을 지움
session.invalidate();
out.println("<script type='text/javascript'>");
out.println("alert('로그아웃 되었습니다');");
out.println("location.href = 'login.jsp';");
out.println("</script>");
%>
4. 쿠키
cookie
- 사용자 브라우저에 데이터 저장
- 사용자가 쿠키를 삭제 할 수 있음
- javascript , JSP 둘다 쿠키생성 가능
- 과정
- 생성 ▶ 저장 ▶ 전송
- 특성
- 이름
- 값
- 유효시간 (유효시간이 없을 경우 브라우저를 닫으면 없어짐)
- 도메인/ 경로
- 사용
- Cookie class
- getName / setName
- getValue / setValue
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//쿠키의 생성
Cookie cookie1 = new Cookie("name", "tester");
//쿠키 저장
response.addCookie(cookie1);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= cookie1.getName() %>의 쿠키의 값 = <%= cookie1.getValue() %><br>
</body>
</html>
5
makeCookie
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//쿠키의 생성
Cookie cookie1 = new Cookie("name", "tester");
Cookie cookie2 = new Cookie("age", "23");
//쿠키 저장
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= cookie1.getName() %>의 쿠키의 값 = <%= cookie1.getValue() %><br>
<%= cookie2.getName() %>의 쿠키의 값 = <%= cookie2.getValue() %>
</body>
</html>
readCookie<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//쿠키는 배열로 받음
Cookie[] cookies = request.getCookies();
if(cookies !=null && cookies.length>0){
for(Cookie cookie : cookies){
out.println(cookie.getName() +" / "+ cookie.getValue() +"<br>");
}
}
%>
</body>
</html>
6
makeCookie
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.net.URLEncoder"%>
<%
//쿠키의 생성 (한글일 경우 인코딩)
Cookie cookie1 = new Cookie("name", URLEncoder.encode("홍길동"));
Cookie cookie2 = new Cookie("age", "23");
//쿠키 저장
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= cookie1.getName() %>의 쿠키의 값 = <%= cookie1.getValue() %><br>
<%= cookie2.getName() %>의 쿠키의 값 = <%= cookie2.getValue() %>
</body>
</html>
ReadCookie<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//쿠키는 배열로 받음
Cookie[] cookies = request.getCookies();
if(cookies !=null && cookies.length>0){
for(Cookie cookie : cookies){
out.println(cookie.getName() +" / "+ URLDecoder.decode(cookie.getValue(),"utf-8") +"<br>");
}
}
%>
</body>
</html>
7. 쿠키 유효시간
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.net.URLEncoder"%>
<%
//쿠키의 생성
Cookie cookie1 = new Cookie("name", URLEncoder.encode("홍길동"));
Cookie cookie2 = new Cookie("age", "23");
//유효시간은 초단위
cookie1.setMaxAge(60*30);
cookie2.setMaxAge(60*30);
//쿠키 삭제
//cookie1.setMaxAge(-1);
//cookie2.setMaxAge(0);
//쿠키 저장
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= cookie1.getName() %>의 쿠키의 값 = <%= cookie1.getValue() %><br>
<%= cookie2.getName() %>의 쿠키의 값 = <%= cookie2.getValue() %>
</body>
</html>
8.표현식
<%=
- out.println()
EL(Expression Language)
- ${데이터}
JSTL(JSP Standard Tag Library) : 사용자 정의 태그
- 액션 태그의 확장판
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- EL 출력의 새로운 방법-->
isELIgnored="false" (default)
<table border='1'>
<tr>
<td width='200' align='center'>표현언어</td>
<td width='200' align='center'>값</td>
</tr>
<tr>
<td align='center'>\${ 10 }</td>
<td align='center'>${ 10 }</td>
</tr>
<tr>
<td align='center'>\${ "10" }</td>
<td align='center'>${ "10" }</td>
</tr>
<tr>
<td align='center'>\${ 2+5 }</td>
<td align='center'>${ 2+5 }</td>
</tr>
<tr>
<td align='center'>\${ 2*5 }</td>
<td align='center'>${ 2*5 }</td>
</tr>
<tr>
<td align='center'>\${ 2 div 5 }</td>
<td align='center'>${ 2 div 5 }</td>
</tr>
<tr>
<td align='center'>\${ 2 mod 5 }</td>
<td align='center'>${ 2 mod 5 }</td>
</tr>
<tr>
<td align='center'>\${ "2" + 5 }</td> <!-- 자동 형변환 -->
<td align='center'>${ "2" + 5 }</td>
</tr>
<tr>
<td align='center'>\${ null + 5 }</td> <!-- 자동 형변환 -->
<td align='center'>${ null + 5 }</td>
</tr>
<tr>
<td align='center'>\${ 2<3 }</td>
<td align='center'>${ 2<3 }</td>
</tr>
<tr>
<td align='center'>\${ 2 lt 3 }</td> <!-- 부등호 문자 lt -->
<td align='center'>${ 2 lt 3 }</td>
</tr>
<tr>
<td align='center'>\${ empty(data) }</td> <!-- 비어있는지 확인 -->
<td align='center'>${ empty(data) }</td>
</tr>
<tr>
<td align='center'>\${ (2<3)?"작다":"크다" }</td> <!-- 삼항연산자 가능 -->
<td align='center'>${ (2<3)?"작다":"크다" }</td>
</tr>
</table>
</body>
</html>
9
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name1 = "홍길동";
request.setAttribute("name2", "박문수");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 프린트 일반적인 방법 --%>
<%
out.println(name1 +"<br>"); //지역변수는 EL로 표현 못함
out.println(request.getAttribute("name2") +"<br><br>"); //request객체안에 담긴 변수 EL로 가능함
%>
<%-- EL --%>
${ requestScope.name2 }<br>
${ requestScope['name2'] }<br> <!-- 배열 key로 받아올 수 있음 -->
${ name2 }<br>
</body>
</html>
10.객체별 출력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//데이터 담을 수 있는 객체//pageContext // request //session //application
pageContext.setAttribute("name1", "홍길동");
request.setAttribute("name2" , "박문수");
session.setAttribute("name3", "성춘향");
application.setAttribute("name4", "이몽룡"); //tomcat 종료전까지 브라우저를 꺼도 살아있음
//키값을 동일하게 쓴경우
pageContext.setAttribute("name", "홍길동");
request.setAttribute("name" , "박문수");
session.setAttribute("name", "성춘향");
application.setAttribute("name", "이몽룡");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 일반적 출력 -->
page : <%= pageContext.getAttribute("name1") %><br><br>
<!-- EL 출력 -->
page : ${pageScope.name1 }<br>
request : ${ requestScope.name2 }<br>
session : ${ sessionScope.name3 }<br>
application : ${ applicationScope.name4 }<br><br>
<!-- EL 단순 출력 -->
page : ${ name1 }<br>
request : ${ name2 }<br>
session : ${ name3 }<br>
application : ${ name4 }<br><br>
<!-- 키값이 동일한경우 우선순위는 가장 가까운 쪽 page▶request▶session▶application -->
<!-- 선언이 안되어있으면 안나옴 (null로찍히지 않음) -->
${ name }
</body>
</html>
11
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- java코드 -->
User-agent : <%= request.getHeader("user-agent") %> <br><br>
<!-- EL : 화살괄호를 쓰지 않을 수 있음 , HTML 디자인하기 변함-->
User-agent : ${header['user-agent'] }ELEx03.jsp
요청 URI : ${ pageContext.request.requestURI }<br>
리모트 URI : ${ pageContext.request.remoteAddr }<br>
리모트 URI : <%= request.getRemoteAddr() %> <br>
</body>
</html>
12. form전송 EL출력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login_ok.jsp" method="post">
아이디 <input type="text" name="id" size="20"><br>
비밀번호 <input type="password" name="password" size="20"><br>
<input type="submit" value='로그인'>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
//String id =request.getParameter("id");
//String password =request.getParameter("password");
%>
아이디 : ${param['id']}
비밀번호 : ${param['password']}
아이디 : ${param.id}
비밀번호 : ${param.password}
13. DTO 객체 EL출력
package model1;
public class BoardTO {
private String subject;
private String writer;
public String getSubject() {
System.out.println("getSubject 호출");
return subject;
}
public String getWriter() {
System.out.println("getWriter 호출");
return writer;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setWriter(String writer) {
this.writer = writer;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model1.BoardTO" %>
<%
BoardTO to = new BoardTO();
to.setSubject("제목");
to.setWriter("내용");
//객체를 집어넣을 수 있음
pageContext.setAttribute("to", to);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
제목 : ${ to.subject }<br> <!-- to객체의 멤버변수에 직접 접근하는 것이 아니라 getSubject()메소드로 부름 -->
내용 : ${ to.writer }<br>
</body>
</html>
14
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model1.BoardTO" %>
<%@page import="java.util.ArrayList"%>
<%
BoardTO to1 = new BoardTO();
to1.setSubject("제목1");
to1.setWriter("내용1");
BoardTO to2 = new BoardTO();
to2.setSubject("제목2");
to2.setWriter("내용2");
//배열
BoardTO[] lists = {to1, to2};
//ArrayList
ArrayList<BoardTO> lists2 = new ArrayList<>();
lists2.add(to1);
lists2.add(to2);
//hashmap
HashMap<String, BoardTO> lists3 = new HashMap<>();
lists3.put("to1", to1);
lists3.put("to2", to2);
//배열, Arraylist, Hashmap 집어넣을 수 있음
pageContext.setAttribute("lists", lists);
pageContext.setAttribute("lists2", lists2);
pageContext.setAttribute("lists3", lists3);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- EL : 배열 요소 접근 -->
제목 : ${ lists[0].subject }<br>
내용 : ${ lists[1]['writer'] }<br>
<!-- 내부적으로 exception 처리 되어있어서 NulloutofBounds 익셉션 안생김 -->
내용 : ${ lists[2].writer }<br>
<!-- EL : ArrayList 요소 접근방법 배열과 같음 -->
제목 : ${ lists2[0].subject }<br>
내용 : ${ lists2[1]['writer'] }<br>
<!-- EL : Hashmap 요소 접근방법 -->
제목 : ${ lists3.to1.subject }<br>
내용 : ${ lists3.to2.writer }<br>
</body>
</html>
15.EL 응용
web project 생성
context.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_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>ELEx02</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>ipAddress</param-name>
<param-value>127.0.0.1</param-value>
</context-param>
</web-app>
input
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
application.setAttribute("uri", request.getRequestURI());
session.setAttribute("id", "kimsh");
session.setAttribute("pw", "1234");
String[] subject = new String[]{"국어", "영어", "수학"};
session.setAttribute("subject", subject);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Input data</title>
</head>
<body>
<!-- request Param으로 name과 addr을 전송한다 -->
<form method="post" action="Output.jsp">
이름 : <input type="text" name="name"><br>
주소 : <input type="text" name="addr"><br>
선택 : <input type="checkbox" name="language" value="c">C언어
  <input type="checkbox" name="language" value="java">java언어
  <input type="checkbox" name="language" value="basic">Basic언어
<br>
<input type="submit" value="전송">
</form>
</body>
</html>
output
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>
<!-- 넘어온 매개 변수의 한글 처리를 위해 선언한다 -->
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta charset="UTF-8">
<title>Output data</title>
</head>
<body>
<!-- 초기화 매개변수 ipAddress의 값을 추출한다. -->
initParam ipAddress : ${ initParam.ipAddress }<br><br>
<!-- application 영역의 데이터 uri을 추출한다. -->
Application URI : ${ applicationScope.uri }<br><br>
<!-- session 영역의 데이터 id와 pw를 추출한다. -->
Session 아뒤 : ${ sessionScope.id }<br>
Session 아뒤 : ${ sessionScope.pw }<br><br>
<!-- request Parameter인 name과 addr을 추출한다. -->
Request 이름 : ${ param.name }<br>
Request 주소 : ${ param.addr }<br><br>
<!-- session 영역의 배열을 하나씩 추출한다. -->
0번 과목 : ${ sessionScope.subject[0] }<br>
1번 과목 : ${ sessionScope.subject[1] }<br>
2번 과목 : ${ sessionScope.subject[2] }<br><br>
<!-- request Parmeter인 language를 배열로 추출한다. checkbox 선택안하면 공백-->
0번 선택 내용 : ${ paramValues.language[0] }<br>
1번 선택 내용 : ${ paramValues.language[1] }<br>
2번 선택 내용 : ${ paramValues.language[2] }<br>
</body>
</html>
댓글 없음:
댓글 쓰기